All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
@ 2015-03-10  8:37 Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 01/20] synchronize Linux headers to 4.0-rc3 Christian Borntraeger
                   ` (20 more replies)
  0 siblings, 21 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Alexander Graf, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Richard Henderson

Peter,

this pull reuqest contains a header sync to 4.0-rc3. This should cause
no merge conflicts with other header syncs against 4.0-rc2. So here
is the s390 pull request.

The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:

  Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging (2015-03-09 14:04:14 +0000)

are available in the git repository at:

  git://github.com/borntraeger/qemu.git tags/s390x-20150310

for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:

  s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)

----------------------------------------------------------------
s390x/kvm: Features and fixes for 2.3

- an extension to the elf loader to allow relocations
- make the ccw bios relocatable. This allows for bigger ramdisks
  or smaller guests
- Handle all slow SIGPs in QEMU (instead of kernel) for better
  compliance and correctness
- tell the KVM module the maximum guest size. This allows KVM
  to reduce the number or page table levels
- Several fixes/cleanups

----------------------------------------------------------------
Christian Borntraeger (4):
      synchronize Linux headers to 4.0-rc3
      s390-ccw.img: Allow bigger ramdisk sizes or offsets
      s390-ccw.img: Reinitialize guessing on reboot
      s390-ccw: rebuild BIOS

David Hildenbrand (10):
      s390x: introduce defines for SIGP condition codes
      s390x/kvm: more details for SIGP handler with one destination vcpu
      s390x/kvm: pass the SIGP instruction parameter to the SIGP handler
      s390x/kvm: helper to set the SIGP status in SigpInfo
      s390x/kvm: trace all SIGP orders
      s390x/kvm: implement handling of new SIGP orders
      s390x/kvm: SIGP START is only applicable when STOPPED
      s390x: add function to deliver restart irqs
      s390x/kvm: deliver SIGP RESTART directly if stopped
      s390x/kvm: enable the new SIGP handling in user space

Dominik Dingel (1):
      s390x/kvm: passing max memory size to accelerator

Markus Armbruster (3):
      virtio-s390: s390_virtio_device_init() can't fail, simplify
      virtio-s390: Convert to realize()
      virtio-ccw: Convert to realize()

Thomas Huth (2):
      elf-loader: Provide the possibility to relocate s390 ELF files
      s390/bios: Make the s390-ccw.img relocatable

 hw/core/loader.c                            |   2 +
 hw/s390x/ipl.c                              |  23 +-
 hw/s390x/s390-virtio-bus.c                  |  97 ++++---
 hw/s390x/s390-virtio-bus.h                  |   2 +-
 hw/s390x/s390-virtio-ccw.c                  |  10 +
 hw/s390x/virtio-ccw.c                       | 134 +++++----
 hw/s390x/virtio-ccw.h                       |   2 +-
 include/elf.h                               |   2 +
 include/hw/elf_ops.h                        |  78 ++++++
 include/standard-headers/linux/virtio_net.h |  54 ++--
 linux-headers/asm-arm/kvm.h                 |   2 +
 linux-headers/asm-arm64/kvm.h               |   9 +
 linux-headers/asm-s390/kvm.h                |  37 +++
 linux-headers/asm-x86/hyperv.h              |  11 +
 linux-headers/linux/kvm.h                   |  20 +-
 pc-bios/s390-ccw.img                        | Bin 17752 -> 13616 bytes
 pc-bios/s390-ccw/Makefile                   |  11 +-
 pc-bios/s390-ccw/main.c                     |   1 +
 pc-bios/s390-ccw/s390-ccw.h                 |   1 +
 pc-bios/s390-ccw/virtio.c                   |   5 +-
 target-s390x/cpu.c                          |   2 +
 target-s390x/cpu.h                          |  40 ++-
 target-s390x/helper.c                       |  35 ++-
 target-s390x/kvm.c                          | 416 ++++++++++++++++++++++++----
 target-s390x/machine.c                      |   5 +-
 target-s390x/misc_helper.c                  |   4 +-
 trace-events                                |   1 +
 27 files changed, 780 insertions(+), 224 deletions(-)

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 01/20] synchronize Linux headers to 4.0-rc3
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 02/20] s390x: introduce defines for SIGP condition codes Christian Borntraeger
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Alexander Graf, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Richard Henderson

synchronize linux headers up to
commit 9eccca0843205f87c ("Linux 4.0-rc3")

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 include/standard-headers/linux/virtio_net.h | 54 +++++++++++++----------------
 linux-headers/asm-arm/kvm.h                 |  2 ++
 linux-headers/asm-arm64/kvm.h               |  9 +++++
 linux-headers/asm-s390/kvm.h                | 37 ++++++++++++++++++++
 linux-headers/asm-x86/hyperv.h              | 11 ++++++
 linux-headers/linux/kvm.h                   | 20 +++++------
 6 files changed, 93 insertions(+), 40 deletions(-)

diff --git a/include/standard-headers/linux/virtio_net.h b/include/standard-headers/linux/virtio_net.h
index 95faf67..3209c90 100644
--- a/include/standard-headers/linux/virtio_net.h
+++ b/include/standard-headers/linux/virtio_net.h
@@ -74,39 +74,12 @@ struct virtio_net_config {
 	uint16_t max_virtqueue_pairs;
 } QEMU_PACKED;
 
-#ifndef VIRTIO_NET_NO_LEGACY
-/* This header comes first in the scatter-gather list.
- * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
- * be the first element of the scatter-gather list.  If you don't
- * specify GSO or CSUM features, you can simply ignore the header. */
-struct virtio_net_hdr {
-#define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	// Use csum_start, csum_offset
-#define VIRTIO_NET_HDR_F_DATA_VALID	2	// Csum is valid
-	uint8_t flags;
-#define VIRTIO_NET_HDR_GSO_NONE		0	// Not a GSO frame
-#define VIRTIO_NET_HDR_GSO_TCPV4	1	// GSO frame, IPv4 TCP (TSO)
-#define VIRTIO_NET_HDR_GSO_UDP		3	// GSO frame, IPv4 UDP (UFO)
-#define VIRTIO_NET_HDR_GSO_TCPV6	4	// GSO frame, IPv6 TCP
-#define VIRTIO_NET_HDR_GSO_ECN		0x80	// TCP has ECN set
-	uint8_t gso_type;
-	__virtio16 hdr_len;		/* Ethernet + IP + tcp/udp hdrs */
-	__virtio16 gso_size;		/* Bytes to append to hdr_len per frame */
-	__virtio16 csum_start;	/* Position to start checksumming from */
-	__virtio16 csum_offset;	/* Offset after that to place checksum */
-};
-
-/* This is the version of the header to use when the MRG_RXBUF
- * feature has been negotiated. */
-struct virtio_net_hdr_mrg_rxbuf {
-	struct virtio_net_hdr hdr;
-	__virtio16 num_buffers;	/* Number of merged rx buffers */
-};
-#else /* ... VIRTIO_NET_NO_LEGACY */
 /*
  * This header comes first in the scatter-gather list.  If you don't
  * specify GSO or CSUM features, you can simply ignore the header.
  *
- * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf.
+ * This is bitwise-equivalent to the legacy struct virtio_net_hdr_mrg_rxbuf,
+ * only flattened.
  */
 struct virtio_net_hdr_v1 {
 #define VIRTIO_NET_HDR_F_NEEDS_CSUM	1	/* Use csum_start, csum_offset */
@@ -124,6 +97,29 @@ struct virtio_net_hdr_v1 {
 	__virtio16 csum_offset;	/* Offset after that to place checksum */
 	__virtio16 num_buffers;	/* Number of merged rx buffers */
 };
+
+#ifndef VIRTIO_NET_NO_LEGACY
+/* This header comes first in the scatter-gather list.
+ * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, it must
+ * be the first element of the scatter-gather list.  If you don't
+ * specify GSO or CSUM features, you can simply ignore the header. */
+struct virtio_net_hdr {
+	/* See VIRTIO_NET_HDR_F_* */
+	uint8_t flags;
+	/* See VIRTIO_NET_HDR_GSO_* */
+	uint8_t gso_type;
+	__virtio16 hdr_len;		/* Ethernet + IP + tcp/udp hdrs */
+	__virtio16 gso_size;		/* Bytes to append to hdr_len per frame */
+	__virtio16 csum_start;	/* Position to start checksumming from */
+	__virtio16 csum_offset;	/* Offset after that to place checksum */
+};
+
+/* This is the version of the header to use when the MRG_RXBUF
+ * feature has been negotiated. */
+struct virtio_net_hdr_mrg_rxbuf {
+	struct virtio_net_hdr hdr;
+	__virtio16 num_buffers;	/* Number of merged rx buffers */
+};
 #endif /* ...VIRTIO_NET_NO_LEGACY */
 
 /*
diff --git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h
index 09ee408..0db25bc 100644
--- a/linux-headers/asm-arm/kvm.h
+++ b/linux-headers/asm-arm/kvm.h
@@ -175,6 +175,8 @@ struct kvm_arch_memory_slot {
 #define   KVM_DEV_ARM_VGIC_OFFSET_SHIFT	0
 #define   KVM_DEV_ARM_VGIC_OFFSET_MASK	(0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
 #define KVM_DEV_ARM_VGIC_GRP_NR_IRQS	3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL       4
+#define   KVM_DEV_ARM_VGIC_CTRL_INIT    0
 
 /* KVM_IRQ_LINE irq field index values */
 #define KVM_ARM_IRQ_TYPE_SHIFT		24
diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
index 8e38878..3ef77a4 100644
--- a/linux-headers/asm-arm64/kvm.h
+++ b/linux-headers/asm-arm64/kvm.h
@@ -78,6 +78,13 @@ struct kvm_regs {
 #define KVM_VGIC_V2_DIST_SIZE		0x1000
 #define KVM_VGIC_V2_CPU_SIZE		0x2000
 
+/* Supported VGICv3 address types  */
+#define KVM_VGIC_V3_ADDR_TYPE_DIST	2
+#define KVM_VGIC_V3_ADDR_TYPE_REDIST	3
+
+#define KVM_VGIC_V3_DIST_SIZE		SZ_64K
+#define KVM_VGIC_V3_REDIST_SIZE		(2 * SZ_64K)
+
 #define KVM_ARM_VCPU_POWER_OFF		0 /* CPU is started in OFF state */
 #define KVM_ARM_VCPU_EL1_32BIT		1 /* CPU running a 32bit VM */
 #define KVM_ARM_VCPU_PSCI_0_2		2 /* CPU uses PSCI v0.2 */
@@ -161,6 +168,8 @@ struct kvm_arch_memory_slot {
 #define   KVM_DEV_ARM_VGIC_OFFSET_SHIFT	0
 #define   KVM_DEV_ARM_VGIC_OFFSET_MASK	(0xffffffffULL << KVM_DEV_ARM_VGIC_OFFSET_SHIFT)
 #define KVM_DEV_ARM_VGIC_GRP_NR_IRQS	3
+#define KVM_DEV_ARM_VGIC_GRP_CTRL	4
+#define   KVM_DEV_ARM_VGIC_CTRL_INIT	0
 
 /* KVM_IRQ_LINE irq field index values */
 #define KVM_ARM_IRQ_TYPE_SHIFT		24
diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
index d36b2fa..c5a93eb 100644
--- a/linux-headers/asm-s390/kvm.h
+++ b/linux-headers/asm-s390/kvm.h
@@ -57,10 +57,44 @@ struct kvm_s390_io_adapter_req {
 
 /* kvm attr_group  on vm fd */
 #define KVM_S390_VM_MEM_CTRL		0
+#define KVM_S390_VM_TOD			1
+#define KVM_S390_VM_CRYPTO		2
+#define KVM_S390_VM_CPU_MODEL		3
 
 /* kvm attributes for mem_ctrl */
 #define KVM_S390_VM_MEM_ENABLE_CMMA	0
 #define KVM_S390_VM_MEM_CLR_CMMA	1
+#define KVM_S390_VM_MEM_LIMIT_SIZE	2
+
+/* kvm attributes for KVM_S390_VM_TOD */
+#define KVM_S390_VM_TOD_LOW		0
+#define KVM_S390_VM_TOD_HIGH		1
+
+/* kvm attributes for KVM_S390_VM_CPU_MODEL */
+/* processor related attributes are r/w */
+#define KVM_S390_VM_CPU_PROCESSOR	0
+struct kvm_s390_vm_cpu_processor {
+	__u64 cpuid;
+	__u16 ibc;
+	__u8  pad[6];
+	__u64 fac_list[256];
+};
+
+/* machine related attributes are r/o */
+#define KVM_S390_VM_CPU_MACHINE		1
+struct kvm_s390_vm_cpu_machine {
+	__u64 cpuid;
+	__u32 ibc;
+	__u8  pad[4];
+	__u64 fac_mask[256];
+	__u64 fac_list[256];
+};
+
+/* kvm attributes for crypto */
+#define KVM_S390_VM_CRYPTO_ENABLE_AES_KW	0
+#define KVM_S390_VM_CRYPTO_ENABLE_DEA_KW	1
+#define KVM_S390_VM_CRYPTO_DISABLE_AES_KW	2
+#define KVM_S390_VM_CRYPTO_DISABLE_DEA_KW	3
 
 /* for KVM_GET_REGS and KVM_SET_REGS */
 struct kvm_regs {
@@ -107,6 +141,9 @@ struct kvm_guest_debug_arch {
 	struct kvm_hw_breakpoint *hw_bp;
 };
 
+/* for KVM_SYNC_PFAULT and KVM_REG_S390_PFTOKEN */
+#define KVM_S390_PFAULT_TOKEN_INVALID	0xffffffffffffffffULL
+
 #define KVM_SYNC_PREFIX (1UL << 0)
 #define KVM_SYNC_GPRS   (1UL << 1)
 #define KVM_SYNC_ACRS   (1UL << 2)
diff --git a/linux-headers/asm-x86/hyperv.h b/linux-headers/asm-x86/hyperv.h
index 462efe7..90c458e 100644
--- a/linux-headers/asm-x86/hyperv.h
+++ b/linux-headers/asm-x86/hyperv.h
@@ -187,6 +187,17 @@
 #define HV_X64_MSR_SINT14			0x4000009E
 #define HV_X64_MSR_SINT15			0x4000009F
 
+/*
+ * Synthetic Timer MSRs. Four timers per vcpu.
+ */
+#define HV_X64_MSR_STIMER0_CONFIG		0x400000B0
+#define HV_X64_MSR_STIMER0_COUNT		0x400000B1
+#define HV_X64_MSR_STIMER1_CONFIG		0x400000B2
+#define HV_X64_MSR_STIMER1_COUNT		0x400000B3
+#define HV_X64_MSR_STIMER2_CONFIG		0x400000B4
+#define HV_X64_MSR_STIMER2_COUNT		0x400000B5
+#define HV_X64_MSR_STIMER3_CONFIG		0x400000B6
+#define HV_X64_MSR_STIMER3_COUNT		0x400000B7
 
 #define HV_X64_MSR_HYPERCALL_ENABLE		0x00000001
 #define HV_X64_MSR_HYPERCALL_PAGE_ADDRESS_SHIFT	12
diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h
index 12045a1..60a54c8 100644
--- a/linux-headers/linux/kvm.h
+++ b/linux-headers/linux/kvm.h
@@ -491,6 +491,11 @@ struct kvm_s390_emerg_info {
 	__u16 code;
 };
 
+#define KVM_S390_STOP_FLAG_STORE_STATUS	0x01
+struct kvm_s390_stop_info {
+	__u32 flags;
+};
+
 struct kvm_s390_mchk_info {
 	__u64 cr14;
 	__u64 mcic;
@@ -509,6 +514,7 @@ struct kvm_s390_irq {
 		struct kvm_s390_emerg_info emerg;
 		struct kvm_s390_extcall_info extcall;
 		struct kvm_s390_prefix_info prefix;
+		struct kvm_s390_stop_info stop;
 		struct kvm_s390_mchk_info mchk;
 		char reserved[64];
 	} u;
@@ -647,11 +653,7 @@ struct kvm_ppc_smmu_info {
 #define KVM_CAP_MP_STATE 14
 #define KVM_CAP_COALESCED_MMIO 15
 #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
-#define KVM_CAP_DEVICE_ASSIGNMENT 17
 #define KVM_CAP_IOMMU 18
-#ifdef __KVM_HAVE_MSI
-#define KVM_CAP_DEVICE_MSI 20
-#endif
 /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
 #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
 #define KVM_CAP_USER_NMI 22
@@ -663,10 +665,6 @@ struct kvm_ppc_smmu_info {
 #endif
 #define KVM_CAP_IRQ_ROUTING 25
 #define KVM_CAP_IRQ_INJECT_STATUS 26
-#define KVM_CAP_DEVICE_DEASSIGNMENT 27
-#ifdef __KVM_HAVE_MSIX
-#define KVM_CAP_DEVICE_MSIX 28
-#endif
 #define KVM_CAP_ASSIGN_DEV_IRQ 29
 /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
 #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
@@ -761,6 +759,7 @@ struct kvm_ppc_smmu_info {
 #define KVM_CAP_PPC_FIXUP_HCALL 103
 #define KVM_CAP_PPC_ENABLE_HCALL 104
 #define KVM_CAP_CHECK_EXTENSION_VM 105
+#define KVM_CAP_S390_USER_SIGP 106
 
 #ifdef KVM_CAP_IRQ_ROUTING
 
@@ -960,6 +959,8 @@ enum kvm_device_type {
 #define KVM_DEV_TYPE_ARM_VGIC_V2	KVM_DEV_TYPE_ARM_VGIC_V2
 	KVM_DEV_TYPE_FLIC,
 #define KVM_DEV_TYPE_FLIC		KVM_DEV_TYPE_FLIC
+	KVM_DEV_TYPE_ARM_VGIC_V3,
+#define KVM_DEV_TYPE_ARM_VGIC_V3	KVM_DEV_TYPE_ARM_VGIC_V3
 	KVM_DEV_TYPE_MAX,
 };
 
@@ -1107,9 +1108,6 @@ struct kvm_s390_ucas_mapping {
 #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
 #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
 #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
-/* IA64 stack access */
-#define KVM_IA64_VCPU_GET_STACK   _IOR(KVMIO,  0x9a, void *)
-#define KVM_IA64_VCPU_SET_STACK   _IOW(KVMIO,  0x9b, void *)
 /* Available with KVM_CAP_VCPU_EVENTS */
 #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
 #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 02/20] s390x: introduce defines for SIGP condition codes
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 01/20] synchronize Linux headers to 4.0-rc3 Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 03/20] s390x/kvm: more details for SIGP handler with one destination vcpu Christian Borntraeger
                   ` (18 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

This patch introduces defines for the SIGP condition codes and replaces all
occurrences of numeral condition codes with the new defines.

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-2-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/cpu.h         |  9 ++++++++-
 target-s390x/kvm.c         | 14 +++++++-------
 target-s390x/misc_helper.c |  4 ++--
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index b6b4632..1cdfe5e 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -864,6 +864,7 @@ struct sysib_322 {
 #define SK_F                    (0x1 << 3)
 #define SK_ACC_MASK             (0xf << 4)
 
+/* SIGP order codes */
 #define SIGP_SENSE             0x01
 #define SIGP_EXTERNAL_CALL     0x02
 #define SIGP_EMERGENCY         0x03
@@ -877,7 +878,13 @@ struct sysib_322 {
 #define SIGP_STORE_STATUS_ADDR 0x0e
 #define SIGP_SET_ARCH          0x12
 
-/* cpu status bits */
+/* SIGP condition codes */
+#define SIGP_CC_ORDER_CODE_ACCEPTED 0
+#define SIGP_CC_STATUS_STORED       1
+#define SIGP_CC_BUSY                2
+#define SIGP_CC_NOT_OPERATIONAL     3
+
+/* SIGP status bits */
 #define SIGP_STAT_EQUIPMENT_CHECK   0x80000000UL
 #define SIGP_STAT_INCORRECT_STATE   0x00000200UL
 #define SIGP_STAT_INVALID_PARAMETER 0x00000100UL
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index d7c57d9..3f7e9ad 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1178,37 +1178,37 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
     cpu_addr = env->regs[ipa1 & 0x0f];
     target_cpu = s390_cpu_addr2state(cpu_addr);
     if (target_cpu == NULL) {
-        cc = 3;    /* not operational */
+        cc = SIGP_CC_NOT_OPERATIONAL;
         goto out;
     }
 
     switch (order_code) {
     case SIGP_START:
         run_on_cpu(CPU(target_cpu), sigp_cpu_start, CPU(target_cpu));
-        cc = 0;
+        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
         break;
     case SIGP_RESTART:
         run_on_cpu(CPU(target_cpu), sigp_cpu_restart, CPU(target_cpu));
-        cc = 0;
+        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
         break;
     case SIGP_SET_ARCH:
         *statusreg &= 0xffffffff00000000UL;
         *statusreg |= SIGP_STAT_INVALID_PARAMETER;
-        cc = 1;   /* status stored */
+        cc = SIGP_CC_STATUS_STORED;
         break;
     case SIGP_INITIAL_CPU_RESET:
         run_on_cpu(CPU(target_cpu), sigp_initial_cpu_reset, CPU(target_cpu));
-        cc = 0;
+        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
         break;
     case SIGP_CPU_RESET:
         run_on_cpu(CPU(target_cpu), sigp_cpu_reset, CPU(target_cpu));
-        cc = 0;
+        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
         break;
     default:
         DPRINTF("KVM: unknown SIGP: 0x%x\n", order_code);
         *statusreg &= 0xffffffff00000000UL;
         *statusreg |= SIGP_STAT_INVALID_ORDER;
-        cc = 1;   /* status stored */
+        cc = SIGP_CC_STATUS_STORED;
         break;
     }
 
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index 1c3df8e..e1007fa 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -456,7 +456,7 @@ uint32_t HELPER(stsi)(CPUS390XState *env, uint64_t a0,
 uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
                       uint64_t cpu_addr)
 {
-    int cc = 0;
+    int cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 
     HELPER_LOG("%s: %016" PRIx64 " %08x %016" PRIx64 "\n",
                __func__, order_code, r1, cpu_addr);
@@ -490,7 +490,7 @@ uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
     default:
         /* unknown sigp */
         fprintf(stderr, "XXX unknown sigp: 0x%" PRIx64 "\n", order_code);
-        cc = 3;
+        cc = SIGP_CC_NOT_OPERATIONAL;
     }
 
     return cc;
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 03/20] s390x/kvm: more details for SIGP handler with one destination vcpu
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 01/20] synchronize Linux headers to 4.0-rc3 Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 02/20] s390x: introduce defines for SIGP condition codes Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 04/20] s390x/kvm: pass the SIGP instruction parameter to the SIGP handler Christian Borntraeger
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

