Message ID | 20211202164110.326947-5-mjrosato@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x/pci: some small fixes | expand |
On Thu, 2021-12-02 at 11:41 -0500, Matthew Rosato wrote: > The DTSM is a mask that specifies which I/O Address Translation > designation > types are supported. A linux guest today does not look at this field > but > could in the future; let's advertise what QEMU actually supports. > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Also good. Reviewed-by: Eric Farman <farman@linux.ibm.com> > --- > hw/s390x/s390-pci-bus.c | 1 + > hw/s390x/s390-pci-vfio.c | 1 + > include/hw/s390x/s390-pci-bus.h | 1 + > include/hw/s390x/s390-pci-clp.h | 3 ++- > 4 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c > index 1b51a72838..01b58ebc70 100644 > --- a/hw/s390x/s390-pci-bus.c > +++ b/hw/s390x/s390-pci-bus.c > @@ -782,6 +782,7 @@ static void s390_pci_init_default_group(void) > resgrp->i = 128; > resgrp->maxstbl = 128; > resgrp->version = 0; > + resgrp->dtsm = ZPCI_DTSM; > } > > static void set_pbdev_info(S390PCIBusDevice *pbdev) > diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c > index 2a153fa8c9..6f80a47e29 100644 > --- a/hw/s390x/s390-pci-vfio.c > +++ b/hw/s390x/s390-pci-vfio.c > @@ -160,6 +160,7 @@ static void s390_pci_read_group(S390PCIBusDevice > *pbdev, > resgrp->i = cap->noi; > resgrp->maxstbl = cap->maxstbl; > resgrp->version = cap->version; > + resgrp->dtsm = ZPCI_DTSM; > } > } > > diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390- > pci-bus.h > index 2727e7bdef..da3cde2bb4 100644 > --- a/include/hw/s390x/s390-pci-bus.h > +++ b/include/hw/s390x/s390-pci-bus.h > @@ -37,6 +37,7 @@ > #define ZPCI_MAX_UID 0xffff > #define UID_UNDEFINED 0 > #define UID_CHECKING_ENABLED 0x01 > +#define ZPCI_DTSM 0x40 > > OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE) > OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS) > diff --git a/include/hw/s390x/s390-pci-clp.h b/include/hw/s390x/s390- > pci-clp.h > index 96b8e3f133..cc8c8662b8 100644 > --- a/include/hw/s390x/s390-pci-clp.h > +++ b/include/hw/s390x/s390-pci-clp.h > @@ -163,7 +163,8 @@ typedef struct ClpRspQueryPciGrp { > uint8_t fr; > uint16_t maxstbl; > uint16_t mui; > - uint64_t reserved3; > + uint8_t dtsm; > + uint8_t reserved3[7]; > uint64_t dasm; /* dma address space mask */ > uint64_t msia; /* MSI address */ > uint64_t reserved4;
On 12/2/21 17:41, Matthew Rosato wrote: > The DTSM is a mask that specifies which I/O Address Translation designation > types are supported. A linux guest today does not look at this field but Even Linux is the most used guest it is not the only one so may be not mention Linux here. > could in the future; let's advertise what QEMU actually supports. > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> > --- > hw/s390x/s390-pci-bus.c | 1 + > hw/s390x/s390-pci-vfio.c | 1 + > include/hw/s390x/s390-pci-bus.h | 1 + > include/hw/s390x/s390-pci-clp.h | 3 ++- > 4 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c > index 1b51a72838..01b58ebc70 100644 > --- a/hw/s390x/s390-pci-bus.c > +++ b/hw/s390x/s390-pci-bus.c > @@ -782,6 +782,7 @@ static void s390_pci_init_default_group(void) > resgrp->i = 128; > resgrp->maxstbl = 128; > resgrp->version = 0; > + resgrp->dtsm = ZPCI_DTSM; OK > } > > static void set_pbdev_info(S390PCIBusDevice *pbdev) > diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c > index 2a153fa8c9..6f80a47e29 100644 > --- a/hw/s390x/s390-pci-vfio.c > +++ b/hw/s390x/s390-pci-vfio.c > @@ -160,6 +160,7 @@ static void s390_pci_read_group(S390PCIBusDevice *pbdev, > resgrp->i = cap->noi; > resgrp->maxstbl = cap->maxstbl; > resgrp->version = cap->version; > + resgrp->dtsm = ZPCI_DTSM; Is it safe for VFIO whith interpretation? Shouldn't we extend the capability and use the host DTSM in this case? ...snip...
On 12/3/21 4:33 AM, Pierre Morel wrote: > > > On 12/2/21 17:41, Matthew Rosato wrote: >> The DTSM is a mask that specifies which I/O Address Translation >> designation >> types are supported. A linux guest today does not look at this field but > > Even Linux is the most used guest it is not the only one so may be not > mention Linux here. > OK >> could in the future; let's advertise what QEMU actually supports. >> >> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> >> --- >> hw/s390x/s390-pci-bus.c | 1 + >> hw/s390x/s390-pci-vfio.c | 1 + >> include/hw/s390x/s390-pci-bus.h | 1 + >> include/hw/s390x/s390-pci-clp.h | 3 ++- >> 4 files changed, 5 insertions(+), 1 deletion(-) >> >> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c >> index 1b51a72838..01b58ebc70 100644 >> --- a/hw/s390x/s390-pci-bus.c >> +++ b/hw/s390x/s390-pci-bus.c >> @@ -782,6 +782,7 @@ static void s390_pci_init_default_group(void) >> resgrp->i = 128; >> resgrp->maxstbl = 128; >> resgrp->version = 0; >> + resgrp->dtsm = ZPCI_DTSM; > > OK > >> } >> static void set_pbdev_info(S390PCIBusDevice *pbdev) >> diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c >> index 2a153fa8c9..6f80a47e29 100644 >> --- a/hw/s390x/s390-pci-vfio.c >> +++ b/hw/s390x/s390-pci-vfio.c >> @@ -160,6 +160,7 @@ static void s390_pci_read_group(S390PCIBusDevice >> *pbdev, >> resgrp->i = cap->noi; >> resgrp->maxstbl = cap->maxstbl; >> resgrp->version = cap->version; >> + resgrp->dtsm = ZPCI_DTSM; > > Is it safe for VFIO whith interpretation? > Shouldn't we extend the capability and use the host DTSM in this case? We will do exactly this when there is an interpretation series. For the current intercept-based code, QEMU only supports DT 1 for passthrough regardless of what the host is supporting and rejects all else (see check in reg_ioat)
On 12/2/21 11:41 AM, Matthew Rosato wrote: > The DTSM is a mask that specifies which I/O Address Translation designation > types are supported. A linux guest today does not look at this field but > could in the future; let's advertise what QEMU actually supports. Will send a v2, this patch is missing a line in clp_service_call to copy the byte into the guest payload (forgot it's not a memcpy anymore) > > Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> > --- > hw/s390x/s390-pci-bus.c | 1 + > hw/s390x/s390-pci-vfio.c | 1 + > include/hw/s390x/s390-pci-bus.h | 1 + > include/hw/s390x/s390-pci-clp.h | 3 ++- > 4 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c > index 1b51a72838..01b58ebc70 100644 > --- a/hw/s390x/s390-pci-bus.c > +++ b/hw/s390x/s390-pci-bus.c > @@ -782,6 +782,7 @@ static void s390_pci_init_default_group(void) > resgrp->i = 128; > resgrp->maxstbl = 128; > resgrp->version = 0; > + resgrp->dtsm = ZPCI_DTSM; > } > > static void set_pbdev_info(S390PCIBusDevice *pbdev) > diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c > index 2a153fa8c9..6f80a47e29 100644 > --- a/hw/s390x/s390-pci-vfio.c > +++ b/hw/s390x/s390-pci-vfio.c > @@ -160,6 +160,7 @@ static void s390_pci_read_group(S390PCIBusDevice *pbdev, > resgrp->i = cap->noi; > resgrp->maxstbl = cap->maxstbl; > resgrp->version = cap->version; > + resgrp->dtsm = ZPCI_DTSM; > } > } > > diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390-pci-bus.h > index 2727e7bdef..da3cde2bb4 100644 > --- a/include/hw/s390x/s390-pci-bus.h > +++ b/include/hw/s390x/s390-pci-bus.h > @@ -37,6 +37,7 @@ > #define ZPCI_MAX_UID 0xffff > #define UID_UNDEFINED 0 > #define UID_CHECKING_ENABLED 0x01 > +#define ZPCI_DTSM 0x40 > > OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE) > OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS) > diff --git a/include/hw/s390x/s390-pci-clp.h b/include/hw/s390x/s390-pci-clp.h > index 96b8e3f133..cc8c8662b8 100644 > --- a/include/hw/s390x/s390-pci-clp.h > +++ b/include/hw/s390x/s390-pci-clp.h > @@ -163,7 +163,8 @@ typedef struct ClpRspQueryPciGrp { > uint8_t fr; > uint16_t maxstbl; > uint16_t mui; > - uint64_t reserved3; > + uint8_t dtsm; > + uint8_t reserved3[7]; > uint64_t dasm; /* dma address space mask */ > uint64_t msia; /* MSI address */ > uint64_t reserved4; >
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 1b51a72838..01b58ebc70 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -782,6 +782,7 @@ static void s390_pci_init_default_group(void) resgrp->i = 128; resgrp->maxstbl = 128; resgrp->version = 0; + resgrp->dtsm = ZPCI_DTSM; } static void set_pbdev_info(S390PCIBusDevice *pbdev) diff --git a/hw/s390x/s390-pci-vfio.c b/hw/s390x/s390-pci-vfio.c index 2a153fa8c9..6f80a47e29 100644 --- a/hw/s390x/s390-pci-vfio.c +++ b/hw/s390x/s390-pci-vfio.c @@ -160,6 +160,7 @@ static void s390_pci_read_group(S390PCIBusDevice *pbdev, resgrp->i = cap->noi; resgrp->maxstbl = cap->maxstbl; resgrp->version = cap->version; + resgrp->dtsm = ZPCI_DTSM; } } diff --git a/include/hw/s390x/s390-pci-bus.h b/include/hw/s390x/s390-pci-bus.h index 2727e7bdef..da3cde2bb4 100644 --- a/include/hw/s390x/s390-pci-bus.h +++ b/include/hw/s390x/s390-pci-bus.h @@ -37,6 +37,7 @@ #define ZPCI_MAX_UID 0xffff #define UID_UNDEFINED 0 #define UID_CHECKING_ENABLED 0x01 +#define ZPCI_DTSM 0x40 OBJECT_DECLARE_SIMPLE_TYPE(S390pciState, S390_PCI_HOST_BRIDGE) OBJECT_DECLARE_SIMPLE_TYPE(S390PCIBus, S390_PCI_BUS) diff --git a/include/hw/s390x/s390-pci-clp.h b/include/hw/s390x/s390-pci-clp.h index 96b8e3f133..cc8c8662b8 100644 --- a/include/hw/s390x/s390-pci-clp.h +++ b/include/hw/s390x/s390-pci-clp.h @@ -163,7 +163,8 @@ typedef struct ClpRspQueryPciGrp { uint8_t fr; uint16_t maxstbl; uint16_t mui; - uint64_t reserved3; + uint8_t dtsm; + uint8_t reserved3[7]; uint64_t dasm; /* dma address space mask */ uint64_t msia; /* MSI address */ uint64_t reserved4;
The DTSM is a mask that specifies which I/O Address Translation designation types are supported. A linux guest today does not look at this field but could in the future; let's advertise what QEMU actually supports. Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> --- hw/s390x/s390-pci-bus.c | 1 + hw/s390x/s390-pci-vfio.c | 1 + include/hw/s390x/s390-pci-bus.h | 1 + include/hw/s390x/s390-pci-clp.h | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-)