@@ -1098,66 +1098,35 @@ static void xenhcd_destroy_rings(struct xenhcd_info *info)
1098
1098
unbind_from_irqhandler (info -> irq , info );
1099
1099
info -> irq = 0 ;
1100
1100
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 );
1114
1105
}
1115
1106
1116
1107
static int xenhcd_setup_rings (struct xenbus_device * dev ,
1117
1108
struct xenhcd_info * info )
1118
1109
{
1119
1110
struct xenusb_urb_sring * urb_sring ;
1120
1111
struct xenusb_conn_sring * conn_sring ;
1121
- grant_ref_t gref ;
1122
1112
int err ;
1123
1113
1124
- info -> urb_ring_ref = INVALID_GRANT_REF ;
1125
1114
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 ;
1150
1120
}
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 );
1153
1122
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" ) ;
1158
1127
goto fail ;
1159
1128
}
1160
- info -> conn_ring_ref = gref ;
1129
+ XEN_FRONT_RING_INIT ( & info -> conn_ring , conn_sring , PAGE_SIZE ) ;
1161
1130
1162
1131
err = xenbus_alloc_evtchn (dev , & info -> evtchn );
1163
1132
if (err ) {
0 commit comments