Whenever a sigp order is to be executed by a target vcpu, we use run_on_cpu().
As we have only one pointer to pass all data to these sigp handlers, let's
introduce the struct sigp_info and use it as a transport container.

All orders targeting a single vcpu are now  dispatched from a separate
handler. The destination vcpu is only valid for these orders and must not be
checked for SIGP SET ARCHITECTURE.

The sigp_info is filled with life in this new handler and used to pass the
information about the sigp order to the existing handlers. The cc is set
within these handlers.

Rename sigp_cpu_start() and sigp_cpu_restart() on the way to match the SIGP
order names (in order to avoid touching affected lines several times).

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-3-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 153 +++++++++++++++++++++++++++++++----------------------
 1 file changed, 91 insertions(+), 62 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 3f7e9ad..8918986 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1111,110 +1111,139 @@ static int handle_diag(S390CPU *cpu, struct kvm_run *run, uint32_t ipb)
     return r;
 }
 
-static void sigp_cpu_start(void *arg)
+typedef struct SigpInfo {
+    S390CPU *cpu;
+    int cc;
+    uint64_t *status_reg;
+} SigpInfo;
+
+static void sigp_start(void *arg)
 {
-    CPUState *cs = arg;
-    S390CPU *cpu = S390_CPU(cs);
+    SigpInfo *si = arg;
 
-    s390_cpu_set_state(CPU_STATE_OPERATING, cpu);
-    DPRINTF("DONE: KVM cpu start: %p\n", &cpu->env);
+    s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+    DPRINTF("DONE: KVM cpu start: %p\n", &si->cpu->env);
 }
 
