@@ -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
11161107static 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