[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v3 17/21] xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring()



Simplify pcifront's shared page creation and removal via
xenbus_setup_ring() and xenbus_teardown_ring().

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
---
 drivers/pci/xen-pcifront.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
index 3edc1565a27c..689271c4245c 100644
--- a/drivers/pci/xen-pcifront.c
+++ b/drivers/pci/xen-pcifront.c
@@ -709,9 +709,8 @@ static struct pcifront_device *alloc_pdev(struct 
xenbus_device *xdev)
        if (pdev == NULL)
                goto out;
 
-       pdev->sh_info =
-           (struct xen_pci_sharedinfo *)__get_free_page(GFP_KERNEL);
-       if (pdev->sh_info == NULL) {
+       if (xenbus_setup_ring(xdev, GFP_KERNEL, (void **)&pdev->sh_info, 1,
+                             &pdev->gnt_ref)) {
                kfree(pdev);
                pdev = NULL;
                goto out;
@@ -729,7 +728,6 @@ static struct pcifront_device *alloc_pdev(struct 
xenbus_device *xdev)
        spin_lock_init(&pdev->sh_info_lock);
 
        pdev->evtchn = INVALID_EVTCHN;
-       pdev->gnt_ref = INVALID_GRANT_REF;
        pdev->irq = -1;
 
        INIT_WORK(&pdev->op_work, pcifront_do_aer);
@@ -754,11 +752,7 @@ static void free_pdev(struct pcifront_device *pdev)
        if (pdev->evtchn != INVALID_EVTCHN)
                xenbus_free_evtchn(pdev->xdev, pdev->evtchn);
 
-       if (pdev->gnt_ref != INVALID_GRANT_REF)
-               gnttab_end_foreign_access(pdev->gnt_ref,
-                                         (unsigned long)pdev->sh_info);
-       else
-               free_page((unsigned long)pdev->sh_info);
+       xenbus_teardown_ring((void **)&pdev->sh_info, 1, &pdev->gnt_ref);
 
        dev_set_drvdata(&pdev->xdev->dev, NULL);
 
@@ -769,13 +763,6 @@ static int pcifront_publish_info(struct pcifront_device 
*pdev)
 {
        int err = 0;
        struct xenbus_transaction trans;
-       grant_ref_t gref;
-
-       err = xenbus_grant_ring(pdev->xdev, pdev->sh_info, 1, &gref);
-       if (err < 0)
-               goto out;
-
-       pdev->gnt_ref = gref;
 
        err = xenbus_alloc_evtchn(pdev->xdev, &pdev->evtchn);
        if (err)
-- 
2.35.3




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.