* [PATCH v3 17/21] xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring()
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
@ 2022-05-05 8:16 ` Juergen Gross
2022-05-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
2 siblings, 0 replies; 4+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, linux-pci, linux-kernel
Cc: Juergen Gross, Boris Ostrovsky, Stefano Stabellini, Bjorn Helgaas
Simplify pcifront's shared page creation and removal via
xenbus_setup_ring() and xenbus_teardown_ring().
Signed-off-by: Juergen Gross <jgross@suse.com>
---
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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v3 00/21] xen: simplify frontend side ring setup
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
2022-05-05 8:16 ` [PATCH v3 17/21] xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
@ 2022-05-06 0:12 ` Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
2 siblings, 0 replies; 4+ messages in thread
From: Boris Ostrovsky @ 2022-05-06 0:12 UTC (permalink / raw)
To: Juergen Gross, xen-devel, linux-kernel, linux-block, netdev,
linux-scsi, linux-usb, dri-devel, linux-integrity, linux-pci
Cc: Stefano Stabellini, Roger Pau Monné,
Jens Axboe, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, James E.J. Bottomley, Martin K. Petersen,
Greg Kroah-Hartman, Oleksandr Andrushchenko, David Airlie,
Daniel Vetter, Jaroslav Kysela, Takashi Iwai, alsa-devel,
Peter Huewe, Jarkko Sakkinen, Jason Gunthorpe, Bjorn Helgaas
On 5/5/22 4:16 AM, Juergen Gross wrote:
> Many Xen PV frontends share similar code for setting up a ring page
> (allocating and granting access for the backend) and for tearing it
> down.
>
> Create new service functions doing all needed steps in one go.
>
> This requires all frontends to use a common value for an invalid
> grant reference in order to make the functions idempotent.
>
> Changes in V3:
> - new patches 1 and 2, comments addressed
>
> Changes in V2:
> - new patch 9 and related changes in patches 10-18
For the patches that I was explicitly copied on:
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 00/21] xen: simplify frontend side ring setup
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
2022-05-05 8:16 ` [PATCH v3 17/21] xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
2022-05-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
@ 2022-05-09 13:23 ` Oleksandr
2 siblings, 0 replies; 4+ messages in thread
From: Oleksandr @ 2022-05-09 13:23 UTC (permalink / raw)
To: Juergen Gross, xen-devel, linux-kernel, linux-block, netdev,
linux-scsi, linux-usb, dri-devel, linux-integrity, linux-pci
Cc: Boris Ostrovsky, Stefano Stabellini, Roger Pau Monné,
Jens Axboe, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, James E.J. Bottomley, Martin K. Petersen,
Greg Kroah-Hartman, Oleksandr Andrushchenko, David Airlie,
Daniel Vetter, Jaroslav Kysela, Takashi Iwai, alsa-devel,
Peter Huewe, Jarkko Sakkinen, Jason Gunthorpe, Bjorn Helgaas
On 05.05.22 11:16, Juergen Gross wrote:
Hello Juergen.
> Many Xen PV frontends share similar code for setting up a ring page
> (allocating and granting access for the backend) and for tearing it
> down.
>
> Create new service functions doing all needed steps in one go.
>
> This requires all frontends to use a common value for an invalid
> grant reference in order to make the functions idempotent.
>
> Changes in V3:
> - new patches 1 and 2, comments addressed
>
> Changes in V2:
> - new patch 9 and related changes in patches 10-18
>
> Juergen Gross (21):
> xen: update grant_table.h
> xen/grant-table: never put a reserved grant on the free list
> xen/blkfront: switch blkfront to use INVALID_GRANT_REF
> xen/netfront: switch netfront to use INVALID_GRANT_REF
> xen/scsifront: remove unused GRANT_INVALID_REF definition
> xen/usb: switch xen-hcd to use INVALID_GRANT_REF
> xen/drm: switch xen_drm_front to use INVALID_GRANT_REF
> xen/sound: switch xen_snd_front to use INVALID_GRANT_REF
> xen/dmabuf: switch gntdev-dmabuf to use INVALID_GRANT_REF
> xen/shbuf: switch xen-front-pgdir-shbuf to use INVALID_GRANT_REF
> xen: update ring.h
> xen/xenbus: add xenbus_setup_ring() service function
> xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/netfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/tpmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/drmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/scsifront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/usbfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/sndfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/xenbus: eliminate xenbus_grant_ring()
For the patches that touch PV display (#07, #16), PV sound (#08, #20)
and shared buffer framework used by both frontends (#10):
Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Also I didn't see any issues with these frontends while testing on Arm64
based board.
So, you can also add:
[Arm64 only]
Tested-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Thanks!
>
> drivers/block/xen-blkfront.c | 57 +++----
> drivers/char/tpm/xen-tpmfront.c | 18 +--
> drivers/gpu/drm/xen/xen_drm_front.h | 9 --
> drivers/gpu/drm/xen/xen_drm_front_evtchnl.c | 43 ++----
> drivers/net/xen-netfront.c | 85 ++++-------
> drivers/pci/xen-pcifront.c | 19 +--
> drivers/scsi/xen-scsifront.c | 31 +---
> drivers/usb/host/xen-hcd.c | 65 ++------
> drivers/xen/gntdev-dmabuf.c | 13 +-
> drivers/xen/grant-table.c | 12 +-
> drivers/xen/xen-front-pgdir-shbuf.c | 18 +--
> drivers/xen/xenbus/xenbus_client.c | 82 +++++++---
> include/xen/grant_table.h | 2 -
> include/xen/interface/grant_table.h | 161 ++++++++++++--------
> include/xen/interface/io/ring.h | 19 ++-
> include/xen/xenbus.h | 4 +-
> sound/xen/xen_snd_front_evtchnl.c | 44 ++----
> sound/xen/xen_snd_front_evtchnl.h | 9 --
> 18 files changed, 287 insertions(+), 404 deletions(-)
>
--
Regards,
Oleksandr Tyshchenko
^ permalink raw reply [flat|nested] 4+ messages in thread