Re: [PATCH] vhost_vdpa: fix unmap process in no-batch mode

From: Cindy Lu
Date: Tue Apr 11 2023 - 03:30:21 EST


On Tue, Apr 11, 2023 at 11:10 AM Jason Wang <jasowang@xxxxxxxxxx> wrote:
>
> On Mon, Apr 10, 2023 at 11:01 PM Cindy Lu <lulu@xxxxxxxxxx> wrote:
> >
> > While using the no-batch mode, the process will not begin with
> > VHOST_IOTLB_BATCH_BEGIN, so we need to add the
> > VHOST_IOTLB_INVALIDATE to get vhost_vdpa_as, the process is the
> > same as VHOST_IOTLB_UPDATE
> >
> > Signed-off-by: Cindy Lu <lulu@xxxxxxxxxx>
> > ---
> > drivers/vhost/vdpa.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
> > index 7be9d9d8f01c..32636a02a0ab 100644
> > --- a/drivers/vhost/vdpa.c
> > +++ b/drivers/vhost/vdpa.c
> > @@ -1074,6 +1074,7 @@ static int vhost_vdpa_process_iotlb_msg(struct vhost_dev *dev, u32 asid,
> > goto unlock;
> >
> > if (msg->type == VHOST_IOTLB_UPDATE ||
> > + msg->type == VHOST_IOTLB_INVALIDATE ||
>
> I'm not sure I get here, invalidation doesn't need to create a new AS.
>
> Or maybe you can post the userspace code that can trigger this issue?
>
> Thanks
>
sorry I didn't write it clearly
For this issue can reproduce in vIOMMU no-batch mode support because
while the vIOMMU enabled, it will
flash a large memory to unmap, and this memory are haven't been mapped
before, so this unmapping will fail

qemu-system-x86_64: failed to write, fd=12, errno=14 (Bad address)
qemu-system-x86_64: vhost_vdpa_dma_unmap(0x7fa26d1dd190, 0x0,
0x80000000) = -5 (Bad address)
qemu-system-x86_64: failed to write, fd=12, errno=14 (Bad address)
....
in batch mode this operation will begin with VHOST_IOTLB_BATCH_BEGIN,
so don't have this issue

Thanks
cindy
> > msg->type == VHOST_IOTLB_BATCH_BEGIN) {
> > as = vhost_vdpa_find_alloc_as(v, asid);
> > if (!as) {
> > --
> > 2.34.3
> >
>