From: Cornelia Huck <cohuck@redhat.com>
To: qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, agraf@suse.de, thuth@redhat.com,
david@redhat.com, pmorel@linux.vnet.ibm.com,
zyimin@linux.vnet.ibm.com, pasic@linux.vnet.ibm.com,
Cornelia Huck <cohuck@redhat.com>
Subject: [Qemu-devel] [PATCH v5 7/9] s390x/sclp: properly guard pci-specific functions
Date: Wed, 23 Aug 2017 17:54:56 +0200 [thread overview]
Message-ID: <20170823155458.19601-8-cohuck@redhat.com> (raw)
In-Reply-To: <20170823155458.19601-1-cohuck@redhat.com>
If we do not provide zpci, pci reconfiguration via sclp is not available
either. I/O adapter configuration, however, should always be present.
Rename the values that refer to I/O adapter configuration (instead of only
pci) to make things clearer.
Move length checking of the sccb for I/O adapter configuration into the
common sclp code (out of the pci code). This also fixes an issue that
the pci code would refer to a field in the sccb before checking whether
it was actually long enough.
Check for the adapter type in the sccb and return unrecognized adapter
type if the guest tries to issue I/O adapter configure/deconfigure for
a type other than pci or for pci if the zpci facility is not provided.
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/s390-pci-bus.c | 14 ++------------
hw/s390x/s390-pci-bus.h | 8 --------
hw/s390x/s390-pci-stub.c | 2 ++
hw/s390x/sclp.c | 39 ++++++++++++++++++++++++++++++++++-----
include/hw/s390x/sclp.h | 17 +++++++++++++----
5 files changed, 51 insertions(+), 29 deletions(-)
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index c57f6ebae0..0a31a4ae88 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -122,16 +122,11 @@ S390PCIBusDevice *s390_pci_find_dev_by_fid(S390pciState *s, uint32_t fid)
void s390_pci_sclp_configure(SCCB *sccb)
{
- PciCfgSccb *psccb = (PciCfgSccb *)sccb;
+ IoaCfgSccb *psccb = (IoaCfgSccb *)sccb;
S390PCIBusDevice *pbdev = s390_pci_find_dev_by_fid(s390_get_phb(),
be32_to_cpu(psccb->aid));
uint16_t rc;
- if (be16_to_cpu(sccb->h.length) < 16) {
- rc = SCLP_RC_INSUFFICIENT_SCCB_LENGTH;
- goto out;
- }
-
if (!pbdev) {
DPRINTF("sclp config no dev found\n");
rc = SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED;
@@ -155,16 +150,11 @@ out:
void s390_pci_sclp_deconfigure(SCCB *sccb)
{
- PciCfgSccb *psccb = (PciCfgSccb *)sccb;
+ IoaCfgSccb *psccb = (IoaCfgSccb *)sccb;
S390PCIBusDevice *pbdev = s390_pci_find_dev_by_fid(s390_get_phb(),
be32_to_cpu(psccb->aid));
uint16_t rc;
- if (be16_to_cpu(sccb->h.length) < 16) {
- rc = SCLP_RC_INSUFFICIENT_SCCB_LENGTH;
- goto out;
- }
-
if (!pbdev) {
DPRINTF("sclp deconfig no dev found\n");
rc = SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED;
diff --git a/hw/s390x/s390-pci-bus.h b/hw/s390x/s390-pci-bus.h
index 5df6292509..bd636abc28 100644
--- a/hw/s390x/s390-pci-bus.h
+++ b/hw/s390x/s390-pci-bus.h
@@ -244,14 +244,6 @@ typedef struct ChscSeiNt2Res {
uint8_t ccdf[4016];
} QEMU_PACKED ChscSeiNt2Res;
-typedef struct PciCfgSccb {
- SCCBHeader header;
- uint8_t atype;
- uint8_t reserved1;
- uint16_t reserved2;
- uint32_t aid;
-} QEMU_PACKED PciCfgSccb;
-
typedef struct S390MsixInfo {
bool available;
uint8_t table_bar;
diff --git a/hw/s390x/s390-pci-stub.c b/hw/s390x/s390-pci-stub.c
index cc7278a865..7a642d376c 100644
--- a/hw/s390x/s390-pci-stub.c
+++ b/hw/s390x/s390-pci-stub.c
@@ -20,10 +20,12 @@ int pci_chsc_sei_nt2_have_event(void)
/* hw/s390x/sclp.c */
void s390_pci_sclp_configure(SCCB *sccb)
{
+ sccb->h.response_code = cpu_to_be16(SCLP_RC_ADAPTER_TYPE_NOT_RECOGNIZED);
}
void s390_pci_sclp_deconfigure(SCCB *sccb)
{
+ sccb->h.response_code = cpu_to_be16(SCLP_RC_ADAPTER_TYPE_NOT_RECOGNIZED);
}
/* target/s390x/kvm.c */
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index 9253dbbc64..7ae6a0e37a 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -80,7 +80,7 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
prepare_cpu_entries(sclp, read_info->entries, cpu_count);
read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
- SCLP_HAS_PCI_RECONFIG);
+ SCLP_HAS_IOA_RECONFIG);
/* Memory Hotplug is only supported for the ccw machine type */
if (mhd) {
@@ -354,6 +354,35 @@ static void sclp_read_cpu_info(SCLPDevice *sclp, SCCB *sccb)
sccb->h.response_code = cpu_to_be16(SCLP_RC_NORMAL_READ_COMPLETION);
}
+static void sclp_configure_io_adapter(SCLPDevice *sclp, SCCB *sccb,
+ bool configure)
+{
+ int rc;
+
+ if (be16_to_cpu(sccb->h.length) < 16) {
+ rc = SCLP_RC_INSUFFICIENT_SCCB_LENGTH;
+ goto out_err;
+ }
+
+ switch (((IoaCfgSccb *)sccb)->atype) {
+ case SCLP_RECONFIG_PCI_ATYPE:
+ if (s390_has_feat(S390_FEAT_ZPCI)) {
+ if (configure) {
+ s390_pci_sclp_configure(sccb);
+ } else {
+ s390_pci_sclp_deconfigure(sccb);
+ }
+ return;
+ }
+ /* fallthrough */
+ default:
+ rc = SCLP_RC_ADAPTER_TYPE_NOT_RECOGNIZED;
+ }
+
+ out_err:
+ sccb->h.response_code = cpu_to_be16(rc);
+}
+
static void sclp_execute(SCLPDevice *sclp, SCCB *sccb, uint32_t code)
{
SCLPDeviceClass *sclp_c = SCLP_GET_CLASS(sclp);
@@ -384,11 +413,11 @@ static void sclp_execute(SCLPDevice *sclp, SCCB *sccb, uint32_t code)
case SCLP_UNASSIGN_STORAGE:
sclp_c->unassign_storage(sclp, sccb);
break;
- case SCLP_CMDW_CONFIGURE_PCI:
- s390_pci_sclp_configure(sccb);
+ case SCLP_CMDW_CONFIGURE_IOA:
+ sclp_configure_io_adapter(sclp, sccb, true);
break;
- case SCLP_CMDW_DECONFIGURE_PCI:
- s390_pci_sclp_deconfigure(sccb);
+ case SCLP_CMDW_DECONFIGURE_IOA:
+ sclp_configure_io_adapter(sclp, sccb, false);
break;
default:
efc->command_handler(ef, sccb, code);
diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
index e71d526605..a72d096081 100644
--- a/include/hw/s390x/sclp.h
+++ b/include/hw/s390x/sclp.h
@@ -44,10 +44,10 @@
#define SCLP_CMDW_DECONFIGURE_CPU 0x00100001
/* SCLP PCI codes */
-#define SCLP_HAS_PCI_RECONFIG 0x0000000040000000ULL
-#define SCLP_CMDW_CONFIGURE_PCI 0x001a0001
-#define SCLP_CMDW_DECONFIGURE_PCI 0x001b0001
-#define SCLP_RECONFIG_PCI_ATPYE 2
+#define SCLP_HAS_IOA_RECONFIG 0x0000000040000000ULL
+#define SCLP_CMDW_CONFIGURE_IOA 0x001a0001
+#define SCLP_CMDW_DECONFIGURE_IOA 0x001b0001
+#define SCLP_RECONFIG_PCI_ATYPE 2
/* SCLP response codes */
#define SCLP_RC_NORMAL_READ_COMPLETION 0x0010
@@ -59,6 +59,7 @@
#define SCLP_RC_INSUFFICIENT_SCCB_LENGTH 0x0300
#define SCLP_RC_STANDBY_READ_COMPLETION 0x0410
#define SCLP_RC_ADAPTER_IN_RESERVED_STATE 0x05f0
+#define SCLP_RC_ADAPTER_TYPE_NOT_RECOGNIZED 0x06f0
#define SCLP_RC_ADAPTER_ID_NOT_RECOGNIZED 0x09f0
#define SCLP_RC_INVALID_FUNCTION 0x40f0
#define SCLP_RC_NO_EVENT_BUFFERS_STORED 0x60f0
@@ -167,6 +168,14 @@ typedef struct AssignStorage {
uint16_t rn;
} QEMU_PACKED AssignStorage;
+typedef struct IoaCfgSccb {
+ SCCBHeader header;
+ uint8_t atype;
+ uint8_t reserved1;
+ uint16_t reserved2;
+ uint32_t aid;
+} QEMU_PACKED IoaCfgSccb;
+
typedef struct SCCB {
SCCBHeader h;
char data[SCCB_DATA_LEN];
--
2.13.5
next prev parent reply other threads:[~2017-08-23 15:55 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-23 15:54 [Qemu-devel] [PATCH v5 0/9] zpci detangling Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 1/9] 9pfs: fix dependencies Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 2/9] kvm: remove hard dependency on pci Cornelia Huck
2017-08-24 1:13 ` Thomas Huth
2017-08-24 8:35 ` Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 3/9] s390x/pci: add stubs Cornelia Huck
2017-08-24 7:38 ` Christian Borntraeger
2017-08-24 7:43 ` Christian Borntraeger
2017-08-24 9:09 ` Cornelia Huck
2017-08-24 9:50 ` Halil Pasic
2017-08-24 9:58 ` Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 4/9] s390x: chsc nt2 events are pci-only Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 5/9] s390x/pci: do not advertise pci on non-pci builds Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 6/9] s390x/ccw: create s390 phb conditionally Cornelia Huck
2017-08-23 15:54 ` Cornelia Huck [this message]
2017-08-23 16:25 ` [Qemu-devel] [PATCH v5 7/9] s390x/sclp: properly guard pci-specific functions Pierre Morel
2017-08-24 8:31 ` Cornelia Huck
2017-08-24 9:29 ` Halil Pasic
2017-08-24 9:33 ` Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 8/9] s390x/pci: fence off instructions for non-pci Cornelia Huck
2017-08-23 15:54 ` [Qemu-devel] [PATCH v5 9/9] s390x: refine pci dependencies Cornelia Huck
2017-08-24 7:49 ` [Qemu-devel] [PATCH v5 0/9] zpci detangling Christian Borntraeger
2017-08-24 11:12 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170823155458.19601-8-cohuck@redhat.com \
--to=cohuck@redhat.com \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=david@redhat.com \
--cc=pasic@linux.vnet.ibm.com \
--cc=pmorel@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=zyimin@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.