-static void sigp_cpu_restart(void *arg)
+static void sigp_restart(void *arg)
 {
-    CPUState *cs = arg;
-    S390CPU *cpu = S390_CPU(cs);
+    SigpInfo *si = arg;
     struct kvm_s390_irq irq = {
         .type = KVM_S390_RESTART,
     };
 
-    kvm_s390_vcpu_interrupt(cpu, &irq);
-    s390_cpu_set_state(CPU_STATE_OPERATING, cpu);
+    kvm_s390_vcpu_interrupt(si->cpu, &irq);
+    s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
 int kvm_s390_cpu_restart(S390CPU *cpu)
 {
-    run_on_cpu(CPU(cpu), sigp_cpu_restart, CPU(cpu));
+    SigpInfo si = {
+        .cpu = cpu,
+    };
+
+    run_on_cpu(CPU(cpu), sigp_restart, &si);
     DPRINTF("DONE: KVM cpu restart: %p\n", &cpu->env);
     return 0;
 }
 
 static void sigp_initial_cpu_reset(void *arg)
 {
-    CPUState *cpu = arg;
-    S390CPUClass *scc = S390_CPU_GET_CLASS(cpu);
+    SigpInfo *si = arg;
+    CPUState *cs = CPU(si->cpu);
+    S390CPUClass *scc = S390_CPU_GET_CLASS(si->cpu);
 
-    cpu_synchronize_state(cpu);
-    scc->initial_cpu_reset(cpu);
-    cpu_synchronize_post_reset(cpu);
+    cpu_synchronize_state(cs);
+    scc->initial_cpu_reset(cs);
+    cpu_synchronize_post_reset(cs);
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
 static void sigp_cpu_reset(void *arg)
 {
-    CPUState *cpu = arg;
-    S390CPUClass *scc = S390_CPU_GET_CLASS(cpu);
+    SigpInfo *si = arg;
+    CPUState *cs = CPU(si->cpu);
+    S390CPUClass *scc = S390_CPU_GET_CLASS(si->cpu);
 
-    cpu_synchronize_state(cpu);
-    scc->cpu_reset(cpu);
-    cpu_synchronize_post_reset(cpu);
+    cpu_synchronize_state(cs);
+    scc->cpu_reset(cs);
+    cpu_synchronize_post_reset(cs);
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
-#define SIGP_ORDER_MASK 0x000000ff
-
-static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
+static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
+                                  uint64_t *status_reg)
 {
-    CPUS390XState *env = &cpu->env;
-    uint8_t order_code;
-    uint16_t cpu_addr;
-    S390CPU *target_cpu;
-    uint64_t *statusreg = &env->regs[ipa1 >> 4];
-    int cc;
-
-    cpu_synchronize_state(CPU(cpu));
-
-    /* get order code */
-    order_code = decode_basedisp_rs(env, run->s390_sieic.ipb) & SIGP_ORDER_MASK;
+    SigpInfo si = {
+        .cpu = dst_cpu,
+        .status_reg = status_reg,
+    };
 
-    cpu_addr = env->regs[ipa1 & 0x0f];
-    target_cpu = s390_cpu_addr2state(cpu_addr);
-    if (target_cpu == NULL) {
-        cc = SIGP_CC_NOT_OPERATIONAL;
-        goto out;
+    /* cpu available? */
+    if (dst_cpu == NULL) {
+        return SIGP_CC_NOT_OPERATIONAL;
     }
 
-    switch (order_code) {
+    switch (order) {
     case SIGP_START:
-        run_on_cpu(CPU(target_cpu), sigp_cpu_start, CPU(target_cpu));
-        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+        run_on_cpu(CPU(dst_cpu), sigp_start, &si);
         break;
     case SIGP_RESTART:
-        run_on_cpu(CPU(target_cpu), sigp_cpu_restart, CPU(target_cpu));
-        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
-        break;
-    case SIGP_SET_ARCH:
-        *statusreg &= 0xffffffff00000000UL;
-        *statusreg |= SIGP_STAT_INVALID_PARAMETER;
-        cc = SIGP_CC_STATUS_STORED;
-        break;
+        run_on_cpu(CPU(dst_cpu), sigp_restart, &si);
     case SIGP_INITIAL_CPU_RESET:
-        run_on_cpu(CPU(target_cpu), sigp_initial_cpu_reset, CPU(target_cpu));
-        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+        run_on_cpu(CPU(dst_cpu), sigp_initial_cpu_reset, &si);
         break;
     case SIGP_CPU_RESET:
-        run_on_cpu(CPU(target_cpu), sigp_cpu_reset, CPU(target_cpu));
-        cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+        run_on_cpu(CPU(dst_cpu), sigp_cpu_reset, &si);
         break;
     default:
-        DPRINTF("KVM: unknown SIGP: 0x%x\n", order_code);
-        *statusreg &= 0xffffffff00000000UL;
-        *statusreg |= SIGP_STAT_INVALID_ORDER;
-        cc = SIGP_CC_STATUS_STORED;
+        DPRINTF("KVM: unknown SIGP: 0x%x\n", order);
+        *status_reg &= 0xffffffff00000000ULL;
+        *status_reg |= SIGP_STAT_INVALID_ORDER;
+        si.cc = SIGP_CC_STATUS_STORED;
+    }
+
+    return si.cc;
+}
+
+#define SIGP_ORDER_MASK 0x000000ff
+
+static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
+{
+    CPUS390XState *env = &cpu->env;
+    const uint8_t r1 = ipa1 >> 4;
+    const uint8_t r3 = ipa1 & 0x0f;
+    int ret;
+    uint8_t order;
+    uint64_t *status_reg;
+    S390CPU *dst_cpu = NULL;
+
+    cpu_synchronize_state(CPU(cpu));
+
+    /* get order code */
+    order = decode_basedisp_rs(env, run->s390_sieic.ipb) & SIGP_ORDER_MASK;
+    status_reg = &env->regs[r1];
+
+    switch (order) {
+    case SIGP_SET_ARCH:
+        *status_reg &= 0xffffffff00000000ULL;
+        *status_reg |= SIGP_STAT_INVALID_PARAMETER;
+        ret = SIGP_CC_STATUS_STORED;
         break;
+    default:
+        /* all other sigp orders target a single vcpu */
+        dst_cpu = s390_cpu_addr2state(env->regs[r3]);
+        ret = handle_sigp_single_dst(dst_cpu, order, status_reg);
     }
 
-out:
-    setcc(cpu, cc);
-    return 0;
+    if (ret >= 0) {
+        setcc(cpu, ret);
+        return 0;
+    }
+
+    return ret;
 }
 
 static int handle_instruction(S390CPU *cpu, struct kvm_run *run)
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 04/20] s390x/kvm: pass the SIGP instruction parameter to the SIGP handler
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (2 preceding siblings ...)
  2015-03-10  8:37 ` [Qemu-devel] [PULL 03/20] s390x/kvm: more details for SIGP handler with one destination vcpu Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 05/20] s390x/kvm: helper to set the SIGP status in SigpInfo Christian Borntraeger
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

The parameter of the SIGP instruction will be neded in the future. Let's read it
out and store it in the struct sigp_info, so it can be passed to the sigp
handlers.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-4-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 8918986..aaf703e 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1113,6 +1113,7 @@ static int handle_diag(S390CPU *cpu, struct kvm_run *run, uint32_t ipb)
 
 typedef struct SigpInfo {
     S390CPU *cpu;
+    uint64_t param;
     int cc;
     uint64_t *status_reg;
 } SigpInfo;
@@ -1174,10 +1175,11 @@ static void sigp_cpu_reset(void *arg)
 }
 
 static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
-                                  uint64_t *status_reg)
+                                  uint64_t param, uint64_t *status_reg)
 {
     SigpInfo si = {
         .cpu = dst_cpu,
+        .param = param,
         .status_reg = status_reg,
     };
 
@@ -1218,6 +1220,7 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
     int ret;
     uint8_t order;
     uint64_t *status_reg;
+    uint64_t param;
     S390CPU *dst_cpu = NULL;
 
     cpu_synchronize_state(CPU(cpu));
@@ -1225,6 +1228,7 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
     /* get order code */
     order = decode_basedisp_rs(env, run->s390_sieic.ipb) & SIGP_ORDER_MASK;
     status_reg = &env->regs[r1];
+    param = (r1 % 2) ? env->regs[r1] : env->regs[r1 + 1];
 
     switch (order) {
     case SIGP_SET_ARCH:
@@ -1235,7 +1239,7 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
     default:
         /* all other sigp orders target a single vcpu */
         dst_cpu = s390_cpu_addr2state(env->regs[r3]);
-        ret = handle_sigp_single_dst(dst_cpu, order, status_reg);
+        ret = handle_sigp_single_dst(dst_cpu, order, param, status_reg);
     }
 
     if (ret >= 0) {
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 05/20] s390x/kvm: helper to set the SIGP status in SigpInfo
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (3 preceding siblings ...)
  2015-03-10  8:37 ` [Qemu-devel] [PULL 04/20] s390x/kvm: pass the SIGP instruction parameter to the SIGP handler Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:37 ` [Qemu-devel] [PULL 06/20] s390x/kvm: trace all SIGP orders Christian Borntraeger
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

Whenever we set the SIGP status in the status register, we have to wipe out
the lower 4 bytes and keep the higher 4 bytes. Also the condition code will
always be set to STATUS_STORED.

Let's introduce the wrapper for SigpInfo, as this will avoid most duplicate
code in the future.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-5-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index aaf703e..28d26c1 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1118,6 +1118,13 @@ typedef struct SigpInfo {
     uint64_t *status_reg;
 } SigpInfo;
 
+static void set_sigp_status(SigpInfo *si, uint64_t status)
+{
+    *si->status_reg &= 0xffffffff00000000ULL;
+    *si->status_reg |= status;
+    si->cc = SIGP_CC_STATUS_STORED;
+}
+
 static void sigp_start(void *arg)
 {
     SigpInfo *si = arg;
@@ -1202,9 +1209,7 @@ static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
         break;
     default:
         DPRINTF("KVM: unknown SIGP: 0x%x\n", order);
-        *status_reg &= 0xffffffff00000000ULL;
-        *status_reg |= SIGP_STAT_INVALID_ORDER;
-        si.cc = SIGP_CC_STATUS_STORED;
+        set_sigp_status(&si, SIGP_STAT_INVALID_ORDER);
     }
 
     return si.cc;
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 06/20] s390x/kvm: trace all SIGP orders
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (4 preceding siblings ...)
  2015-03-10  8:37 ` [Qemu-devel] [PULL 05/20] s390x/kvm: helper to set the SIGP status in SigpInfo Christian Borntraeger
@ 2015-03-10  8:37 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 07/20] s390x/kvm: implement handling of new " Christian Borntraeger
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:37 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

This patch adds tracing code for all SIGP orders (including the destination
vcpu and the resulting condition code).

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-6-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 4 +++-
 trace-events       | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 28d26c1..c4c867c 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1131,7 +1131,6 @@ static void sigp_start(void *arg)
 
     s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
     si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
-    DPRINTF("DONE: KVM cpu start: %p\n", &si->cpu->env);
 }
 
 static void sigp_restart(void *arg)
@@ -1247,6 +1246,9 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
         ret = handle_sigp_single_dst(dst_cpu, order, param, status_reg);
     }
 
+    trace_kvm_sigp_finished(order, CPU(cpu)->cpu_index,
+                            dst_cpu ? CPU(dst_cpu)->cpu_index : -1, ret);
+
     if (ret >= 0) {
         setcc(cpu, ret);
         return 0;
diff --git a/trace-events b/trace-events
index 4ac588c..30eba92 100644
--- a/trace-events
+++ b/trace-events
@@ -1581,6 +1581,7 @@ mhp_pc_dimm_assigned_address(uint64_t addr) "0x%"PRIx64
 kvm_enable_cmma(int rc) "CMMA: enabling with result code %d"
 kvm_clear_cmma(int rc) "CMMA: clearing with result code %d"
 kvm_failed_cpu_state_set(int cpu_index, uint8_t state, const char *msg) "Warning: Unable to set cpu %d state %" PRIu8 " to KVM: %s"
+kvm_sigp_finished(uint8_t order, int cpu_index, int dst_index, int cc) "SIGP: Finished order %u on cpu %d -> cpu %d with cc=%d"
 
 # hw/dma/i8257.c
 i8257_unregistered_dma(int nchan, int dma_pos, int dma_len) "unregistered DMA channel used nchan=%d dma_pos=%d dma_len=%d"
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 07/20] s390x/kvm: implement handling of new SIGP orders
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (5 preceding siblings ...)
  2015-03-10  8:37 ` [Qemu-devel] [PULL 06/20] s390x/kvm: trace all SIGP orders Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 08/20] s390x/kvm: SIGP START is only applicable when STOPPED Christian Borntraeger
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

This patch adds handling code for the following SIGP orders:
- SIGP SET ARCHITECTURE
- SIGP SET PREFIX
- SIGP STOP
- SIGP STOP AND STORE STATUS
- SIGP STORE STATUS AT ADDRESS

SIGP STOP (AND STORE STATUS) are the only orders that can stay pending forever
(and may only be interrupted by resets), so special care has to be taken about
them. Their status also has to be tracked within QEMU. This patch takes
care of migrating this status (e.g. if migration happens during a SIGP STOP).

Due to the BQL, only one VCPU is currently able to execute SIGP handlers at a
time. According to the PoP, BUSY should be returned if another SIGP order is
currently being executed on a VCPU. This can only be implemented when the BQL
does not protect all handlers. For now, all SIGP orders on all VCPUs will be
serialized, which will be okay for the first shot.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-7-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/cpu.c     |   2 +
 target-s390x/cpu.h     |  12 +++
 target-s390x/kvm.c     | 204 ++++++++++++++++++++++++++++++++++++++++++++++++-
 target-s390x/machine.c |   5 +-
 4 files changed, 218 insertions(+), 5 deletions(-)

diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c
index d2f6312..e0537fa 100644
--- a/target-s390x/cpu.c
+++ b/target-s390x/cpu.c
@@ -96,6 +96,7 @@ static void s390_cpu_reset(CPUState *s)
 
     env->pfault_token = -1UL;
     scc->parent_reset(s);
+    cpu->env.sigp_order = 0;
     s390_cpu_set_state(CPU_STATE_STOPPED, cpu);
     tlb_flush(s, 1);
 }
@@ -131,6 +132,7 @@ static void s390_cpu_full_reset(CPUState *s)
     CPUS390XState *env = &cpu->env;
 
     scc->parent_reset(s);
+    cpu->env.sigp_order = 0;
     s390_cpu_set_state(CPU_STATE_STOPPED, cpu);
 
     memset(env, 0, offsetof(CPUS390XState, cpu_num));
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index 1cdfe5e..da0af94 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -157,6 +157,9 @@ typedef struct CPUS390XState {
 #define CPU_STATE_LOAD                 0x04
     uint8_t cpu_state;
 
+    /* currently processed sigp order */
+    uint8_t sigp_order;
+
 } CPUS390XState;
 
 #include "cpu-qom.h"
@@ -411,6 +414,10 @@ S390CPU *s390_cpu_addr2state(uint16_t cpu_addr);
 unsigned int s390_cpu_halt(S390CPU *cpu);
 void s390_cpu_unhalt(S390CPU *cpu);
 unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu);
+static inline uint8_t s390_cpu_get_state(S390CPU *cpu)
+{
+    return cpu->env.cpu_state;
+}
 
 /* service interrupts are floating therefore we must not pass an cpustate */
 void s390_sclp_extint(uint32_t parm);
@@ -896,6 +903,11 @@ struct sysib_322 {
 #define SIGP_STAT_INVALID_ORDER     0x00000002UL
 #define SIGP_STAT_RECEIVER_CHECK    0x00000001UL
 
+/* SIGP SET ARCHITECTURE modes */
+#define SIGP_MODE_ESA_S390 0
+#define SIGP_MODE_Z_ARCH_TRANS_ALL_PSW 1
+#define SIGP_MODE_Z_ARCH_TRANS_CUR_PSW 2
+
 void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr);
 int mmu_translate(CPUS390XState *env, target_ulong vaddr, int rw, uint64_t asc,
                   target_ulong *raddr, int *flags, bool exc);
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index c4c867c..127a3b8 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -38,6 +38,7 @@
 #include "qapi/qmp/qjson.h"
 #include "monitor/monitor.h"
 #include "exec/gdbstub.h"
+#include "exec/address-spaces.h"
 #include "trace.h"
 #include "qapi-event.h"
 #include "hw/s390x/s390-pci-inst.h"
@@ -1133,6 +1134,114 @@ static void sigp_start(void *arg)
     si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
+static void sigp_stop(void *arg)
+{
+    SigpInfo *si = arg;
+    struct kvm_s390_irq irq = {
+        .type = KVM_S390_SIGP_STOP,
+    };
+
+    if (s390_cpu_get_state(si->cpu) != CPU_STATE_OPERATING) {
+        si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+        return;
+    }
+
+    /* disabled wait - sleeping in user space */
+    if (CPU(si->cpu)->halted) {
+        s390_cpu_set_state(CPU_STATE_STOPPED, si->cpu);
+    } else {
+        /* execute the stop function */
+        si->cpu->env.sigp_order = SIGP_STOP;
+        kvm_s390_vcpu_interrupt(si->cpu, &irq);
+    }
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+}
+
+#define KVM_S390_STORE_STATUS_DEF_ADDR offsetof(LowCore, floating_pt_save_area)
+#define SAVE_AREA_SIZE 512
+static int kvm_s390_store_status(S390CPU *cpu, hwaddr addr, bool store_arch)
+{
+    static const uint8_t ar_id = 1;
+    uint64_t ckc = cpu->env.ckc >> 8;
+    void *mem;
+    hwaddr len = SAVE_AREA_SIZE;
+
+    mem = cpu_physical_memory_map(addr, &len, 1);
+    if (!mem) {
+        return -EFAULT;
+    }
+    if (len != SAVE_AREA_SIZE) {
+        cpu_physical_memory_unmap(mem, len, 1, 0);
+        return -EFAULT;
+    }
+
+    if (store_arch) {
+        cpu_physical_memory_write(offsetof(LowCore, ar_access_id), &ar_id, 1);
+    }
+    memcpy(mem, &cpu->env.fregs, 128);
+    memcpy(mem + 128, &cpu->env.regs, 128);
+    memcpy(mem + 256, &cpu->env.psw, 16);
+    memcpy(mem + 280, &cpu->env.psa, 4);
+    memcpy(mem + 284, &cpu->env.fpc, 4);
+    memcpy(mem + 292, &cpu->env.todpr, 4);
+    memcpy(mem + 296, &cpu->env.cputm, 8);
+    memcpy(mem + 304, &ckc, 8);
+    memcpy(mem + 320, &cpu->env.aregs, 64);
+    memcpy(mem + 384, &cpu->env.cregs, 128);
+
+    cpu_physical_memory_unmap(mem, len, 1, len);
+
+    return 0;
+}
+
+static void sigp_stop_and_store_status(void *arg)
+{
+    SigpInfo *si = arg;
+    struct kvm_s390_irq irq = {
+        .type = KVM_S390_SIGP_STOP,
+    };
+
+    /* disabled wait - sleeping in user space */
+    if (s390_cpu_get_state(si->cpu) == CPU_STATE_OPERATING &&
+        CPU(si->cpu)->halted) {
+        s390_cpu_set_state(CPU_STATE_STOPPED, si->cpu);
+    }
+
+    switch (s390_cpu_get_state(si->cpu)) {
+    case CPU_STATE_OPERATING:
+        si->cpu->env.sigp_order = SIGP_STOP_STORE_STATUS;
+        kvm_s390_vcpu_interrupt(si->cpu, &irq);
+        /* store will be performed when handling the stop intercept */
+        break;
+    case CPU_STATE_STOPPED:
+        /* already stopped, just store the status */
+        cpu_synchronize_state(CPU(si->cpu));
+        kvm_s390_store_status(si->cpu, KVM_S390_STORE_STATUS_DEF_ADDR, true);
+        break;
+    }
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+}
+
+static void sigp_store_status_at_address(void *arg)
+{
+    SigpInfo *si = arg;
+    uint32_t address = si->param & 0x7ffffe00u;
+
+    /* cpu has to be stopped */
+    if (s390_cpu_get_state(si->cpu) != CPU_STATE_STOPPED) {
+        set_sigp_status(si, SIGP_STAT_INCORRECT_STATE);
+        return;
+    }
+
+    cpu_synchronize_state(CPU(si->cpu));
+
+    if (kvm_s390_store_status(si->cpu, address, false)) {
+        set_sigp_status(si, SIGP_STAT_INVALID_PARAMETER);
+        return;
+    }
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+}
+
 static void sigp_restart(void *arg)
 {
     SigpInfo *si = arg;
@@ -1180,6 +1289,30 @@ static void sigp_cpu_reset(void *arg)
     si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
+static void sigp_set_prefix(void *arg)
+{
+    SigpInfo *si = arg;
+    uint32_t addr = si->param & 0x7fffe000u;
+
+    cpu_synchronize_state(CPU(si->cpu));
+
+    if (!address_space_access_valid(&address_space_memory, addr,
+                                    sizeof(struct LowCore), false)) {
+        set_sigp_status(si, SIGP_STAT_INVALID_PARAMETER);
+        return;
+    }
+
+    /* cpu has to be stopped */
+    if (s390_cpu_get_state(si->cpu) != CPU_STATE_STOPPED) {
+        set_sigp_status(si, SIGP_STAT_INCORRECT_STATE);
+        return;
+    }
+
+    si->cpu->env.psa = addr;
+    cpu_synchronize_post_init(CPU(si->cpu));
+    si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+}
+
 static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
                                   uint64_t param, uint64_t *status_reg)
 {
@@ -1194,12 +1327,32 @@ static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
         return SIGP_CC_NOT_OPERATIONAL;
     }
 
+    /* only resets can break pending orders */
+    if (dst_cpu->env.sigp_order != 0 &&
+        order != SIGP_CPU_RESET &&
+        order != SIGP_INITIAL_CPU_RESET) {
+        return SIGP_CC_BUSY;
+    }
+
     switch (order) {
     case SIGP_START:
         run_on_cpu(CPU(dst_cpu), sigp_start, &si);
         break;
+    case SIGP_STOP:
+        run_on_cpu(CPU(dst_cpu), sigp_stop, &si);
+        break;
     case SIGP_RESTART:
         run_on_cpu(CPU(dst_cpu), sigp_restart, &si);
+        break;
+    case SIGP_STOP_STORE_STATUS:
+        run_on_cpu(CPU(dst_cpu), sigp_stop_and_store_status, &si);
+        break;
+    case SIGP_STORE_STATUS_ADDR:
+        run_on_cpu(CPU(dst_cpu), sigp_store_status_at_address, &si);
+        break;
+    case SIGP_SET_PREFIX:
+        run_on_cpu(CPU(dst_cpu), sigp_set_prefix, &si);
+        break;
     case SIGP_INITIAL_CPU_RESET:
         run_on_cpu(CPU(dst_cpu), sigp_initial_cpu_reset, &si);
         break;
@@ -1214,6 +1367,48 @@ static int handle_sigp_single_dst(S390CPU *dst_cpu, uint8_t order,
     return si.cc;
 }
 
+static int sigp_set_architecture(S390CPU *cpu, uint32_t param,
+                                 uint64_t *status_reg)
+{
+    CPUState *cur_cs;
+    S390CPU *cur_cpu;
+
+    /* due to the BQL, we are the only active cpu */
+    CPU_FOREACH(cur_cs) {
+        cur_cpu = S390_CPU(cur_cs);
+        if (cur_cpu->env.sigp_order != 0) {
+            return SIGP_CC_BUSY;
+        }
+        cpu_synchronize_state(cur_cs);
+        /* all but the current one have to be stopped */
+        if (cur_cpu != cpu &&
+            s390_cpu_get_state(cur_cpu) != CPU_STATE_STOPPED) {
+            *status_reg &= 0xffffffff00000000ULL;
+            *status_reg |= SIGP_STAT_INCORRECT_STATE;
+            return SIGP_CC_STATUS_STORED;
+        }
+    }
+
+    switch (param & 0xff) {
+    case SIGP_MODE_ESA_S390:
+        /* not supported */
+        return SIGP_CC_NOT_OPERATIONAL;
+    case SIGP_MODE_Z_ARCH_TRANS_ALL_PSW:
+    case SIGP_MODE_Z_ARCH_TRANS_CUR_PSW:
+        CPU_FOREACH(cur_cs) {
+            cur_cpu = S390_CPU(cur_cs);
+            cur_cpu->env.pfault_token = -1UL;
+        }
+        break;
+    default:
+        *status_reg &= 0xffffffff00000000ULL;
+        *status_reg |= SIGP_STAT_INVALID_PARAMETER;
+        return SIGP_CC_STATUS_STORED;
+    }
+
+    return SIGP_CC_ORDER_CODE_ACCEPTED;
+}
+
 #define SIGP_ORDER_MASK 0x000000ff
 
 static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
@@ -1236,9 +1431,7 @@ static int handle_sigp(S390CPU *cpu, struct kvm_run *run, uint8_t ipa1)
 
     switch (order) {
     case SIGP_SET_ARCH:
-        *status_reg &= 0xffffffff00000000ULL;
-        *status_reg |= SIGP_STAT_INVALID_PARAMETER;
-        ret = SIGP_CC_STATUS_STORED;
+        ret = sigp_set_architecture(cpu, param, status_reg);
         break;
     default:
         /* all other sigp orders target a single vcpu */
@@ -1357,6 +1550,11 @@ static int handle_intercept(S390CPU *cpu)
             if (s390_cpu_set_state(CPU_STATE_STOPPED, cpu) == 0) {
                 qemu_system_shutdown_request();
             }
+            if (cpu->env.sigp_order == SIGP_STOP_STORE_STATUS) {
+                kvm_s390_store_status(cpu, KVM_S390_STORE_STATUS_DEF_ADDR,
+                                      true);
+            }
+            cpu->env.sigp_order = 0;
             r = EXCP_HALTED;
             break;
         case ICPT_SOFT_INTERCEPT:
diff --git a/target-s390x/machine.c b/target-s390x/machine.c
index fbcb0d0..bd4cea7 100644
--- a/target-s390x/machine.c
+++ b/target-s390x/machine.c
@@ -36,8 +36,8 @@ static int cpu_post_load(void *opaque, int version_id)
 const VMStateDescription vmstate_s390_cpu = {
     .name = "cpu",
     .post_load = cpu_post_load,
-    .version_id = 1,
-    .minimum_version_id = 1,
+    .version_id = 2,
+    .minimum_version_id = 2,
     .fields      = (VMStateField[]) {
         VMSTATE_UINT64(env.fregs[0].ll, S390CPU),
         VMSTATE_UINT64(env.fregs[1].ll, S390CPU),
@@ -71,6 +71,7 @@ const VMStateDescription vmstate_s390_cpu = {
         VMSTATE_UINT32_ARRAY(env.aregs, S390CPU, 16),
         VMSTATE_UINT64_ARRAY(env.cregs, S390CPU, 16),
         VMSTATE_UINT8(env.cpu_state, S390CPU),
+        VMSTATE_UINT8(env.sigp_order, S390CPU),
         VMSTATE_END_OF_LIST()
      },
 };
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 08/20] s390x/kvm: SIGP START is only applicable when STOPPED
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (6 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 07/20] s390x/kvm: implement handling of new " Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 09/20] s390x: add function to deliver restart irqs Christian Borntraeger
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

In preparation for other CPU states, SIGP START will only start a VCPU if it is
in the STOPPED state.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-8-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 127a3b8..7023513 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1130,6 +1130,11 @@ static void sigp_start(void *arg)
 {
     SigpInfo *si = arg;
 
+    if (s390_cpu_get_state(si->cpu) != CPU_STATE_STOPPED) {
+        si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
+        return;
+    }
+
     s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
     si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 09/20] s390x: add function to deliver restart irqs
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (7 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 08/20] s390x/kvm: SIGP START is only applicable when STOPPED Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 10/20] s390x/kvm: deliver SIGP RESTART directly if stopped Christian Borntraeger
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

This patch adds a helper function to deliver restart irqs. To be able to be used
by kvm, the psw load/store methods have to perform special cc-code handling only
when running with tcg.

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-9-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/cpu.h    |  5 ++++-
 target-s390x/helper.c | 35 ++++++++++++++++++++++++++++-------
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index da0af94..56c0293 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -352,7 +352,10 @@ int s390_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int rw,
 
 #include "ioinst.h"
 
+
 #ifndef CONFIG_USER_ONLY
+void do_restart_interrupt(CPUS390XState *env);
+
 static inline hwaddr decode_basedisp_s(CPUS390XState *env, uint32_t ipb)
 {
     hwaddr addr = 0;
@@ -671,7 +674,7 @@ typedef struct LowCore
     PSW             mcck_old_psw;             /* 0x160 */
     PSW             io_old_psw;               /* 0x170 */
     uint8_t         pad7[0x1a0-0x180];        /* 0x180 */
-    PSW             restart_psw;              /* 0x1a0 */
+    PSW             restart_new_psw;          /* 0x1a0 */
     PSW             external_new_psw;         /* 0x1b0 */
     PSW             svc_new_psw;              /* 0x1c0 */
     PSW             program_new_psw;          /* 0x1d0 */
diff --git a/target-s390x/helper.c b/target-s390x/helper.c
index e0fd8fc..f1060c2 100644
--- a/target-s390x/helper.c
+++ b/target-s390x/helper.c
@@ -183,7 +183,9 @@ void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr)
 {
     env->psw.addr = addr;
     env->psw.mask = mask;
-    env->cc_op = (mask >> 44) & 3;
+    if (tcg_enabled()) {
+        env->cc_op = (mask >> 44) & 3;
+    }
 
     if (mask & PSW_MASK_WAIT) {
         S390CPU *cpu = s390_env_get_cpu(env);
@@ -197,14 +199,16 @@ void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr)
 
 static uint64_t get_psw_mask(CPUS390XState *env)
 {
-    uint64_t r;
+    uint64_t r = env->psw.mask;
 
-    env->cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst, env->cc_vr);
+    if (tcg_enabled()) {
+        env->cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst,
+                             env->cc_vr);
 
-    r = env->psw.mask;
-    r &= ~PSW_MASK_CC;
-    assert(!(env->cc_op & ~3));
-    r |= (uint64_t)env->cc_op << 44;
+        r &= ~PSW_MASK_CC;
+        assert(!(env->cc_op & ~3));
+        r |= (uint64_t)env->cc_op << 44;
+    }
 
     return r;
 }
@@ -229,6 +233,23 @@ static void cpu_unmap_lowcore(LowCore *lowcore)
     cpu_physical_memory_unmap(lowcore, sizeof(LowCore), 1, sizeof(LowCore));
 }
 
+void do_restart_interrupt(CPUS390XState *env)
+{
+    uint64_t mask, addr;
+    LowCore *lowcore;
+
+    lowcore = cpu_map_lowcore(env);
+
+    lowcore->restart_old_psw.mask = cpu_to_be64(get_psw_mask(env));
+    lowcore->restart_old_psw.addr = cpu_to_be64(env->psw.addr);
+    mask = be64_to_cpu(lowcore->restart_new_psw.mask);
+    addr = be64_to_cpu(lowcore->restart_new_psw.addr);
+
+    cpu_unmap_lowcore(lowcore);
+
+    load_psw(env, mask, addr);
+}
+
 static void do_svc_interrupt(CPUS390XState *env)
 {
     uint64_t mask, addr;
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 10/20] s390x/kvm: deliver SIGP RESTART directly if stopped
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (8 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 09/20] s390x: add function to deliver restart irqs Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 11/20] s390x/kvm: enable the new SIGP handling in user space Christian Borntraeger
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

According to the PoP, a restart irq has to be delivered "without first honoring
any other pending interruptions", if a cpu is in the STOPPED state.

While it is hard to implement this case in kvm, it can easily be handled in qemu.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-10-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 7023513..ec64b7e 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1254,8 +1254,17 @@ static void sigp_restart(void *arg)
         .type = KVM_S390_RESTART,
     };
 
-    kvm_s390_vcpu_interrupt(si->cpu, &irq);
-    s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
+    switch (s390_cpu_get_state(si->cpu)) {
+    case CPU_STATE_STOPPED:
+        /* the restart irq has to be delivered prior to any other pending irq */
+        cpu_synchronize_state(CPU(si->cpu));
+        do_restart_interrupt(&si->cpu->env);
+        s390_cpu_set_state(CPU_STATE_OPERATING, si->cpu);
+        break;
+    case CPU_STATE_OPERATING:
+        kvm_s390_vcpu_interrupt(si->cpu, &irq);
+        break;
+    }
     si->cc = SIGP_CC_ORDER_CODE_ACCEPTED;
 }
 
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 11/20] s390x/kvm: enable the new SIGP handling in user space
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (9 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 10/20] s390x/kvm: deliver SIGP RESTART directly if stopped Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 12/20] virtio-s390: s390_virtio_device_init() can't fail, simplify Christian Borntraeger
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Christian Borntraeger, qemu-devel, Alexander Graf,
	David Hildenbrand, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

All required SIGP handlers have been implemented in QEMU.

Let's enable the new sigp handling in user space if the kernel supports it.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1424783731-43426-11-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target-s390x/kvm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index ec64b7e..6c4360b 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -187,6 +187,9 @@ int kvm_arch_init(KVMState *s)
         || !kvm_check_extension(s, KVM_CAP_S390_COW)) {
         phys_mem_set_alloc(legacy_s390_alloc);
     }
+
+    kvm_vm_enable_cap(s, KVM_CAP_S390_USER_SIGP, 0);
+
     return 0;
 }
 
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 12/20] virtio-s390: s390_virtio_device_init() can't fail, simplify
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (10 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 11/20] s390x/kvm: enable the new SIGP handling in user space Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 13/20] virtio-s390: Convert to realize() Christian Borntraeger
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Alexander Graf, Markus Armbruster, qemu-devel,
	Christian Borntraeger, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: Markus Armbruster <armbru@redhat.com>

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1425045337-20138-2-git-send-email-armbru@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/s390x/s390-virtio-bus.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 39dc201..f69ff11 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -111,7 +111,8 @@ VirtIOS390Bus *s390_virtio_bus_init(ram_addr_t *ram_size)
     return bus;
 }
 
-static int s390_virtio_device_init(VirtIOS390Device *dev, VirtIODevice *vdev)
+static void s390_virtio_device_init(VirtIOS390Device *dev,
+                                    VirtIODevice *vdev)
 {
     VirtIOS390Bus *bus;
     int dev_len;
@@ -135,8 +136,6 @@ static int s390_virtio_device_init(VirtIOS390Device *dev, VirtIODevice *vdev)
     if (dev->qdev.hotplugged) {
         s390_virtio_irq(VIRTIO_PARAM_DEV_ADD, dev->dev_offs);
     }
-
-    return 0;
 }
 
 static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
@@ -153,7 +152,8 @@ static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
         return -1;
     }
 
-    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    return 0;
 }
 
 static void s390_virtio_net_instance_init(Object *obj)
@@ -174,7 +174,8 @@ static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
     if (qdev_init(vdev) < 0) {
         return -1;
     }
-    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    return 0;
 }
 
 static void s390_virtio_blk_instance_init(Object *obj)
@@ -215,12 +216,9 @@ static int s390_virtio_serial_init(VirtIOS390Device *s390_dev)
         return -1;
     }
 
-    r = s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    if (!r) {
-        bus->console = s390_dev;
-    }
-
-    return r;
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    bus->console = s390_dev;
+    return 0;
 }
 
 static void s390_virtio_serial_instance_init(Object *obj)
@@ -253,7 +251,8 @@ static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
         return -1;
     }
 
-    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    return 0;
 }
 
 static void s390_virtio_scsi_instance_init(Object *obj)
@@ -275,7 +274,8 @@ static int s390_vhost_scsi_init(VirtIOS390Device *s390_dev)
         return -1;
     }
 
-    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    return 0;
 }
 
 static void s390_vhost_scsi_instance_init(Object *obj)
@@ -302,7 +302,8 @@ static int s390_virtio_rng_init(VirtIOS390Device *s390_dev)
                              OBJECT(dev->vdev.conf.rng), "rng",
                              NULL);
 
-    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+    return 0;
 }
 
 static void s390_virtio_rng_instance_init(Object *obj)
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 13/20] virtio-s390: Convert to realize()
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (11 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 12/20] virtio-s390: s390_virtio_device_init() can't fail, simplify Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 14/20] virtio-ccw: " Christian Borntraeger
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Alexander Graf, Markus Armbruster, qemu-devel,
	Christian Borntraeger, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: Markus Armbruster <armbru@redhat.com>

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1425045337-20138-3-git-send-email-armbru@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/s390x/s390-virtio-bus.c | 80 ++++++++++++++++++++++++++--------------------
 hw/s390x/s390-virtio-bus.h |  2 +-
 2 files changed, 47 insertions(+), 35 deletions(-)

diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index f69ff11..55a5581 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -138,22 +138,24 @@ static void s390_virtio_device_init(VirtIOS390Device *dev,
     }
 }
 
-static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
+static void s390_virtio_net_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     DeviceState *qdev = DEVICE(s390_dev);
     VirtIONetS390 *dev = VIRTIO_NET_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     virtio_net_set_config_size(&dev->vdev, s390_dev->host_features);
     virtio_net_set_netclient_name(&dev->vdev, qdev->id,
                                   object_get_typename(OBJECT(qdev)));
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    return 0;
 }
 
 static void s390_virtio_net_instance_init(Object *obj)
@@ -166,16 +168,19 @@ static void s390_virtio_net_instance_init(Object *obj)
                               "bootindex", &error_abort);
 }
 
-static int s390_virtio_blk_init(VirtIOS390Device *s390_dev)
+static void s390_virtio_blk_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     VirtIOBlkS390 *dev = VIRTIO_BLK_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
+
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    return 0;
 }
 
 static void s390_virtio_blk_instance_init(Object *obj)
@@ -190,13 +195,13 @@ static void s390_virtio_blk_instance_init(Object *obj)
                               "bootindex", &error_abort);
 }
 
-static int s390_virtio_serial_init(VirtIOS390Device *s390_dev)
+static void s390_virtio_serial_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     VirtIOSerialS390 *dev = VIRTIO_SERIAL_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
     DeviceState *qdev = DEVICE(s390_dev);
+    Error *err = NULL;
     VirtIOS390Bus *bus;
-    int r;
     char *bus_name;
 
     bus = DO_UPCAST(VirtIOS390Bus, bus, qdev->parent_bus);
@@ -212,13 +217,14 @@ static int s390_virtio_serial_init(VirtIOS390Device *s390_dev)
     }
 
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
     bus->console = s390_dev;
-    return 0;
 }
 
 static void s390_virtio_serial_instance_init(Object *obj)
@@ -229,11 +235,12 @@ static void s390_virtio_serial_instance_init(Object *obj)
                                 TYPE_VIRTIO_SERIAL);
 }
 
-static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
+static void s390_virtio_scsi_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
     DeviceState *qdev = DEVICE(s390_dev);
+    Error *err = NULL;
     char *bus_name;
 
     /*
@@ -247,12 +254,13 @@ static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
     }
 
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    return 0;
 }
 
 static void s390_virtio_scsi_instance_init(Object *obj)
@@ -264,18 +272,20 @@ static void s390_virtio_scsi_instance_init(Object *obj)
 }
 
 #ifdef CONFIG_VHOST_SCSI
-static int s390_vhost_scsi_init(VirtIOS390Device *s390_dev)
+static void s390_vhost_scsi_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     VHostSCSIS390 *dev = VHOST_SCSI_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    return 0;
 }
 
 static void s390_vhost_scsi_instance_init(Object *obj)
@@ -288,14 +298,17 @@ static void s390_vhost_scsi_instance_init(Object *obj)
 #endif
 
 
-static int s390_virtio_rng_init(VirtIOS390Device *s390_dev)
+static void s390_virtio_rng_realize(VirtIOS390Device *s390_dev, Error **errp)
 {
     VirtIORNGS390 *dev = VIRTIO_RNG_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     object_property_set_link(OBJECT(dev),
@@ -303,7 +316,6 @@ static int s390_virtio_rng_init(VirtIOS390Device *s390_dev)
                              NULL);
 
     s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
-    return 0;
 }
 
 static void s390_virtio_rng_instance_init(Object *obj)
@@ -510,7 +522,7 @@ static void s390_virtio_net_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_virtio_net_init;
+    k->realize = s390_virtio_net_realize;
     dc->props = s390_virtio_net_properties;
 }
 
@@ -526,7 +538,7 @@ static void s390_virtio_blk_class_init(ObjectClass *klass, void *data)
 {
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_virtio_blk_init;
+    k->realize = s390_virtio_blk_realize;
 }
 
 static const TypeInfo s390_virtio_blk = {
@@ -546,7 +558,7 @@ static void s390_virtio_serial_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_virtio_serial_init;
+    k->realize = s390_virtio_serial_realize;
     dc->props = s390_virtio_serial_properties;
 }
 
@@ -568,7 +580,7 @@ static void s390_virtio_rng_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_virtio_rng_init;
+    k->realize = s390_virtio_rng_realize;
     dc->props = s390_virtio_rng_properties;
 }
 
@@ -580,14 +592,14 @@ static const TypeInfo s390_virtio_rng = {
     .class_init    = s390_virtio_rng_class_init,
 };
 
-static int s390_virtio_busdev_init(DeviceState *dev)
+static void s390_virtio_busdev_realize(DeviceState *dev, Error **errp)
 {
     VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
     VirtIOS390DeviceClass *_info = VIRTIO_S390_DEVICE_GET_CLASS(dev);
 
     virtio_s390_bus_new(&_dev->bus, sizeof(_dev->bus), _dev);
 
-    return _info->init(_dev);
+    _info->realize(_dev, errp);
 }
 
 static void s390_virtio_busdev_reset(DeviceState *dev)
@@ -601,7 +613,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
 
-    dc->init = s390_virtio_busdev_init;
+    dc->realize = s390_virtio_busdev_realize;
     dc->bus_type = TYPE_S390_VIRTIO_BUS;
     dc->reset = s390_virtio_busdev_reset;
 }
@@ -626,7 +638,7 @@ static void s390_virtio_scsi_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_virtio_scsi_init;
+    k->realize = s390_virtio_scsi_realize;
     dc->props = s390_virtio_scsi_properties;
 }
 
@@ -649,7 +661,7 @@ static void s390_vhost_scsi_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOS390DeviceClass *k = VIRTIO_S390_DEVICE_CLASS(klass);
 
-    k->init = s390_vhost_scsi_init;
+    k->realize = s390_vhost_scsi_realize;
     dc->props = s390_vhost_scsi_properties;
 }
 
diff --git a/hw/s390x/s390-virtio-bus.h b/hw/s390x/s390-virtio-bus.h
index 92aa9d0..810a6ef 100644
--- a/hw/s390x/s390-virtio-bus.h
+++ b/hw/s390x/s390-virtio-bus.h
@@ -83,7 +83,7 @@ typedef struct VirtIOS390Device VirtIOS390Device;
 
 typedef struct VirtIOS390DeviceClass {
     DeviceClass qdev;
-    int (*init)(VirtIOS390Device *dev);
+    void (*realize)(VirtIOS390Device *dev, Error **errp);
 } VirtIOS390DeviceClass;
 
 struct VirtIOS390Device {
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 14/20] virtio-ccw: Convert to realize()
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (12 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 13/20] virtio-s390: Convert to realize() Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 15/20] s390x/kvm: passing max memory size to accelerator Christian Borntraeger
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Alexander Graf, Markus Armbruster, qemu-devel,
	Christian Borntraeger, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: Markus Armbruster <armbru@redhat.com>

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1425045219-19958-1-git-send-email-armbru@redhat.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/s390x/virtio-ccw.c | 134 ++++++++++++++++++++++++++++----------------------
 hw/s390x/virtio-ccw.h |   2 +-
 2 files changed, 75 insertions(+), 61 deletions(-)

diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index ffbb9c2..fce52a9 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -607,7 +607,8 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw)
     return ret;
 }
 
-static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
+static void virtio_ccw_device_realize(VirtioCcwDevice *dev,
+                                      VirtIODevice *vdev, Error **errp)
 {
     unsigned int cssid = 0;
     unsigned int ssid = 0;
@@ -616,7 +617,6 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
     bool have_devno = false;
     bool found = false;
     SubchDev *sch;
-    int ret;
     int num;
     DeviceState *parent = DEVICE(dev);
 
@@ -639,21 +639,19 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
         num = sscanf(dev->bus_id, "%x.%x.%04x", &cssid, &ssid, &devno);
         if (num == 3) {
             if ((cssid > MAX_CSSID) || (ssid > MAX_SSID)) {
-                ret = -EINVAL;
-                error_report("Invalid cssid or ssid: cssid %x, ssid %x",
-                             cssid, ssid);
+                error_setg(errp, "Invalid cssid or ssid: cssid %x, ssid %x",
+                           cssid, ssid);
                 goto out_err;
             }
             /* Enforce use of virtual cssid. */
             if (cssid != VIRTUAL_CSSID) {
-                ret = -EINVAL;
-                error_report("cssid %x not valid for virtio devices", cssid);
+                error_setg(errp, "cssid %x not valid for virtio devices",
+                           cssid);
                 goto out_err;
             }
             if (css_devno_used(cssid, ssid, devno)) {
-                ret = -EEXIST;
-                error_report("Device %x.%x.%04x already exists", cssid, ssid,
-                             devno);
+                error_setg(errp, "Device %x.%x.%04x already exists",
+                           cssid, ssid, devno);
                 goto out_err;
             }
             sch->cssid = cssid;
@@ -661,8 +659,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
             sch->devno = devno;
             have_devno = true;
         } else {
-            ret = -EINVAL;
-            error_report("Malformed devno parameter '%s'", dev->bus_id);
+            error_setg(errp, "Malformed devno parameter '%s'", dev->bus_id);
             goto out_err;
         }
     }
@@ -678,9 +675,8 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
             }
         }
         if (!found) {
-            ret = -ENODEV;
-            error_report("No free subchannel found for %x.%x.%04x", cssid, ssid,
-                         devno);
+            error_setg(errp, "No free subchannel found for %x.%x.%04x",
+                       cssid, ssid, devno);
             goto out_err;
         }
         trace_virtio_ccw_new_device(cssid, ssid, schid, devno,
@@ -702,8 +698,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
                         if (devno == MAX_SCHID) {
                             devno = 0;
                         } else if (devno == schid - 1) {
-                            ret = -ENODEV;
-                            error_report("No free devno found");
+                            error_setg(errp, "No free devno found");
                             goto out_err;
                         } else {
                             devno++;
@@ -720,8 +715,7 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
             }
         }
         if (!found) {
-            ret = -ENODEV;
-            error_report("Virtual channel subsystem is full!");
+            error_setg(errp, "Virtual channel subsystem is full!");
             goto out_err;
         }
         trace_virtio_ccw_new_device(cssid, ssid, schid, devno,
@@ -748,12 +742,11 @@ static int virtio_ccw_device_init(VirtioCcwDevice *dev, VirtIODevice *vdev)
 
     css_generate_sch_crws(sch->cssid, sch->ssid, sch->schid,
                           parent->hotplugged, 1);
-    return 0;
+    return;
 
 out_err:
     dev->sch = NULL;
     g_free(sch);
-    return ret;
 }
 
 static int virtio_ccw_exit(VirtioCcwDevice *dev)
@@ -771,21 +764,24 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
     return 0;
 }
 
-static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_net_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     DeviceState *qdev = DEVICE(ccw_dev);
     VirtIONetCcw *dev = VIRTIO_NET_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     virtio_net_set_config_size(&dev->vdev, ccw_dev->host_features[0]);
     virtio_net_set_netclient_name(&dev->vdev, qdev->id,
                                   object_get_typename(OBJECT(qdev)));
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 static void virtio_ccw_net_instance_init(Object *obj)
@@ -798,16 +794,20 @@ static void virtio_ccw_net_instance_init(Object *obj)
                               "bootindex", &error_abort);
 }
 
-static int virtio_ccw_blk_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_blk_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VirtIOBlkCcw *dev = VIRTIO_BLK_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
+
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 static void virtio_ccw_blk_instance_init(Object *obj)
@@ -822,11 +822,12 @@ static void virtio_ccw_blk_instance_init(Object *obj)
                               "bootindex", &error_abort);
 }
 
-static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_serial_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VirtioSerialCcw *dev = VIRTIO_SERIAL_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
     DeviceState *proxy = DEVICE(ccw_dev);
+    Error *err = NULL;
     char *bus_name;
 
     /*
@@ -840,11 +841,13 @@ static int virtio_ccw_serial_init(VirtioCcwDevice *ccw_dev)
     }
 
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 
@@ -856,17 +859,20 @@ static void virtio_ccw_serial_instance_init(Object *obj)
                                 TYPE_VIRTIO_SERIAL);
 }
 
-static int virtio_ccw_balloon_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_balloon_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VirtIOBalloonCcw *dev = VIRTIO_BALLOON_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 static void balloon_ccw_stats_get_all(Object *obj, struct Visitor *v,
@@ -909,11 +915,12 @@ static void virtio_ccw_balloon_instance_init(Object *obj)
                         NULL, dev, NULL);
 }
 
-static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_scsi_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
     DeviceState *qdev = DEVICE(ccw_dev);
+    Error *err = NULL;
     char *bus_name;
 
     /*
@@ -927,11 +934,13 @@ static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
     }
 
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 static void virtio_ccw_scsi_instance_init(Object *obj)
@@ -945,17 +954,20 @@ static void virtio_ccw_scsi_instance_init(Object *obj)
 }
 
 #ifdef CONFIG_VHOST_SCSI
-static int vhost_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
+static void vhost_ccw_scsi_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VHostSCSICcw *dev = VHOST_SCSI_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 static void vhost_ccw_scsi_instance_init(Object *obj)
@@ -967,21 +979,24 @@ static void vhost_ccw_scsi_instance_init(Object *obj)
 }
 #endif
 
-static int virtio_ccw_rng_init(VirtioCcwDevice *ccw_dev)
+static void virtio_ccw_rng_realize(VirtioCcwDevice *ccw_dev, Error **errp)
 {
     VirtIORNGCcw *dev = VIRTIO_RNG_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
+    Error *err = NULL;
 
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
-    if (qdev_init(vdev) < 0) {
-        return -1;
+    object_property_set_bool(OBJECT(vdev), true, "realized", &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     object_property_set_link(OBJECT(dev),
                              OBJECT(dev->vdev.conf.rng), "rng",
                              NULL);
 
-    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
+    virtio_ccw_device_realize(ccw_dev, VIRTIO_DEVICE(vdev), errp);
 }
 
 /* DeviceState to VirtioCcwDevice. Note: used on datapath,
@@ -1391,7 +1406,7 @@ static void virtio_ccw_net_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_net_init;
+    k->realize = virtio_ccw_net_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_net_properties;
@@ -1417,7 +1432,7 @@ static void virtio_ccw_blk_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_blk_init;
+    k->realize = virtio_ccw_blk_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_blk_properties;
@@ -1443,7 +1458,7 @@ static void virtio_ccw_serial_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_serial_init;
+    k->realize = virtio_ccw_serial_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_serial_properties;
@@ -1469,7 +1484,7 @@ static void virtio_ccw_balloon_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_balloon_init;
+    k->realize = virtio_ccw_balloon_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_balloon_properties;
@@ -1496,7 +1511,7 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_scsi_init;
+    k->realize = virtio_ccw_scsi_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_scsi_properties;
@@ -1521,7 +1536,7 @@ static void vhost_ccw_scsi_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = vhost_ccw_scsi_init;
+    k->realize = vhost_ccw_scsi_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = vhost_ccw_scsi_properties;
@@ -1558,7 +1573,7 @@ static void virtio_ccw_rng_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
-    k->init = virtio_ccw_rng_init;
+    k->realize = virtio_ccw_rng_realize;
     k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_rng_properties;
@@ -1572,14 +1587,13 @@ static const TypeInfo virtio_ccw_rng = {
     .class_init    = virtio_ccw_rng_class_init,
 };
 
-static int virtio_ccw_busdev_init(DeviceState *dev)
+static void virtio_ccw_busdev_realize(DeviceState *dev, Error **errp)
 {
     VirtioCcwDevice *_dev = (VirtioCcwDevice *)dev;
     VirtIOCCWDeviceClass *_info = VIRTIO_CCW_DEVICE_GET_CLASS(dev);
 
     virtio_ccw_bus_new(&_dev->bus, sizeof(_dev->bus), _dev);
-
-    return _info->init(_dev);
+    _info->realize(_dev, errp);
 }
 
 static int virtio_ccw_busdev_exit(DeviceState *dev)
@@ -1622,7 +1636,7 @@ static void virtio_ccw_device_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
 
     dc->props = virtio_ccw_properties;
-    dc->init = virtio_ccw_busdev_init;
+    dc->realize = virtio_ccw_busdev_realize;
     dc->exit = virtio_ccw_busdev_exit;
     dc->bus_type = TYPE_VIRTUAL_CSS_BUS;
 }
diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
index 5a1f16e..4fceda7 100644
--- a/hw/s390x/virtio-ccw.h
+++ b/hw/s390x/virtio-ccw.h
@@ -64,7 +64,7 @@ typedef struct VirtioCcwDevice VirtioCcwDevice;
 
 typedef struct VirtIOCCWDeviceClass {
     DeviceClass parent_class;
-    int (*init)(VirtioCcwDevice *dev);
+    void (*realize)(VirtioCcwDevice *dev, Error **errp);
     int (*exit)(VirtioCcwDevice *dev);
 } VirtIOCCWDeviceClass;
 
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 15/20] s390x/kvm: passing max memory size to accelerator
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (13 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 14/20] virtio-ccw: " Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 16/20] s390-ccw.img: Allow bigger ramdisk sizes or offsets Christian Borntraeger
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Dominik Dingel, Alexander Graf,
	Christian Borntraeger, Jens Freimann, Cornelia Huck,
	Richard Henderson

From: Dominik Dingel <dingel@linux.vnet.ibm.com>

With "KVM: s390: Allow userspace to limit guest memory size" KVM is able to
do some optimizations based on the guest memory limit.

The guest memory limit is computed by the initial definition and with the notion of
hotplugged memory.

Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Reviewed-by: Guenther Hutzl <hutzl@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com>
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Message-Id: <1425570981-40609-3-git-send-email-jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c | 10 ++++++++++
 target-s390x/cpu.h         | 14 ++++++++++++++
 target-s390x/kvm.c         | 45 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 8f0ae59..dac00ce 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -97,6 +97,7 @@ static void ccw_init(MachineState *machine)
     ram_addr_t pad_size = 0;
     ram_addr_t maxmem = qemu_opt_get_size(opts, "maxmem", my_ram_size);
     ram_addr_t standby_mem_size = maxmem - my_ram_size;
+    uint64_t kvm_limit;
 
     /* The storage increment size is a multiple of 1M and is a power of 2.
      * The number of storage increments must be MAX_STORAGE_INCREMENTS or fewer.
@@ -121,6 +122,15 @@ static void ccw_init(MachineState *machine)
 
     /* let's propagate the changed ram size into the global variable. */
     ram_size = my_ram_size;
+    machine->maxram_size = my_ram_size + standby_mem_size;
+
+    ret = s390_set_memory_limit(machine->maxram_size, &kvm_limit);
+    if (ret == -E2BIG) {
+        hw_error("qemu: host supports a maximum of %" PRIu64 " GB",
+                 kvm_limit >> 30);
+    } else if (ret) {
+        hw_error("qemu: setting the guest size failed");
+    }
 
     /* get a BUS */
     css_bus = virtual_css_bus_init();
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index 56c0293..143b631 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -1029,6 +1029,7 @@ int kvm_s390_get_memslot_count(KVMState *s);
 void kvm_s390_clear_cmma_callback(void *opaque);
 int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state);
 void kvm_s390_reset_vcpu(S390CPU *cpu);
+int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit);
 #else
 static inline void kvm_s390_io_interrupt(uint16_t subchannel_id,
                                         uint16_t subchannel_nr,
@@ -1066,8 +1067,21 @@ static inline int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state)
 static inline void kvm_s390_reset_vcpu(S390CPU *cpu)
 {
 }
+static inline int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit,
+                                         uint64_t *hw_limit)
+{
+    return 0;
+}
 #endif
 
+static inline int s390_set_memory_limit(uint64_t new_limit, uint64_t *hw_limit)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_set_mem_limit(kvm_state, new_limit, hw_limit);
+    }
+    return 0;
+}
+
 static inline void cmma_reset(S390CPU *cpu)
 {
     if (kvm_enabled()) {
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 6c4360b..a585fe3 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -122,6 +122,51 @@ static int cap_async_pf;
 
 static void *legacy_s390_alloc(size_t size, uint64_t *align);
 
+static int kvm_s390_supports_mem_limit(KVMState *s)
+{
+    struct kvm_device_attr attr = {
+        .group = KVM_S390_VM_MEM_CTRL,
+        .attr = KVM_S390_VM_MEM_LIMIT_SIZE,
+    };
+
+    return (kvm_vm_ioctl(s, KVM_HAS_DEVICE_ATTR, &attr) == 0);
+}
+
+static int kvm_s390_query_mem_limit(KVMState *s, uint64_t *memory_limit)
+{
+    struct kvm_device_attr attr = {
+        .group = KVM_S390_VM_MEM_CTRL,
+        .attr = KVM_S390_VM_MEM_LIMIT_SIZE,
+        .addr = (uint64_t) memory_limit,
+    };
+
+    return kvm_vm_ioctl(s, KVM_GET_DEVICE_ATTR, &attr);
+}
+
+int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit)
+{
+    int rc;
+
+    struct kvm_device_attr attr = {
+        .group = KVM_S390_VM_MEM_CTRL,
+        .attr = KVM_S390_VM_MEM_LIMIT_SIZE,
+        .addr = (uint64_t) &new_limit,
+    };
+
+    if (!kvm_s390_supports_mem_limit(s)) {
+        return 0;
+    }
+
+    rc = kvm_s390_query_mem_limit(s, hw_limit);
+    if (rc) {
+        return rc;
+    } else if (*hw_limit < new_limit) {
+        return -E2BIG;
+    }
+
+    return kvm_vm_ioctl(s, KVM_SET_DEVICE_ATTR, &attr);
+}
+
 static int kvm_s390_check_clear_cmma(KVMState *s)
 {
     struct kvm_device_attr attr = {
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 16/20] s390-ccw.img: Allow bigger ramdisk sizes or offsets
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (14 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 15/20] s390x/kvm: passing max memory size to accelerator Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 17/20] s390-ccw.img: Reinitialize guessing on reboot Christian Borntraeger
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Alexander Graf, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Richard Henderson

The s390-ccw bios creates the the virtqueue at 100MB. For
big ramdisks or offsets (via zipl) this gets overwritten.
As a quick band-aid, lets move the virtqueue into the bss
section, which is at 0x7f00000. As the bios code (text) is
at 0x7e00000 we can now handle ramdisk which are  ~27MB
bigger.

Long term we want to make the s390-ccw bios position
independent and load of at the end of memory.

Reported-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Message-Id: <1425310029-53396-2-git-send-email-borntraeger@de.ibm.com>
---
 pc-bios/s390-ccw/main.c     | 1 +
 pc-bios/s390-ccw/s390-ccw.h | 1 +
 pc-bios/s390-ccw/virtio.c   | 4 ++--
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 6f707bb..584d4a2 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -12,6 +12,7 @@
 #include "virtio.h"
 
 char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
+char ring_area[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
 uint64_t boot_value;
 static struct subchannel_id blk_schid = { .one = 1 };
 
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index ceb7418..9b3868b 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -52,6 +52,7 @@ void disabled_wait(void);
 void virtio_panic(const char *string);
 void write_subsystem_identification(void);
 extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
+extern char ring_area[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
 extern uint64_t boot_value;
 
 /* sclp-ascii.c */
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
index 4dc91a7..76919f7 100644
--- a/pc-bios/s390-ccw/virtio.c
+++ b/pc-bios/s390-ccw/virtio.c
@@ -378,10 +378,10 @@ void virtio_setup_block(struct subchannel_id schid)
     if (run_ccw(schid, CCW_CMD_READ_CONF, &blk_cfg, sizeof(blk_cfg))) {
         virtio_panic("Could not get block device configuration\n");
     }
-    vring_init(&block, config.num, (void *)(100 * 1024 * 1024),
+    vring_init(&block, config.num, ring_area,
                KVM_S390_VIRTIO_RING_ALIGN);
 
-    info.queue = (100ULL * 1024ULL* 1024ULL);
+    info.queue = (unsigned long long) ring_area;
     info.align = KVM_S390_VIRTIO_RING_ALIGN;
     info.index = 0;
     info.num = config.num;
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 17/20] s390-ccw.img: Reinitialize guessing on reboot
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (15 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 16/20] s390-ccw.img: Allow bigger ramdisk sizes or offsets Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 18/20] elf-loader: Provide the possibility to relocate s390 ELF files Christian Borntraeger
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Alexander Graf, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Richard Henderson

guessed_disk_nature is a static zero variable. As the QEMU ELF
loader does not zero the BSS section, lets do it explicitely here.

This fixes reboot for some corner cases (like FCP flash
devices with logical_block_size=512, physical_block_size=4096)

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Message-Id: <1425310029-53396-3-git-send-email-borntraeger@de.ibm.com>
---
 pc-bios/s390-ccw/virtio.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
index 76919f7..57ff1b0 100644
--- a/pc-bios/s390-ccw/virtio.c
+++ b/pc-bios/s390-ccw/virtio.c
@@ -362,6 +362,7 @@ void virtio_setup_block(struct subchannel_id schid)
     struct vq_config_block config = {};
 
     blk_cfg.blk_size = 0; /* mark "illegal" - setup started... */
+    guessed_disk_nature = false;
 
     virtio_reset(schid);
 
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 18/20] elf-loader: Provide the possibility to relocate s390 ELF files
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (16 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 17/20] s390-ccw.img: Reinitialize guessing on reboot Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 19/20] s390/bios: Make the s390-ccw.img relocatable Christian Borntraeger
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Thomas Huth, qemu-devel, Alexander Graf, Christian Borntraeger,
	Jens Freimann, Cornelia Huck, Richard Henderson

From: Thomas Huth <thuth@linux.vnet.ibm.com>

On s390, we would like to load our "BIOS" s390-ccw.img to the end of the
RAM. Therefor we need the possibility to relocate the ELF file so that
it can also run from different addresses. This patch adds the necessary
code to the QEMU ELF loader function.

Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Message-Id: <1425895973-15239-2-git-send-email-thuth@linux.vnet.ibm.com>
Acked-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/core/loader.c     |  2 ++
 include/elf.h        |  2 ++
 include/hw/elf_ops.h | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 82 insertions(+)

diff --git a/hw/core/loader.c b/hw/core/loader.c
index e45dc0b..76d8aca 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -297,6 +297,7 @@ static void *load_at(int fd, int offset, int size)
 #undef elf_phdr
 #undef elf_shdr
 #undef elf_sym
+#undef elf_rela
 #undef elf_note
 #undef elf_word
 #undef elf_sword
@@ -307,6 +308,7 @@ static void *load_at(int fd, int offset, int size)
 #define elf_note	elf64_note
 #define elf_shdr	elf64_shdr
 #define elf_sym		elf64_sym
+#define elf_rela        elf64_rela
 #define elf_word        uint64_t
 #define elf_sword        int64_t
 #define bswapSZs	bswap64s
diff --git a/include/elf.h b/include/elf.h
index a516584..3e75f05 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -1508,6 +1508,7 @@ struct elf32_fdpic_loadmap {
 #define elf_shdr	elf32_shdr
 #define elf_sym		elf32_sym
 #define elf_addr_t	Elf32_Off
+#define elf_rela  elf32_rela
 
 #ifdef ELF_USES_RELOCA
 # define ELF_RELOC      Elf32_Rela
@@ -1523,6 +1524,7 @@ struct elf32_fdpic_loadmap {
 #define elf_shdr	elf64_shdr
 #define elf_sym		elf64_sym
 #define elf_addr_t	Elf64_Off
+#define elf_rela  elf64_rela
 
 #ifdef ELF_USES_RELOCA
 # define ELF_RELOC      Elf64_Rela
diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h
index a517753..16a627b 100644
--- a/include/hw/elf_ops.h
+++ b/include/hw/elf_ops.h
@@ -49,6 +49,13 @@ static void glue(bswap_sym, SZ)(struct elf_sym *sym)
     bswap16s(&sym->st_shndx);
 }
 
+static void glue(bswap_rela, SZ)(struct elf_rela *rela)
+{
+    bswapSZs(&rela->r_offset);
+    bswapSZs(&rela->r_info);
+    bswapSZs((elf_word *)&rela->r_addend);
+}
+
 static struct elf_shdr *glue(find_section, SZ)(struct elf_shdr *shdr_table,
                                                int n, int type)
 {
@@ -182,6 +189,75 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
     return -1;
 }
 
+static int glue(elf_reloc, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
+                               uint64_t (*translate_fn)(void *, uint64_t),
+                               void *translate_opaque, uint8_t *data,
+                               struct elf_phdr *ph, int elf_machine)
+{
+    struct elf_shdr *reltab, *shdr_table = NULL;
+    struct elf_rela *rels = NULL;
+    int nrels, i, ret = -1;
+    elf_word wordval;
+    void *addr;
+
+    shdr_table = load_at(fd, ehdr->e_shoff,
+                         sizeof(struct elf_shdr) * ehdr->e_shnum);
+    if (!shdr_table) {
+        return -1;
+    }
+    if (must_swab) {
+        for (i = 0; i < ehdr->e_shnum; i++) {
+            glue(bswap_shdr, SZ)(&shdr_table[i]);
+        }
+    }
+
+    reltab = glue(find_section, SZ)(shdr_table, ehdr->e_shnum, SHT_RELA);
+    if (!reltab) {
+        goto fail;
+    }
+    rels = load_at(fd, reltab->sh_offset, reltab->sh_size);
+    if (!rels) {
+        goto fail;
+    }
+    nrels = reltab->sh_size / sizeof(struct elf_rela);
+
+    for (i = 0; i < nrels; i++) {
+        if (must_swab) {
+            glue(bswap_rela, SZ)(&rels[i]);
+        }
+        if (rels[i].r_offset < ph->p_vaddr ||
+            rels[i].r_offset >= ph->p_vaddr + ph->p_filesz) {
+            continue;
+        }
+        addr = &data[rels[i].r_offset - ph->p_vaddr];
+        switch (elf_machine) {
+        case EM_S390:
+            switch (rels[i].r_info) {
+            case R_390_RELATIVE:
+                wordval = *(elf_word *)addr;
+                if (must_swab) {
+                    bswapSZs(&wordval);
+                }
+                wordval = translate_fn(translate_opaque, wordval);
+                if (must_swab) {
+                    bswapSZs(&wordval);
+                }
+                *(elf_word *)addr = wordval;
+                break;
+            default:
+                fprintf(stderr, "Unsupported relocation type %i!\n",
+                        (int)rels[i].r_info);
+            }
+        }
+    }
+
+    ret = 0;
+fail:
+    g_free(rels);
+    g_free(shdr_table);
+    return ret;
+}
+
 static int glue(load_elf, SZ)(const char *name, int fd,
                               uint64_t (*translate_fn)(void *, uint64_t),
                               void *translate_opaque,
@@ -271,6 +347,8 @@ static int glue(load_elf, SZ)(const char *name, int fd,
                linked at the wrong physical address.  */
             if (translate_fn) {
                 addr = translate_fn(translate_opaque, ph->p_paddr);
+                glue(elf_reloc, SZ)(&ehdr, fd, must_swab,  translate_fn,
+                                    translate_opaque, data, ph, elf_machine);
             } else {
                 addr = ph->p_paddr;
             }
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 19/20] s390/bios: Make the s390-ccw.img relocatable
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (17 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 18/20] elf-loader: Provide the possibility to relocate s390 ELF files Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10  8:38 ` [Qemu-devel] [PULL 20/20] s390-ccw: rebuild BIOS Christian Borntraeger
  2015-03-10 18:01 ` [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Peter Maydell
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Thomas Huth, qemu-devel, Alexander Graf, Christian Borntraeger,
	Jens Freimann, Cornelia Huck, Richard Henderson

From: Thomas Huth <thuth@linux.vnet.ibm.com>

The current bios sits at location 0x7e00000 in the guest RAM
and thus prevents loading of bigger ramdisks. By making the
image relocatable we can move it to the end of the RAM so that
it is getting out of the way.

Signed-off-by: Thomas Huth <thuth@linux.vnet.ibm.com>
Message-Id: <1425895973-15239-3-git-send-email-thuth@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 hw/s390x/ipl.c            | 23 +++++++++++++++++++++--
 pc-bios/s390-ccw/Makefile | 11 ++++++-----
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index b57adbd..ab7fd8a 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -14,6 +14,7 @@
 #include "sysemu/sysemu.h"
 #include "cpu.h"
 #include "elf.h"
+#include "exec/ram_addr.h"
 #include "hw/loader.h"
 #include "hw/sysbus.h"
 #include "hw/s390x/virtio-ccw.h"
@@ -95,6 +96,16 @@ static const VMStateDescription vmstate_ipl = {
      }
 };
 
+static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
+{
+    uint64_t dstaddr = (uint64_t)opaque;
+    /*
+     * Assuming that our s390-ccw.img was linked for starting at address 0,
+     * we can simply add the destination address for the final location
+     */
+    return srcaddr + dstaddr;
+}
+
 static int s390_ipl_init(SysBusDevice *dev)
 {
     S390IPLState *ipl = S390_IPL(dev);
@@ -109,6 +120,8 @@ static int s390_ipl_init(SysBusDevice *dev)
      * even if an external kernel has been defined.
      */
     if (!ipl->kernel || ipl->enforce_bios) {
+        uint64_t fwbase = (MIN(ram_size, 0x80000000U) - 0x200000) & ~0xffffUL;
+
         if (bios_name == NULL) {
             bios_name = ipl->firmware;
         }
@@ -118,9 +131,15 @@ static int s390_ipl_init(SysBusDevice *dev)
             hw_error("could not find stage1 bootloader\n");
         }
 
-        bios_size = load_elf(bios_filename, NULL, NULL, &ipl->bios_start_addr,
+        bios_size = load_elf(bios_filename, bios_translate_addr,
+                             (void *)fwbase, &ipl->bios_start_addr,
                              NULL, NULL, 1, ELF_MACHINE, 0);
-        if (bios_size < 0) {
+
+        if (bios_size > 0) {
+            /* Adjust ELF start address to final location */
+            ipl->bios_start_addr += fwbase;
+        } else {
+            /* Try to load non-ELF file (e.g. s390-zipl.rom) */
             bios_size = load_image_targphys(bios_filename, ZIPL_IMAGE_START,
                                             4096);
             ipl->bios_start_addr = ZIPL_IMAGE_START;
diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index ad55a14..009bb8d 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -9,10 +9,9 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw)
 
 .PHONY : all clean build-all
 
-OBJECTS=main.o bootmap.o sclp-ascii.o virtio.o start.o
-CFLAGS += -fno-stack-protector
-# XXX find a more clever to locate the bootloader
-LDFLAGS += -Wl,-Ttext,0x7e00000,-Tbss,0x7f00000 -nostdlib
+OBJECTS = start.o main.o bootmap.o sclp-ascii.o virtio.o
+CFLAGS += -fPIE -fno-stack-protector -ffreestanding
+LDFLAGS += -Wl,-pie -nostdlib
 
 build-all: s390-ccw.img
 
@@ -20,7 +19,9 @@ s390-ccw.elf: $(OBJECTS)
 	$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"  Building $(TARGET_DIR)$@")
 
 s390-ccw.img: s390-ccw.elf
-	$(call quiet-command,strip $< -o $@,"  Stripping $(TARGET_DIR)$@")
+	$(call quiet-command,strip --strip-unneeded $< -o $@,"  Stripping $(TARGET_DIR)$@")
+
+$(OBJECTS): Makefile
 
 clean:
 	rm -f *.o *.d *.img *.elf *~
-- 
2.3.0

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [Qemu-devel] [PULL 20/20] s390-ccw: rebuild BIOS
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (18 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 19/20] s390/bios: Make the s390-ccw.img relocatable Christian Borntraeger
@ 2015-03-10  8:38 ` Christian Borntraeger
  2015-03-10 18:01 ` [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Peter Maydell
  20 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10  8:38 UTC (permalink / raw)
  To: Peter Maydell
  Cc: qemu-devel, Alexander Graf, Christian Borntraeger, Jens Freimann,
	Cornelia Huck, Richard Henderson

rebuild bios to get latest changes:

s390/bios: Make the s390-ccw.img relocatable
s390-ccw.img: Reinitialize guessing on reboot
s390-ccw.img: Allow bigger ramdisk sizes or offsets

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 pc-bios/s390-ccw.img | Bin 17752 -> 13616 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img
index dbe5a38262cf6f2013154a77e850cda90e0fcaec..3c6b01fc8ef792bde7f84ec4cd9676fe4ed9811f 100644
GIT binary patch
literal 13616
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
IZOPMr0a5Gg8~^|S

literal 17752
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
Yj%Uj6;73;i2F1b|c74-u{$PLfU-*+EUH||9

-- 
2.3.0

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
                   ` (19 preceding siblings ...)
  2015-03-10  8:38 ` [Qemu-devel] [PULL 20/20] s390-ccw: rebuild BIOS Christian Borntraeger
@ 2015-03-10 18:01 ` Peter Maydell
  2015-03-10 22:26   ` Christian Borntraeger
  20 siblings, 1 reply; 28+ messages in thread
From: Peter Maydell @ 2015-03-10 18:01 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Cornelia Huck, Jens Freimann, Richard Henderson, qemu-devel,
	Alexander Graf

On 10 March 2015 at 08:37, Christian Borntraeger <borntraeger@de.ibm.com> wrote:
> Peter,
>
> this pull reuqest contains a header sync to 4.0-rc3. This should cause
> no merge conflicts with other header syncs against 4.0-rc2. So here
> is the s390 pull request.
>
> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
>
>   Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging (2015-03-09 14:04:14 +0000)
>
> are available in the git repository at:
>
>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
>
> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
>
>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)

Unfortunately I see build failures on 32 bit hosts:

/root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
/root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
of different size [-Werror=pointer-to-int-cast]
/root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
/root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
of different size [-Werror=int-to-pointer-cast]

-- PMM

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-10 18:01 ` [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Peter Maydell
@ 2015-03-10 22:26   ` Christian Borntraeger
  2015-03-11  7:57     ` Markus Armbruster
  0 siblings, 1 reply; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-10 22:26 UTC (permalink / raw)
  To: Peter Maydell
  Cc: Thomas Huth, qemu-devel, Alexander Graf, Jens Freimann,
	Cornelia Huck, Richard Henderson

Am 10.03.2015 um 19:01 schrieb Peter Maydell:
> On 10 March 2015 at 08:37, Christian Borntraeger <borntraeger@de.ibm.com> wrote:
>> Peter,
>>
>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
>> no merge conflicts with other header syncs against 4.0-rc2. So here
>> is the s390 pull request.
>>
>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
>>
>>   Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging (2015-03-09 14:04:14 +0000)
>>
>> are available in the git repository at:
>>
>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
>>
>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
>>
>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
> 
> Unfortunately I see build failures on 32 bit hosts:
> 
> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
> of different size [-Werror=pointer-to-int-cast]
> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
> of different size [-Werror=int-to-pointer-cast]
> 

O dear. Seems that every pull request after your vacation is somewhat broken.
I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
such

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index ab7fd8a..6ed18d3 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
 
 static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
 {
-    uint64_t dstaddr = (uint64_t)opaque;
+    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
     /*
      * Assuming that our s390-ccw.img was linked for starting at address 0,
      * we can simply add the destination address for the final location
@@ -132,9 +132,9 @@ static int s390_ipl_init(SysBusDevice *dev)
         }
 
         bios_size = load_elf(bios_filename, bios_translate_addr,
-                             (void *)fwbase, &ipl->bios_start_addr,
-                             NULL, NULL, 1, ELF_MACHINE, 0);
-
+                             (void *) (unsigned long) fwbase,
+                             &ipl->bios_start_addr, NULL, NULL, 1,
+                             ELF_MACHINE, 0);
         if (bios_size > 0) {
             /* Adjust ELF start address to final location */
             ipl->bios_start_addr += fwbase;



Updated pull request will follow.

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-10 22:26   ` Christian Borntraeger
@ 2015-03-11  7:57     ` Markus Armbruster
  2015-03-11  8:08       ` Thomas Huth
  2015-03-11  8:09       ` Christian Borntraeger
  0 siblings, 2 replies; 28+ messages in thread
From: Markus Armbruster @ 2015-03-11  7:57 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, qemu-devel,
	Jens Freimann, Cornelia Huck, Richard Henderson

Christian Borntraeger <borntraeger@de.ibm.com> writes:

> Am 10.03.2015 um 19:01 schrieb Peter Maydell:
>> On 10 March 2015 at 08:37, Christian Borntraeger
>> <borntraeger@de.ibm.com> wrote:
>>> Peter,
>>>
>>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
>>> no merge conflicts with other header syncs against 4.0-rc2. So here
>>> is the s390 pull request.
>>>
>>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
>>>
>>>   Merge remote-tracking branch
>>> remotes/agraf/tags/signed-ppc-for-upstream' into staging
>>> (2015-03-09 14:04:14 +0000)
>>>
>>> are available in the git repository at:
>>>
>>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
>>>
>>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
>>>
>>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
>> 
>> Unfortunately I see build failures on 32 bit hosts:
>> 
>> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
>> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
>> of different size [-Werror=pointer-to-int-cast]
>> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
>> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
>> of different size [-Werror=int-to-pointer-cast]
>> 
>
> O dear. Seems that every pull request after your vacation is somewhat broken.
> I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
> such
>
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index ab7fd8a..6ed18d3 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
>  
>  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
>  {
> -    uint64_t dstaddr = (uint64_t)opaque;
> +    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
>      /*
>       * Assuming that our s390-ccw.img was linked for starting at address 0,
>       * we can simply add the destination address for the final location

Won't this shift the warning from hosts where sizeof(void *) !=
sizeof(uint64_t) to hosts where it's != sizeof(unsigned long)?

What about using uintptr_t instead?

[...]

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-11  7:57     ` Markus Armbruster
@ 2015-03-11  8:08       ` Thomas Huth
  2015-03-11  8:09       ` Christian Borntraeger
  1 sibling, 0 replies; 28+ messages in thread
From: Thomas Huth @ 2015-03-11  8:08 UTC (permalink / raw)
  To: Markus Armbruster
  Cc: Peter Maydell, Alexander Graf, qemu-devel, Christian Borntraeger,
	Jens Freimann, Cornelia Huck, Richard Henderson

On Wed, 11 Mar 2015 08:57:34 +0100
Markus Armbruster <armbru@redhat.com> wrote:

> Christian Borntraeger <borntraeger@de.ibm.com> writes:
> 
> > Am 10.03.2015 um 19:01 schrieb Peter Maydell:
> >> On 10 March 2015 at 08:37, Christian Borntraeger
> >> <borntraeger@de.ibm.com> wrote:
> >>> Peter,
> >>>
> >>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
> >>> no merge conflicts with other header syncs against 4.0-rc2. So here
> >>> is the s390 pull request.
> >>>
> >>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
> >>>
> >>>   Merge remote-tracking branch
> >>> remotes/agraf/tags/signed-ppc-for-upstream' into staging
> >>> (2015-03-09 14:04:14 +0000)
> >>>
> >>> are available in the git repository at:
> >>>
> >>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
> >>>
> >>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
> >>>
> >>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
> >> 
> >> Unfortunately I see build failures on 32 bit hosts:
> >> 
> >> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
> >> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
> >> of different size [-Werror=pointer-to-int-cast]
> >> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
> >> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
> >> of different size [-Werror=int-to-pointer-cast]
> >> 
> >
> > O dear. Seems that every pull request after your vacation is somewhat broken.
> > I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
> > such

Oops, sorry, should have tested my patch with -m32 as well :-/
Thanks for fixing, Christian!

> > diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> > index ab7fd8a..6ed18d3 100644
> > --- a/hw/s390x/ipl.c
> > +++ b/hw/s390x/ipl.c
> > @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
> >  
> >  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
> >  {
> > -    uint64_t dstaddr = (uint64_t)opaque;
> > +    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
> >      /*
> >       * Assuming that our s390-ccw.img was linked for starting at address 0,
> >       * we can simply add the destination address for the final location
> 
> Won't this shift the warning from hosts where sizeof(void *) !=
> sizeof(uint64_t) to hosts where it's != sizeof(unsigned long)?
> 
> What about using uintptr_t instead?

uintptr_t sounds also like the better solution to me.

 Thomas

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-11  7:57     ` Markus Armbruster
  2015-03-11  8:08       ` Thomas Huth
@ 2015-03-11  8:09       ` Christian Borntraeger
  2015-03-11  9:00         ` Thomas Huth
  1 sibling, 1 reply; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-11  8:09 UTC (permalink / raw)
  To: Markus Armbruster
  Cc: Peter Maydell, Thomas Huth, Alexander Graf, qemu-devel,
	Jens Freimann, Cornelia Huck, Richard Henderson

Am 11.03.2015 um 08:57 schrieb Markus Armbruster:
> Christian Borntraeger <borntraeger@de.ibm.com> writes:
> 
>> Am 10.03.2015 um 19:01 schrieb Peter Maydell:
>>> On 10 March 2015 at 08:37, Christian Borntraeger
>>> <borntraeger@de.ibm.com> wrote:
>>>> Peter,
>>>>
>>>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
>>>> no merge conflicts with other header syncs against 4.0-rc2. So here
>>>> is the s390 pull request.
>>>>
>>>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
>>>>
>>>>   Merge remote-tracking branch
>>>> remotes/agraf/tags/signed-ppc-for-upstream' into staging
>>>> (2015-03-09 14:04:14 +0000)
>>>>
>>>> are available in the git repository at:
>>>>
>>>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
>>>>
>>>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
>>>>
>>>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
>>>
>>> Unfortunately I see build failures on 32 bit hosts:
>>>
>>> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
>>> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
>>> of different size [-Werror=pointer-to-int-cast]
>>> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
>>> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
>>> of different size [-Werror=int-to-pointer-cast]
>>>
>>
>> O dear. Seems that every pull request after your vacation is somewhat broken.
>> I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
>> such
>>
>> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
>> index ab7fd8a..6ed18d3 100644
>> --- a/hw/s390x/ipl.c
>> +++ b/hw/s390x/ipl.c
>> @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
>>  
>>  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
>>  {
>> -    uint64_t dstaddr = (uint64_t)opaque;
>> +    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
>>      /*
>>       * Assuming that our s390-ccw.img was linked for starting at address 0,
>>       * we can simply add the destination address for the final location
> 
> Won't this shift the warning from hosts where sizeof(void *) !=
> sizeof(uint64_t) to hosts where it's != sizeof(unsigned long)?

Indeed. I was only thinking about Linux, where sizeof(unsigned long) == sizeof(void*).
But Windows has a different model. We have to cover all kind of lp64, llp64 and friends.

> What about using uintptr_t instead?

Should work. Will have a try on Linux 32bit/64bit..no way to test on windows, though :-(

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-11  8:09       ` Christian Borntraeger
@ 2015-03-11  9:00         ` Thomas Huth
  2015-03-11 10:06           ` Christian Borntraeger
  0 siblings, 1 reply; 28+ messages in thread
From: Thomas Huth @ 2015-03-11  9:00 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Markus Armbruster,
	Jens Freimann, Cornelia Huck, Richard Henderson

On Wed, 11 Mar 2015 09:09:21 +0100
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> Am 11.03.2015 um 08:57 schrieb Markus Armbruster:
> > Christian Borntraeger <borntraeger@de.ibm.com> writes:
> > 
> >> Am 10.03.2015 um 19:01 schrieb Peter Maydell:
> >>> On 10 March 2015 at 08:37, Christian Borntraeger
> >>> <borntraeger@de.ibm.com> wrote:
> >>>> Peter,
> >>>>
> >>>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
> >>>> no merge conflicts with other header syncs against 4.0-rc2. So here
> >>>> is the s390 pull request.
> >>>>
> >>>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
> >>>>
> >>>>   Merge remote-tracking branch
> >>>> remotes/agraf/tags/signed-ppc-for-upstream' into staging
> >>>> (2015-03-09 14:04:14 +0000)
> >>>>
> >>>> are available in the git repository at:
> >>>>
> >>>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
> >>>>
> >>>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
> >>>>
> >>>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
> >>>
> >>> Unfortunately I see build failures on 32 bit hosts:
> >>>
> >>> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
> >>> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
> >>> of different size [-Werror=pointer-to-int-cast]
> >>> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
> >>> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
> >>> of different size [-Werror=int-to-pointer-cast]
> >>>
> >>
> >> O dear. Seems that every pull request after your vacation is somewhat broken.
> >> I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
> >> such
> >>
> >> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> >> index ab7fd8a..6ed18d3 100644
> >> --- a/hw/s390x/ipl.c
> >> +++ b/hw/s390x/ipl.c
> >> @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
> >>  
> >>  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
> >>  {
> >> -    uint64_t dstaddr = (uint64_t)opaque;
> >> +    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
> >>      /*
> >>       * Assuming that our s390-ccw.img was linked for starting at address 0,
> >>       * we can simply add the destination address for the final location
> > 
> > Won't this shift the warning from hosts where sizeof(void *) !=
> > sizeof(uint64_t) to hosts where it's != sizeof(unsigned long)?
> 
> Indeed. I was only thinking about Linux, where sizeof(unsigned long) == sizeof(void*).
> But Windows has a different model. We have to cover all kind of lp64, llp64 and friends.
> 
> > What about using uintptr_t instead?
> 
> Should work. Will have a try on Linux 32bit/64bit..no way to test on windows, though :-(

Thinking about this again, I think the really proper solution is rather
this:

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 437c3ea..2eb55ca 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
 
 static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
 {
-    uint64_t dstaddr = (uint64_t)opaque;
+    uint64_t dstaddr = *(uint64_t*)opaque;
     /*
      * Assuming that our s390-ccw.img was linked for starting at address 0,
      * we can simply add the destination address for the final location
@@ -132,7 +132,7 @@ static int s390_ipl_init(SysBusDevice *dev)
         }
 
         bios_size = load_elf(bios_filename, bios_translate_addr,
-                             (void *)fwbase, &ipl->bios_start_addr,
+                             &fwbase, &ipl->bios_start_addr,
                              NULL, NULL, 1, ELF_MACHINE, 0);
 
         if (bios_size > 0) {

Instead of passing the uint64 value in the pointer, let's rather pass a
pointer to that value instead. Then we can also be sure to get the full
64-bit value in bios_translate_addr().

 Thomas

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* Re: [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3
  2015-03-11  9:00         ` Thomas Huth
@ 2015-03-11 10:06           ` Christian Borntraeger
  0 siblings, 0 replies; 28+ messages in thread
From: Christian Borntraeger @ 2015-03-11 10:06 UTC (permalink / raw)
  To: Thomas Huth
  Cc: Peter Maydell, qemu-devel, Alexander Graf, Markus Armbruster,
	Jens Freimann, Cornelia Huck, Richard Henderson

Am 11.03.2015 um 10:00 schrieb Thomas Huth:
> On Wed, 11 Mar 2015 09:09:21 +0100
> Christian Borntraeger <borntraeger@de.ibm.com> wrote:
> 
>> Am 11.03.2015 um 08:57 schrieb Markus Armbruster:
>>> Christian Borntraeger <borntraeger@de.ibm.com> writes:
>>>
>>>> Am 10.03.2015 um 19:01 schrieb Peter Maydell:
>>>>> On 10 March 2015 at 08:37, Christian Borntraeger
>>>>> <borntraeger@de.ibm.com> wrote:
>>>>>> Peter,
>>>>>>
>>>>>> this pull reuqest contains a header sync to 4.0-rc3. This should cause
>>>>>> no merge conflicts with other header syncs against 4.0-rc2. So here
>>>>>> is the s390 pull request.
>>>>>>
>>>>>> The following changes since commit 277263e1b320d759a760ba6c5ea75ec268f929e5:
>>>>>>
>>>>>>   Merge remote-tracking branch
>>>>>> remotes/agraf/tags/signed-ppc-for-upstream' into staging
>>>>>> (2015-03-09 14:04:14 +0000)
>>>>>>
>>>>>> are available in the git repository at:
>>>>>>
>>>>>>   git://github.com/borntraeger/qemu.git tags/s390x-20150310
>>>>>>
>>>>>> for you to fetch changes up to 6342cb1443b37d249a0e2005128ade07a80a97f5:
>>>>>>
>>>>>>   s390-ccw: rebuild BIOS (2015-03-10 09:26:33 +0100)
>>>>>
>>>>> Unfortunately I see build failures on 32 bit hosts:
>>>>>
>>>>> /root/qemu/hw/s390x/ipl.c: In function ‘bios_translate_addr’:
>>>>> /root/qemu/hw/s390x/ipl.c:101:24: error: cast from pointer to integer
>>>>> of different size [-Werror=pointer-to-int-cast]
>>>>> /root/qemu/hw/s390x/ipl.c: In function ‘s390_ipl_init’:
>>>>> /root/qemu/hw/s390x/ipl.c:135:30: error: cast to pointer from integer
>>>>> of different size [-Werror=int-to-pointer-cast]
>>>>>
>>>>
>>>> O dear. Seems that every pull request after your vacation is somewhat broken.
>>>> I fixed up patch 19 (" s390/bios: Make the s390-ccw.img relocatable") as
>>>> such
>>>>
>>>> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
>>>> index ab7fd8a..6ed18d3 100644
>>>> --- a/hw/s390x/ipl.c
>>>> +++ b/hw/s390x/ipl.c
>>>> @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
>>>>  
>>>>  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
>>>>  {
>>>> -    uint64_t dstaddr = (uint64_t)opaque;
>>>> +    uint64_t dstaddr = (uint64_t) (unsigned long) opaque;
>>>>      /*
>>>>       * Assuming that our s390-ccw.img was linked for starting at address 0,
>>>>       * we can simply add the destination address for the final location
>>>
>>> Won't this shift the warning from hosts where sizeof(void *) !=
>>> sizeof(uint64_t) to hosts where it's != sizeof(unsigned long)?
>>
>> Indeed. I was only thinking about Linux, where sizeof(unsigned long) == sizeof(void*).
>> But Windows has a different model. We have to cover all kind of lp64, llp64 and friends.
>>
>>> What about using uintptr_t instead?
>>
>> Should work. Will have a try on Linux 32bit/64bit..no way to test on windows, though :-(
> 
> Thinking about this again, I think the really proper solution is rather
> this:
> 
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 437c3ea..2eb55ca 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -98,7 +98,7 @@ static const VMStateDescription vmstate_ipl = {
>  
>  static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
>  {
> -    uint64_t dstaddr = (uint64_t)opaque;
> +    uint64_t dstaddr = *(uint64_t*)opaque;
>      /*
>       * Assuming that our s390-ccw.img was linked for starting at address 0,
>       * we can simply add the destination address for the final location
> @@ -132,7 +132,7 @@ static int s390_ipl_init(SysBusDevice *dev)
>          }
>  
>          bios_size = load_elf(bios_filename, bios_translate_addr,
> -                             (void *)fwbase, &ipl->bios_start_addr,
> +                             &fwbase, &ipl->bios_start_addr,
>                               NULL, NULL, 1, ELF_MACHINE, 0);
>  
>          if (bios_size > 0) {
> 
> Instead of passing the uint64 value in the pointer, let's rather pass a
> pointer to that value instead. Then we can also be sure to get the full
> 64-bit value in bios_translate_addr().

Yes, thats even better. Will fixup and resend.

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2015-03-11 10:06 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-10  8:37 [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 01/20] synchronize Linux headers to 4.0-rc3 Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 02/20] s390x: introduce defines for SIGP condition codes Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 03/20] s390x/kvm: more details for SIGP handler with one destination vcpu Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 04/20] s390x/kvm: pass the SIGP instruction parameter to the SIGP handler Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 05/20] s390x/kvm: helper to set the SIGP status in SigpInfo Christian Borntraeger
2015-03-10  8:37 ` [Qemu-devel] [PULL 06/20] s390x/kvm: trace all SIGP orders Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 07/20] s390x/kvm: implement handling of new " Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 08/20] s390x/kvm: SIGP START is only applicable when STOPPED Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 09/20] s390x: add function to deliver restart irqs Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 10/20] s390x/kvm: deliver SIGP RESTART directly if stopped Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 11/20] s390x/kvm: enable the new SIGP handling in user space Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 12/20] virtio-s390: s390_virtio_device_init() can't fail, simplify Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 13/20] virtio-s390: Convert to realize() Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 14/20] virtio-ccw: " Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 15/20] s390x/kvm: passing max memory size to accelerator Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 16/20] s390-ccw.img: Allow bigger ramdisk sizes or offsets Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 17/20] s390-ccw.img: Reinitialize guessing on reboot Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 18/20] elf-loader: Provide the possibility to relocate s390 ELF files Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 19/20] s390/bios: Make the s390-ccw.img relocatable Christian Borntraeger
2015-03-10  8:38 ` [Qemu-devel] [PULL 20/20] s390-ccw: rebuild BIOS Christian Borntraeger
2015-03-10 18:01 ` [Qemu-devel] [PULL 00/20] s390x/kvm: Features and fixes for 2.3 Peter Maydell
2015-03-10 22:26   ` Christian Borntraeger
2015-03-11  7:57     ` Markus Armbruster
2015-03-11  8:08       ` Thomas Huth
2015-03-11  8:09       ` Christian Borntraeger
2015-03-11  9:00         ` Thomas Huth
2015-03-11 10:06           ` Christian Borntraeger

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.