Skip to content

Commit 2b3daf0

Browse files
committed
xen/usbfront: use xenbus_setup_ring() and xenbus_teardown_ring()
Simplify xen-hcd's ring creation and removal via xenbus_setup_ring() and xenbus_teardown_ring(). Signed-off-by: Juergen Gross <[email protected]> Acked-by: Greg Kroah-Hartman <[email protected]> Signed-off-by: Juergen Gross <[email protected]>
1 parent caa427d commit 2b3daf0

File tree

1 file changed

+15
-46
lines changed

1 file changed

+15
-46
lines changed

drivers/usb/host/xen-hcd.c

Lines changed: 15 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,66 +1098,35 @@ static void xenhcd_destroy_rings(struct xenhcd_info *info)
10981098
unbind_from_irqhandler(info->irq, info);
10991099
info->irq = 0;
11001100

1101-
if (info->urb_ring_ref != INVALID_GRANT_REF) {
1102-
gnttab_end_foreign_access(info->urb_ring_ref,
1103-
(unsigned long)info->urb_ring.sring);
1104-
info->urb_ring_ref = INVALID_GRANT_REF;
1105-
}
1106-
info->urb_ring.sring = NULL;
1107-
1108-
if (info->conn_ring_ref != INVALID_GRANT_REF) {
1109-
gnttab_end_foreign_access(info->conn_ring_ref,
1110-
(unsigned long)info->conn_ring.sring);
1111-
info->conn_ring_ref = INVALID_GRANT_REF;
1112-
}
1113-
info->conn_ring.sring = NULL;
1101+
xenbus_teardown_ring((void **)&info->urb_ring.sring, 1,
1102+
&info->urb_ring_ref);
1103+
xenbus_teardown_ring((void **)&info->conn_ring.sring, 1,
1104+
&info->conn_ring_ref);
11141105
}
11151106

11161107
static int xenhcd_setup_rings(struct xenbus_device *dev,
11171108
struct xenhcd_info *info)
11181109
{
11191110
struct xenusb_urb_sring *urb_sring;
11201111
struct xenusb_conn_sring *conn_sring;
1121-
grant_ref_t gref;
11221112
int err;
11231113

1124-
info->urb_ring_ref = INVALID_GRANT_REF;
11251114
info->conn_ring_ref = INVALID_GRANT_REF;
1126-
1127-
urb_sring = (struct xenusb_urb_sring *)get_zeroed_page(
1128-
GFP_NOIO | __GFP_HIGH);
1129-
if (!urb_sring) {
1130-
xenbus_dev_fatal(dev, -ENOMEM, "allocating urb ring");
1131-
return -ENOMEM;
1132-
}
1133-
SHARED_RING_INIT(urb_sring);
1134-
FRONT_RING_INIT(&info->urb_ring, urb_sring, PAGE_SIZE);
1135-
1136-
err = xenbus_grant_ring(dev, urb_sring, 1, &gref);
1137-
if (err < 0) {
1138-
free_page((unsigned long)urb_sring);
1139-
info->urb_ring.sring = NULL;
1140-
goto fail;
1141-
}
1142-
info->urb_ring_ref = gref;
1143-
1144-
conn_sring = (struct xenusb_conn_sring *)get_zeroed_page(
1145-
GFP_NOIO | __GFP_HIGH);
1146-
if (!conn_sring) {
1147-
xenbus_dev_fatal(dev, -ENOMEM, "allocating conn ring");
1148-
err = -ENOMEM;
1149-
goto fail;
1115+
err = xenbus_setup_ring(dev, GFP_NOIO | __GFP_HIGH,
1116+
(void **)&urb_sring, 1, &info->urb_ring_ref);
1117+
if (err) {
1118+
xenbus_dev_fatal(dev, err, "allocating urb ring");
1119+
return err;
11501120
}
1151-
SHARED_RING_INIT(conn_sring);
1152-
FRONT_RING_INIT(&info->conn_ring, conn_sring, PAGE_SIZE);
1121+
XEN_FRONT_RING_INIT(&info->urb_ring, urb_sring, PAGE_SIZE);
11531122

1154-
err = xenbus_grant_ring(dev, conn_sring, 1, &gref);
1155-
if (err < 0) {
1156-
free_page((unsigned long)conn_sring);
1157-
info->conn_ring.sring = NULL;
1123+
err = xenbus_setup_ring(dev, GFP_NOIO | __GFP_HIGH,
1124+
(void **)&conn_sring, 1, &info->conn_ring_ref);
1125+
if (err) {
1126+
xenbus_dev_fatal(dev, err, "allocating conn ring");
11581127
goto fail;
11591128
}
1160-
info->conn_ring_ref = gref;
1129+
XEN_FRONT_RING_INIT(&info->conn_ring, conn_sring, PAGE_SIZE);
11611130

11621131
err = xenbus_alloc_evtchn(dev, &info->evtchn);
11631132
if (err) {

0 commit comments

Comments
 (0)