|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [bug report] xen/pvcalls: implement release command
Hello Stefano Stabellini,
The patch 235a71c53903: "xen/pvcalls: implement release command" from
Oct 30, 2017, leads to the following static checker warning:
drivers/xen/pvcalls-front.c:1051 pvcalls_front_release()
error: double lock 'mutex:&map->active.in_mutex'
drivers/xen/pvcalls-front.c
1037 if (map->active_socket) {
1038 /*
1039 * Set in_error and wake up inflight_conn_req to force
1040 * recvmsg waiters to exit.
1041 */
1042 map->active.ring->in_error = -EBADF;
1043 wake_up_interruptible(&map->active.inflight_conn_req);
1044
1045 /*
1046 * Wait until there are no more waiters on the mutexes.
1047 * We know that no new waiters can be added because
sk_send_head
1048 * is set to NULL -- we only need to wait for the
existing
1049 * waiters to return.
1050 */
1051 while (!mutex_trylock(&map->active.in_mutex) ||
1052 !mutex_trylock(&map->active.out_mutex))
1053 cpu_relax();
mutex_trylock() returns 1 if you take the lock and 0 if not. So I think
the static checker is right that this code has an issue.
Assume you take in_mutex on the first try, but you can't take out_mutex.
That means you the next times you call mutex_trylock() in_mutex is going
to fail. So it's an endless loop.
But it could also be that I haven't slept well recently and my eyes are
cross eyed.
1054
1055 pvcalls_front_free_map(bedata, map);
1056 } else {
regards,
dan carpenter
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |