@@ -363,50 +363,6 @@ static void xenbus_switch_fatal(struct xenbus_device *dev, int depth, int err,
363
363
__xenbus_switch_state (dev , XenbusStateClosing , 1 );
364
364
}
365
365
366
- /**
367
- * xenbus_grant_ring
368
- * @dev: xenbus device
369
- * @vaddr: starting virtual address of the ring
370
- * @nr_pages: number of pages to be granted
371
- * @grefs: grant reference array to be filled in
372
- *
373
- * Grant access to the given @vaddr to the peer of the given device.
374
- * Then fill in @grefs with grant references. Return 0 on success, or
375
- * -errno on error. On error, the device will switch to
376
- * XenbusStateClosing, and the error will be saved in the store.
377
- */
378
- int xenbus_grant_ring (struct xenbus_device * dev , void * vaddr ,
379
- unsigned int nr_pages , grant_ref_t * grefs )
380
- {
381
- int err ;
382
- unsigned int i ;
383
- grant_ref_t gref_head ;
384
-
385
- err = gnttab_alloc_grant_references (nr_pages , & gref_head );
386
- if (err ) {
387
- xenbus_dev_fatal (dev , err , "granting access to ring page" );
388
- return err ;
389
- }
390
-
391
- for (i = 0 ; i < nr_pages ; i ++ ) {
392
- unsigned long gfn ;
393
-
394
- if (is_vmalloc_addr (vaddr ))
395
- gfn = pfn_to_gfn (vmalloc_to_pfn (vaddr ));
396
- else
397
- gfn = virt_to_gfn (vaddr );
398
-
399
- grefs [i ] = gnttab_claim_grant_reference (& gref_head );
400
- gnttab_grant_foreign_access_ref (grefs [i ], dev -> otherend_id ,
401
- gfn , 0 );
402
-
403
- vaddr = vaddr + XEN_PAGE_SIZE ;
404
- }
405
-
406
- return 0 ;
407
- }
408
- EXPORT_SYMBOL_GPL (xenbus_grant_ring );
409
-
410
366
/*
411
367
* xenbus_setup_ring
412
368
* @dev: xenbus device
@@ -424,6 +380,7 @@ int xenbus_setup_ring(struct xenbus_device *dev, gfp_t gfp, void **vaddr,
424
380
unsigned int nr_pages , grant_ref_t * grefs )
425
381
{
426
382
unsigned long ring_size = nr_pages * XEN_PAGE_SIZE ;
383
+ grant_ref_t gref_head ;
427
384
unsigned int i ;
428
385
int ret ;
429
386
@@ -433,9 +390,25 @@ int xenbus_setup_ring(struct xenbus_device *dev, gfp_t gfp, void **vaddr,
433
390
goto err ;
434
391
}
435
392
436
- ret = xenbus_grant_ring (dev , * vaddr , nr_pages , grefs );
437
- if (ret )
393
+ ret = gnttab_alloc_grant_references (nr_pages , & gref_head );
394
+ if (ret ) {
395
+ xenbus_dev_fatal (dev , ret , "granting access to %u ring pages" ,
396
+ nr_pages );
438
397
goto err ;
398
+ }
399
+
400
+ for (i = 0 ; i < nr_pages ; i ++ ) {
401
+ unsigned long gfn ;
402
+
403
+ if (is_vmalloc_addr (* vaddr ))
404
+ gfn = pfn_to_gfn (vmalloc_to_pfn (vaddr [i ]));
405
+ else
406
+ gfn = virt_to_gfn (vaddr [i ]);
407
+
408
+ grefs [i ] = gnttab_claim_grant_reference (& gref_head );
409
+ gnttab_grant_foreign_access_ref (grefs [i ], dev -> otherend_id ,
410
+ gfn , 0 );
411
+ }
439
412
440
413
return 0 ;
441
414
0 commit comments