rpmsgfs: use rptun_wait/post to resolve deadlock with usrsock
Signed-off-by: ligd <liguiding1@xiaomi.com>
This commit is contained in:
parent
96ed33f1d8
commit
40d9e10f37
@ -131,7 +131,7 @@ static int rpmsgfs_default_handler(FAR struct rpmsg_endpoint *ept,
|
|||||||
memcpy(cookie->data, data, len);
|
memcpy(cookie->data, data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
nxsem_post(&cookie->sem);
|
rpmsg_post(ept, &cookie->sem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ static int rpmsgfs_read_handler(FAR struct rpmsg_endpoint *ept,
|
|||||||
memcpy(cookie->data, rsp->buf, cookie->result);
|
memcpy(cookie->data, rsp->buf, cookie->result);
|
||||||
}
|
}
|
||||||
|
|
||||||
nxsem_post(&cookie->sem);
|
rpmsg_post(ept, &cookie->sem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -173,7 +173,7 @@ static int rpmsgfs_readdir_handler(FAR struct rpmsg_endpoint *ept,
|
|||||||
entry->d_type = rsp->type;
|
entry->d_type = rsp->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
nxsem_post(&cookie->sem);
|
rpmsg_post(ept, &cookie->sem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ static int rpmsgfs_statfs_handler(FAR struct rpmsg_endpoint *ept,
|
|||||||
buf->f_ffree = rsp->buf.f_ffree;
|
buf->f_ffree = rsp->buf.f_ffree;
|
||||||
}
|
}
|
||||||
|
|
||||||
nxsem_post(&cookie->sem);
|
rpmsg_post(ept, &cookie->sem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -234,12 +234,12 @@ static int rpmsgfs_stat_handler(FAR struct rpmsg_endpoint *ept,
|
|||||||
buf->st_blocks = rsp->buf.st_blocks;
|
buf->st_blocks = rsp->buf.st_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
nxsem_post(&cookie->sem);
|
rpmsg_post(ept, &cookie->sem);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static FAR void* rpmsgfs_get_tx_payload_buffer(FAR struct rpmsgfs_s *priv,
|
static FAR void *rpmsgfs_get_tx_payload_buffer(FAR struct rpmsgfs_s *priv,
|
||||||
FAR uint32_t *len)
|
FAR uint32_t *len)
|
||||||
{
|
{
|
||||||
int sval;
|
int sval;
|
||||||
@ -247,8 +247,8 @@ static FAR void* rpmsgfs_get_tx_payload_buffer(FAR struct rpmsgfs_s *priv,
|
|||||||
nxsem_get_value(&priv->wait, &sval);
|
nxsem_get_value(&priv->wait, &sval);
|
||||||
if (sval <= 0)
|
if (sval <= 0)
|
||||||
{
|
{
|
||||||
nxsem_wait_uninterruptible(&priv->wait);
|
rpmsg_wait(&priv->ept, &priv->wait);
|
||||||
nxsem_post(&priv->wait);
|
rpmsg_post(&priv->ept, &priv->wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rpmsg_get_tx_payload_buffer(&priv->ept, len, true);
|
return rpmsg_get_tx_payload_buffer(&priv->ept, len, true);
|
||||||
@ -257,7 +257,7 @@ static FAR void* rpmsgfs_get_tx_payload_buffer(FAR struct rpmsgfs_s *priv,
|
|||||||
static void rpmsgfs_ns_bound(struct rpmsg_endpoint *ept)
|
static void rpmsgfs_ns_bound(struct rpmsg_endpoint *ept)
|
||||||
{
|
{
|
||||||
FAR struct rpmsgfs_s *priv = ept->priv;
|
FAR struct rpmsgfs_s *priv = ept->priv;
|
||||||
nxsem_post(&priv->wait);
|
rpmsg_post(&priv->ept, &priv->wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rpmsgfs_device_created(FAR struct rpmsg_device *rdev,
|
static void rpmsgfs_device_created(FAR struct rpmsg_device *rdev,
|
||||||
@ -342,7 +342,7 @@ static int rpmsgfs_send_recv(FAR struct rpmsgfs_s *priv,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = nxsem_wait_uninterruptible(&cookie.sem);
|
ret = rpmsg_wait(&priv->ept, &cookie.sem);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
{
|
{
|
||||||
ret = cookie.result;
|
ret = cookie.result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user