xen/tpmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
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>
This commit is contained in:
Родитель
46e20d43f5
Коммит
5e0afd8eab
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче