evtchn_make_refcounted() may return failure, so need process the failure
case. In failure case, it need call unbind_from_irqhandler() just like
evtchn_unbind_from_user() has done.

irq_from_evtchn() must be OK when bind_evtchn_to_irqhandler() succeed,
so need not check it again.

Also still need remain the closing port code, because when the failure
occurs, unbind_from_irqhandler() will not close port internally.


Signed-off-by: Chen Gang <[email protected]>
---
 drivers/xen/evtchn.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
index 00f40f0..8a629d6 100644
--- a/drivers/xen/evtchn.c
+++ b/drivers/xen/evtchn.c
@@ -311,6 +311,11 @@ static int evtchn_bind_to_user(struct per_user_data *u, 
int port)
                goto err;
 
        rc = evtchn_make_refcounted(port);
+       if (rc < 0) {
+               unbind_from_irqhandler(irq_from_evtchn(port), evtchn);
+               goto err;
+       }
+
        return rc;
 
 err:
-- 
1.7.11.7
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to