xen/tpmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
authorJuergen Gross <jgross@suse.com>
Thu, 28 Apr 2022 07:01:04 +0000 (09:01 +0200)
committerJuergen Gross <jgross@suse.com>
Thu, 19 May 2022 12:21:59 +0000 (14:21 +0200)
Simplify tpmfront's ring creation and removal via xenbus_setup_ring()
and xenbus_teardown_ring(), which are provided exactly for the use
pattern as seen in this driver.

Signed-off-by: Juergen Gross <jgross@suse.com>
drivers/char/tpm/xen-tpmfront.c

index 69df04a..3792918 100644 (file)
@@ -253,20 +253,12 @@ static int setup_ring(struct xenbus_device *dev, struct tpm_private *priv)
        struct xenbus_transaction xbt;
        const char *message = NULL;
        int rv;
-       grant_ref_t gref;
 
-       priv->shr = (void *)__get_free_page(GFP_KERNEL|__GFP_ZERO);
-       if (!priv->shr) {
-               xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
-               return -ENOMEM;
-       }
-
-       rv = xenbus_grant_ring(dev, priv->shr, 1, &gref);
+       rv = xenbus_setup_ring(dev, GFP_KERNEL, (void **)&priv->shr, 1,
+                              &priv->ring_ref);
        if (rv < 0)
                return rv;
 
-       priv->ring_ref = gref;
-
        rv = xenbus_alloc_evtchn(dev, &priv->evtchn);
        if (rv)
                return rv;
@@ -331,11 +323,7 @@ static void ring_free(struct tpm_private *priv)
        if (!priv)
                return;
 
-       if (priv->ring_ref)
-               gnttab_end_foreign_access(priv->ring_ref,
-                               (unsigned long)priv->shr);
-       else
-               free_page((unsigned long)priv->shr);
+       xenbus_teardown_ring((void **)&priv->shr, 1, &priv->ring_ref);
 
        if (priv->irq)
                unbind_from_irqhandler(priv->irq, priv);