@@ -1280,15 +1280,8 @@ static void blkif_free_ring(struct blkfront_ring_info *rinfo)
1280
1280
flush_work (& rinfo -> work );
1281
1281
1282
1282
/* Free resources associated with old device channel. */
1283
- for (i = 0 ; i < info -> nr_ring_pages ; i ++ ) {
1284
- if (rinfo -> ring_ref [i ] != INVALID_GRANT_REF ) {
1285
- gnttab_end_foreign_access (rinfo -> ring_ref [i ], 0 );
1286
- rinfo -> ring_ref [i ] = INVALID_GRANT_REF ;
1287
- }
1288
- }
1289
- free_pages_exact (rinfo -> ring .sring ,
1290
- info -> nr_ring_pages * XEN_PAGE_SIZE );
1291
- rinfo -> ring .sring = NULL ;
1283
+ xenbus_teardown_ring ((void * * )& rinfo -> ring .sring , info -> nr_ring_pages ,
1284
+ rinfo -> ring_ref );
1292
1285
1293
1286
if (rinfo -> irq )
1294
1287
unbind_from_irqhandler (rinfo -> irq , rinfo );
@@ -1679,30 +1672,16 @@ static int setup_blkring(struct xenbus_device *dev,
1679
1672
struct blkfront_ring_info * rinfo )
1680
1673
{
1681
1674
struct blkif_sring * sring ;
1682
- int err , i ;
1675
+ int err ;
1683
1676
struct blkfront_info * info = rinfo -> dev_info ;
1684
1677
unsigned long ring_size = info -> nr_ring_pages * XEN_PAGE_SIZE ;
1685
- grant_ref_t gref [XENBUS_MAX_RING_GRANTS ];
1686
-
1687
- for (i = 0 ; i < info -> nr_ring_pages ; i ++ )
1688
- rinfo -> ring_ref [i ] = INVALID_GRANT_REF ;
1689
1678
1690
- sring = alloc_pages_exact (ring_size , GFP_NOIO );
1691
- if (!sring ) {
1692
- xenbus_dev_fatal (dev , - ENOMEM , "allocating shared ring" );
1693
- return - ENOMEM ;
1694
- }
1695
- SHARED_RING_INIT (sring );
1696
- FRONT_RING_INIT (& rinfo -> ring , sring , ring_size );
1697
-
1698
- err = xenbus_grant_ring (dev , rinfo -> ring .sring , info -> nr_ring_pages , gref );
1699
- if (err < 0 ) {
1700
- free_pages_exact (sring , ring_size );
1701
- rinfo -> ring .sring = NULL ;
1679
+ err = xenbus_setup_ring (dev , GFP_NOIO , (void * * )& sring ,
1680
+ info -> nr_ring_pages , rinfo -> ring_ref );
1681
+ if (err )
1702
1682
goto fail ;
1703
- }
1704
- for (i = 0 ; i < info -> nr_ring_pages ; i ++ )
1705
- rinfo -> ring_ref [i ] = gref [i ];
1683
+
1684
+ XEN_FRONT_RING_INIT (& rinfo -> ring , sring , ring_size );
1706
1685
1707
1686
err = xenbus_alloc_evtchn (dev , & rinfo -> evtchn );
1708
1687
if (err )
0 commit comments