* [Qemu-devel] [PULL 00/12] next round of s390x patches
@ 2018-06-19 12:04 Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 01/12] virtio-ccw: clean up notify Cornelia Huck
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Cornelia Huck
The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
are available in the Git repository at:
git://github.com/cohuck/qemu tags/s390x-20180619
for you to fetch changes up to 49b67e9440892179c016a7afd33725a50d995ba6:
Merge tag 'tags/s390x-2018-06-18' into staging (2018-06-18 17:05:39 +0200)
----------------------------------------------------------------
- cleanup in virtio-ccw
- accommodate guests using vfio-ccw without specifying unlimited
prefetch, but actually working fine
- add cpu model for the z14 Model ZR1
- add support for pxelinux.cfg-style network booting to the s390x
firmware
----------------------------------------------------------------
Christian Borntraeger (2):
s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW
s390x/cpumodels: add z14 Model ZR1
Collin Walling (1):
pc-bios/s390-ccw: define loadparm length
Halil Pasic (3):
virtio-ccw: clean up notify
vfio-ccw: add force unlimited prefetch property
vfio-ccw: remove orb.c64 (64 bit data addresses) check
Thomas Huth (6):
roms: Update SLOF submodule to current status
pc-bios/s390-ccw/net: Update code for the latest changes in SLOF
pc-bios/s390-ccw/net: Add support for pxelinux-style config files
pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the
UUID
pc-bios/s390-ccw: Optimize the s390-netboot.img for size
pc-bios/s390-ccw: Update the s390-netboot.img binary
--
2.14.4
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 01/12] virtio-ccw: clean up notify
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 02/12] vfio-ccw: add force unlimited prefetch property Cornelia Huck
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Halil Pasic, Cornelia Huck
From: Halil Pasic <pasic@linux.ibm.com>
Coverity recently started complaining about virtio_ccw_notify(). Turns
out, there is a couple of things that can be cleaned up. Let's clean!
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Fixes: CID 1390619
Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Message-Id: <20180516132757.68558-1-pasic@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/virtio-ccw.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 0a9bec484b..b92a85d0b0 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -1001,10 +1001,15 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector)
SubchDev *sch = ccw_dev->sch;
uint64_t indicators;
- /* queue indicators + secondary indicators */
- if (vector >= VIRTIO_QUEUE_MAX + 64) {
+ if (vector == VIRTIO_NO_VECTOR) {
return;
}
+ /*
+ * vector < VIRTIO_QUEUE_MAX: notification for a virtqueue
+ * vector == VIRTIO_QUEUE_MAX: configuration change notification
+ * bits beyond that are unused and should never be notified for
+ */
+ assert(vector <= VIRTIO_QUEUE_MAX);
if (vector < VIRTIO_QUEUE_MAX) {
if (!dev->indicators) {
@@ -1027,6 +1032,7 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector)
css_adapter_interrupt(CSS_IO_ADAPTER_VIRTIO, dev->thinint_isc);
}
} else {
+ assert(vector < NR_CLASSIC_INDICATOR_BITS);
indicators = address_space_ldq(&address_space_memory,
dev->indicators->addr,
MEMTXATTRS_UNSPECIFIED,
@@ -1040,12 +1046,11 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector)
if (!dev->indicators2) {
return;
}
- vector = 0;
indicators = address_space_ldq(&address_space_memory,
dev->indicators2->addr,
MEMTXATTRS_UNSPECIFIED,
NULL);
- indicators |= 1ULL << vector;
+ indicators |= 1ULL;
address_space_stq(&address_space_memory, dev->indicators2->addr,
indicators, MEMTXATTRS_UNSPECIFIED, NULL);
css_conditional_io_interrupt(sch);
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 02/12] vfio-ccw: add force unlimited prefetch property
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 01/12] virtio-ccw: clean up notify Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 03/12] vfio-ccw: remove orb.c64 (64 bit data addresses) check Cornelia Huck
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Halil Pasic, Cornelia Huck
From: Halil Pasic <pasic@linux.ibm.com>
There is at least one guest (OS) such that although it does not rely on
the guarantees provided by ORB 1 word 9 bit (aka unlimited prefetch, aka
P bit) not being set, it fails to tell this to the machine.
Usually this ain't a big deal, as the original purpose of the P bit is to
allow for performance optimizations. vfio-ccw however can not provide the
guarantees required if the bit is not set.
It is not possible to implement support for the P bit not set without
transitioning to lower level protocols for vfio-ccw. So let's give the
user the opportunity to force setting the P bit, if the user knows this
is safe. For self modifying channel programs forcing the P bit is not
safe. If the P bit is forced for a self modifying channel program things
are expected to break in strange ways.
Let's also avoid warning multiple about P bit not set in the ORB in case
P bit is not told to be forced, and designate the affected vfio-ccw
device.
Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Suggested-by: Dong Jia Shi <bjsdjshi@linux.ibm.com>
Acked-by: Jason J. Herne <jjherne@linux.ibm.com>
Tested-by: Jason J. Herne <jjherne@linux.ibm.com>
Message-Id: <20180524175828.3143-2-pasic@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/css.c | 3 +--
hw/vfio/ccw.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 56c3fa8c89..39ae5bbf7e 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1204,8 +1204,7 @@ static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch)
* Only support prefetch enable mode.
* Only support 64bit addressing idal.
*/
- if (!(orb->ctrl0 & ORB_CTRL0_MASK_PFCH) ||
- !(orb->ctrl0 & ORB_CTRL0_MASK_C64)) {
+ if (!(orb->ctrl0 & ORB_CTRL0_MASK_C64)) {
warn_report("vfio-ccw requires PFCH and C64 flags set");
sch_gen_unit_exception(sch);
css_inject_io_interrupt(sch);
diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c
index 76e4e8c652..351b305e1a 100644
--- a/hw/vfio/ccw.c
+++ b/hw/vfio/ccw.c
@@ -33,8 +33,30 @@ typedef struct VFIOCCWDevice {
uint64_t io_region_offset;
struct ccw_io_region *io_region;
EventNotifier io_notifier;
+ bool force_orb_pfch;
+ bool warned_orb_pfch;
} VFIOCCWDevice;
+static inline void warn_once(bool *warned, const char *fmt, ...)
+{
+ va_list ap;
+
+ if (!warned || *warned) {
+ return;
+ }
+ *warned = true;
+ va_start(ap, fmt);
+ warn_vreport(fmt, ap);
+ va_end(ap);
+}
+
+static inline void warn_once_pfch(VFIOCCWDevice *vcdev, SubchDev *sch,
+ const char *msg)
+{
+ warn_once(&vcdev->warned_orb_pfch, "vfio-ccw (devno %x.%x.%04x): %s",
+ sch->cssid, sch->ssid, sch->devno, msg);
+}
+
static void vfio_ccw_compute_needs_reset(VFIODevice *vdev)
{
vdev->needs_reset = false;
@@ -55,6 +77,18 @@ static IOInstEnding vfio_ccw_handle_request(SubchDev *sch)
struct ccw_io_region *region = vcdev->io_region;
int ret;
+ if (!(sch->orb.ctrl0 & ORB_CTRL0_MASK_PFCH)) {
+ if (!(vcdev->force_orb_pfch)) {
+ warn_once_pfch(vcdev, sch, "requires PFCH flag set");
+ sch_gen_unit_exception(sch);
+ css_inject_io_interrupt(sch);
+ return IOINST_CC_EXPECTED;
+ } else {
+ sch->orb.ctrl0 |= ORB_CTRL0_MASK_PFCH;
+ warn_once_pfch(vcdev, sch, "PFCH flag forced");
+ }
+ }
+
QEMU_BUILD_BUG_ON(sizeof(region->orb_area) != sizeof(ORB));
QEMU_BUILD_BUG_ON(sizeof(region->scsw_area) != sizeof(SCSW));
QEMU_BUILD_BUG_ON(sizeof(region->irb_area) != sizeof(IRB));
@@ -430,6 +464,7 @@ static void vfio_ccw_unrealize(DeviceState *dev, Error **errp)
static Property vfio_ccw_properties[] = {
DEFINE_PROP_STRING("sysfsdev", VFIOCCWDevice, vdev.sysfsdev),
+ DEFINE_PROP_BOOL("force-orb-pfch", VFIOCCWDevice, force_orb_pfch, false),
DEFINE_PROP_END_OF_LIST(),
};
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 03/12] vfio-ccw: remove orb.c64 (64 bit data addresses) check
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 01/12] virtio-ccw: clean up notify Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 02/12] vfio-ccw: add force unlimited prefetch property Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 04/12] s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW Cornelia Huck
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Halil Pasic, Cornelia Huck
From: Halil Pasic <pasic@linux.ibm.com>
The vfio-ccw module does the check too, and there is actually no
technical obstacle for supporting fmt 1 idaws. Let us be ready for the
beautiful day when fmt 1 idaws become supported by the vfio-ccw kernel
module. QEMU does not have to do a thing for that, except not insisting
on this check.
Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Acked-by: Jason J. Herne <jjherne@linux.ibm.com>
Tested-by: Jason J. Herne <jjherne@linux.ibm.com>
Message-Id: <20180524175828.3143-3-pasic@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/css.c | 11 -----------
1 file changed, 11 deletions(-)
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 39ae5bbf7e..5424ea4562 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1199,17 +1199,6 @@ static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch)
assert(orb != NULL);
p->intparm = orb->intparm;
}
-
- /*
- * Only support prefetch enable mode.
- * Only support 64bit addressing idal.
- */
- if (!(orb->ctrl0 & ORB_CTRL0_MASK_C64)) {
- warn_report("vfio-ccw requires PFCH and C64 flags set");
- sch_gen_unit_exception(sch);
- css_inject_io_interrupt(sch);
- return IOINST_CC_EXPECTED;
- }
return s390_ccw_cmd_request(sch);
}
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 04/12] s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (2 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 03/12] vfio-ccw: remove orb.c64 (64 bit data addresses) check Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 05/12] s390x/cpumodels: add z14 Model ZR1 Cornelia Huck
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Cornelia Huck
From: Christian Borntraeger <borntraeger@de.ibm.com>
Right now the IPL device always starts from address 0x10000 (the usual
Linux entry point). To run other guests (e.g. test programs) it is
useful to use the IPL PSW from address 0. We can use the Linux magic
at 0x10008 to decide.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Message-Id: <20180612125933.262679-1-borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
hw/s390x/ipl.c | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 04245b5258..0d67349004 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -29,6 +29,7 @@
#include "exec/exec-all.h"
#define KERN_IMAGE_START 0x010000UL
+#define LINUX_MAGIC_ADDR 0x010008UL
#define KERN_PARM_AREA 0x010480UL
#define INITRD_START 0x800000UL
#define INITRD_PARM_START 0x010408UL
@@ -105,7 +106,9 @@ static uint64_t bios_translate_addr(void *opaque, uint64_t srcaddr)
static void s390_ipl_realize(DeviceState *dev, Error **errp)
{
S390IPLState *ipl = S390_IPL(dev);
- uint64_t pentry = KERN_IMAGE_START;
+ uint32_t *ipl_psw;
+ uint64_t pentry;
+ char *magic;
int kernel_size;
Error *err = NULL;
@@ -157,10 +160,24 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
NULL, 1, EM_S390, 0, 0);
if (kernel_size < 0) {
kernel_size = load_image_targphys(ipl->kernel, 0, ram_size);
- }
- if (kernel_size < 0) {
- error_setg(&err, "could not load kernel '%s'", ipl->kernel);
- goto error;
+ if (kernel_size < 0) {
+ error_setg(&err, "could not load kernel '%s'", ipl->kernel);
+ goto error;
+ }
+ /* if this is Linux use KERN_IMAGE_START */
+ magic = rom_ptr(LINUX_MAGIC_ADDR);
+ if (magic && !memcmp(magic, "S390EP", 6)) {
+ pentry = KERN_IMAGE_START;
+ } else {
+ /* if not Linux load the address of the (short) IPL PSW */
+ ipl_psw = rom_ptr(4);
+ if (ipl_psw) {
+ pentry = be32_to_cpu(*ipl_psw) & 0x7fffffffUL;
+ } else {
+ error_setg(&err, "Could not get IPL PSW");
+ goto error;
+ }
+ }
}
/*
* Is it a Linux kernel (starting at 0x10000)? If yes, we fill in the
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 05/12] s390x/cpumodels: add z14 Model ZR1
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (3 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 04/12] s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: define loadparm length Cornelia Huck
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Cornelia Huck
From: Christian Borntraeger <borntraeger@de.ibm.com>
Introduce the new z14 Model ZR1 cpu model. Mostly identical to z14, only
the cpu type differs (3906 vs. 3907)
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Message-Id: <20180613081819.147178-1-borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
---
target/s390x/cpu_models.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c
index e10035aaa8..cfdbccf46d 100644
--- a/target/s390x/cpu_models.c
+++ b/target/s390x/cpu_models.c
@@ -79,6 +79,7 @@ static S390CPUDef s390_cpu_defs[] = {
CPUDEF_INIT(0x2964, 13, 2, 47, 0x08000000U, "z13.2", "IBM z13 GA2"),
CPUDEF_INIT(0x2965, 13, 2, 47, 0x08000000U, "z13s", "IBM z13s GA1"),
CPUDEF_INIT(0x3906, 14, 1, 47, 0x08000000U, "z14", "IBM z14 GA1"),
+ CPUDEF_INIT(0x3907, 14, 1, 47, 0x08000000U, "z14ZR1", "IBM z14 Model ZR1 GA1"),
};
#define QEMU_MAX_CPU_TYPE 0x2827
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: define loadparm length
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (4 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 05/12] s390x/cpumodels: add z14 Model ZR1 Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 07/12] roms: Update SLOF submodule to current status Cornelia Huck
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel,
Collin Walling
From: Collin Walling <walling@linux.ibm.com>
Loadparm is defined by the s390 architecture to be 8 bytes
in length. Let's define this size in the s390-ccw bios.
Suggested-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Collin Walling <walling@linux.ibm.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-ccw/iplb.h | 4 +++-
pc-bios/s390-ccw/main.c | 8 ++++----
pc-bios/s390-ccw/sclp.c | 2 +-
pc-bios/s390-ccw/sclp.h | 2 +-
4 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h
index ded20c834e..772d5c57c9 100644
--- a/pc-bios/s390-ccw/iplb.h
+++ b/pc-bios/s390-ccw/iplb.h
@@ -12,6 +12,8 @@
#ifndef IPLB_H
#define IPLB_H
+#define LOADPARM_LEN 8
+
struct IplBlockCcw {
uint8_t reserved0[85];
uint8_t ssid;
@@ -61,7 +63,7 @@ struct IplParameterBlock {
uint8_t pbt;
uint8_t flags;
uint16_t reserved01;
- uint8_t loadparm[8];
+ uint8_t loadparm[LOADPARM_LEN];
union {
IplBlockCcw ccw;
IplBlockFcp fcp;
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 26f9adf84a..544851d672 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -15,7 +15,7 @@
char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
static SubChannelId blk_schid = { .one = 1 };
IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
-static char loadparm_str[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+static char loadparm_str[LOADPARM_LEN + 1] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
QemuIplParameters qipl;
#define LOADPARM_PROMPT "PROMPT "
@@ -80,13 +80,13 @@ static bool find_dev(Schib *schib, int dev_no)
static void menu_setup(void)
{
- if (memcmp(loadparm_str, LOADPARM_PROMPT, 8) == 0) {
+ if (memcmp(loadparm_str, LOADPARM_PROMPT, LOADPARM_LEN) == 0) {
menu_set_parms(QIPL_FLAG_BM_OPTS_CMD, 0);
return;
}
/* If loadparm was set to any other value, then do not enable menu */
- if (memcmp(loadparm_str, LOADPARM_EMPTY, 8) != 0) {
+ if (memcmp(loadparm_str, LOADPARM_EMPTY, LOADPARM_LEN) != 0) {
return;
}
@@ -117,7 +117,7 @@ static void virtio_setup(void)
enable_mss_facility();
sclp_get_loadparm_ascii(loadparm_str);
- memcpy(ldp + 10, loadparm_str, 8);
+ memcpy(ldp + 10, loadparm_str, LOADPARM_LEN);
sclp_print(ldp);
memcpy(&qipl, early_qipl, sizeof(QemuIplParameters));
diff --git a/pc-bios/s390-ccw/sclp.c b/pc-bios/s390-ccw/sclp.c
index 3836cb4716..c0223fab0b 100644
--- a/pc-bios/s390-ccw/sclp.c
+++ b/pc-bios/s390-ccw/sclp.c
@@ -114,7 +114,7 @@ void sclp_get_loadparm_ascii(char *loadparm)
memset((char *)_sccb, 0, sizeof(ReadInfo));
sccb->h.length = sizeof(ReadInfo);
if (!sclp_service_call(SCLP_CMDW_READ_SCP_INFO, sccb)) {
- ebcdic_to_ascii((char *) sccb->loadparm, loadparm, 8);
+ ebcdic_to_ascii((char *) sccb->loadparm, loadparm, LOADPARM_LEN);
}
}
diff --git a/pc-bios/s390-ccw/sclp.h b/pc-bios/s390-ccw/sclp.h
index 0dd987ff5d..8450161ba7 100644
--- a/pc-bios/s390-ccw/sclp.h
+++ b/pc-bios/s390-ccw/sclp.h
@@ -56,7 +56,7 @@ typedef struct ReadInfo {
uint16_t rnmax;
uint8_t rnsize;
uint8_t reserved[13];
- uint8_t loadparm[8];
+ uint8_t loadparm[LOADPARM_LEN];
} __attribute__((packed)) ReadInfo;
typedef struct SCCB {
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 07/12] roms: Update SLOF submodule to current status
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (5 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: define loadparm length Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF Cornelia Huck
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
We need the latest version of SLOF's libnet for adding pxelinux.cfg
support in the s390-ccw bios, too.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
roms/SLOF | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/roms/SLOF b/roms/SLOF
index fa981320a1..2317427ce7 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@
-Subproject commit fa981320a1e0968d6fc1b8de319723ff8212b337
+Subproject commit 2317427ce76006723f7ae103a6998ab41dd79c68
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (6 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 07/12] roms: Update SLOF submodule to current status Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw/net: Add support for pxelinux-style config files Cornelia Huck
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
The ip_version information now has to be stored in the filename_ip_t
structure, and there is now a common function called tftp_get_error_info()
which can be used to get the error string for a TFTP error code.
We can also get rid of some superfluous "(char *)" casts now.
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-ccw/netboot.mak | 2 +-
pc-bios/s390-ccw/netmain.c | 86 +++++++++-----------------------------------
2 files changed, 18 insertions(+), 70 deletions(-)
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index 4f64128c6c..a73be367e6 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -34,7 +34,7 @@ STDLIB_OBJS = atoi.o atol.o strtoul.o strtol.o rand.o malloc.o free.o
%.o : $(SLOF_DIR)/lib/libc/stdlib/%.c
$(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
-STDIO_OBJS = sprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \
+STDIO_OBJS = sprintf.o snprintf.o vfprintf.o vsnprintf.o vsprintf.o fprintf.o \
printf.o putc.o puts.o putchar.o stdchnls.o fileno.o
%.o : $(SLOF_DIR)/lib/libc/stdio/%.c
$(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c
index 600024155b..d007fb7a86 100644
--- a/pc-bios/s390-ccw/netmain.c
+++ b/pc-bios/s390-ccw/netmain.c
@@ -47,7 +47,6 @@ IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE)));
static char cfgbuf[2048];
static SubChannelId net_schid = { .one = 1 };
-static int ip_version = 4;
static uint64_t dest_timer;
static uint64_t get_timer_ms(void)
@@ -100,10 +99,10 @@ static int dhcp(struct filename_ip *fn_ip, int retries)
printf("\nGiving up after %d DHCP requests\n", retries);
return -1;
}
- ip_version = 4;
+ fn_ip->ip_version = 4;
rc = dhcpv4(NULL, fn_ip);
if (rc == -1) {
- ip_version = 6;
+ fn_ip->ip_version = 6;
set_ipv6_address(fn_ip->fd, 0);
rc = dhcpv6(NULL, fn_ip);
if (rc == 0) {
@@ -137,8 +136,7 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len)
tftp_err_t tftp_err;
int rc;
- rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err, 1, 1428,
- ip_version);
+ rc = tftp(fnip, buffer, len, DEFAULT_TFTP_RETRIES, &tftp_err);
if (rc < 0) {
/* Make sure that error messages are put into a new line */
@@ -149,61 +147,11 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len)
printf(" TFTP: Received %s (%d KBytes)\n", fnip->filename, rc / 1024);
} else if (rc > 0) {
printf(" TFTP: Received %s (%d Bytes)\n", fnip->filename, rc);
- } else if (rc == -1) {
- puts("unknown TFTP error");
- } else if (rc == -2) {
- printf("TFTP buffer of %d bytes is too small for %s\n",
- len, fnip->filename);
- } else if (rc == -3) {
- printf("file not found: %s\n", fnip->filename);
- } else if (rc == -4) {
- puts("TFTP access violation");
- } else if (rc == -5) {
- puts("illegal TFTP operation");
- } else if (rc == -6) {
- puts("unknown TFTP transfer ID");
- } else if (rc == -7) {
- puts("no such TFTP user");
- } else if (rc == -8) {
- puts("TFTP blocksize negotiation failed");
- } else if (rc == -9) {
- puts("file exceeds maximum TFTP transfer size");
- } else if (rc <= -10 && rc >= -15) {
- const char *icmp_err_str;
- switch (rc) {
- case -ICMP_NET_UNREACHABLE - 10:
- icmp_err_str = "net unreachable";
- break;
- case -ICMP_HOST_UNREACHABLE - 10:
- icmp_err_str = "host unreachable";
- break;
- case -ICMP_PROTOCOL_UNREACHABLE - 10:
- icmp_err_str = "protocol unreachable";
- break;
- case -ICMP_PORT_UNREACHABLE - 10:
- icmp_err_str = "port unreachable";
- break;
- case -ICMP_FRAGMENTATION_NEEDED - 10:
- icmp_err_str = "fragmentation needed and DF set";
- break;
- case -ICMP_SOURCE_ROUTE_FAILED - 10:
- icmp_err_str = "source route failed";
- break;
- default:
- icmp_err_str = " UNKNOWN";
- break;
- }
- printf("ICMP ERROR \"%s\"\n", icmp_err_str);
- } else if (rc == -40) {
- printf("TFTP error occurred after %d bad packets received",
- tftp_err.bad_tftp_packets);
- } else if (rc == -41) {
- printf("TFTP error occurred after missing %d responses",
- tftp_err.no_packets);
- } else if (rc == -42) {
- printf("TFTP error missing block %d, expected block was %d",
- tftp_err.blocks_missed,
- tftp_err.blocks_received);
+ } else {
+ const char *errstr = NULL;
+ int ecode;
+ tftp_get_error_info(fnip, &tftp_err, rc, &errstr, &ecode);
+ printf("TFTP error: %s\n", errstr ? errstr : "unknown error");
}
return rc;
@@ -231,7 +179,7 @@ static int net_init(filename_ip_t *fn_ip)
rc = dhcp(fn_ip, DEFAULT_BOOT_RETRIES);
if (rc >= 0) {
- if (ip_version == 4) {
+ if (fn_ip->ip_version == 4) {
set_ipv4_address(fn_ip->own_ip);
}
} else {
@@ -239,11 +187,11 @@ static int net_init(filename_ip_t *fn_ip)
return -101;
}
- if (ip_version == 4) {
+ if (fn_ip->ip_version == 4) {
printf(" Using IPv4 address: %d.%d.%d.%d\n",
(fn_ip->own_ip >> 24) & 0xFF, (fn_ip->own_ip >> 16) & 0xFF,
(fn_ip->own_ip >> 8) & 0xFF, fn_ip->own_ip & 0xFF);
- } else if (ip_version == 6) {
+ } else if (fn_ip->ip_version == 6) {
char ip6_str[40];
ipv6_to_str(fn_ip->own_ip6.addr, ip6_str);
printf(" Using IPv6 address: %s\n", ip6_str);
@@ -261,17 +209,17 @@ static int net_init(filename_ip_t *fn_ip)
}
printf(" Using TFTP server: ");
- if (ip_version == 4) {
+ if (fn_ip->ip_version == 4) {
printf("%d.%d.%d.%d\n",
(fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) & 0xFF,
(fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF);
- } else if (ip_version == 6) {
+ } else if (fn_ip->ip_version == 6) {
char ip6_str[40];
ipv6_to_str(fn_ip->server_ip6.addr, ip6_str);
printf("%s\n", ip6_str);
}
- if (strlen((char *)fn_ip->filename) > 0) {
+ if (strlen(fn_ip->filename) > 0) {
printf(" Bootfile name: '%s'\n", fn_ip->filename);
}
@@ -280,7 +228,7 @@ static int net_init(filename_ip_t *fn_ip)
static void net_release(filename_ip_t *fn_ip)
{
- if (ip_version == 4) {
+ if (fn_ip->ip_version == 4) {
dhcp_send_release(fn_ip->fd);
}
}
@@ -322,7 +270,7 @@ static int handle_ins_cfg(filename_ip_t *fn_ip, char *cfg, int cfgsize)
return -1;
}
*ptr = 0;
- strncpy((char *)fn_ip->filename, insbuf, sizeof(fn_ip->filename));
+ strncpy(fn_ip->filename, insbuf, sizeof(fn_ip->filename));
destaddr = (char *)atol(ptr + 1);
rc = tftp_load(fn_ip, destaddr, (long)_start - (long)destaddr);
if (rc <= 0) {
@@ -455,7 +403,7 @@ void main(void)
panic("Network initialization failed. Halting.\n");
}
- fnlen = strlen((char *)fn_ip.filename);
+ fnlen = strlen(fn_ip.filename);
if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') {
rc = net_try_direct_tftp_load(&fn_ip);
}
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw/net: Add support for pxelinux-style config files
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (7 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID Cornelia Huck
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
Since it is quite cumbersome to manually create a combined kernel with
initrd image for network booting, we now support loading via pxelinux
configuration files, too. In these files, the kernel, initrd and command
line parameters can be specified seperately, and the firmware then takes
care of glueing everything together in memory after the files have been
downloaded. See this URL for details about the config file layout:
https://www.syslinux.org/wiki/index.php?title=PXELINUX
The user can either specify a config file directly as bootfile via DHCP
(but in this case, the file has to start either with "default" or a "#"
comment so we can distinguish it from binary kernels), or a folder (i.e.
the bootfile name must end with "/") where the firmware should look for
the typical pxelinux.cfg file names, e.g. based on MAC or IP address.
We also support the pxelinux.cfg DHCP options 209 and 210 from RFC 5071.
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-ccw/netboot.mak | 7 ++--
pc-bios/s390-ccw/netmain.c | 86 +++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index a73be367e6..8af0cfd2da 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -25,8 +25,9 @@ CTYPE_OBJS = isdigit.o isxdigit.o toupper.o
%.o : $(SLOF_DIR)/lib/libc/ctype/%.c
$(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
-STRING_OBJS = strcat.o strchr.o strcmp.o strcpy.o strlen.o strncmp.o strncpy.o \
- strstr.o memset.o memcpy.o memmove.o memcmp.o
+STRING_OBJS = strcat.o strchr.o strrchr.o strcpy.o strlen.o strncpy.o \
+ strcmp.o strncmp.o strcasecmp.o strncasecmp.o strstr.o \
+ memset.o memcpy.o memmove.o memcmp.o
%.o : $(SLOF_DIR)/lib/libc/string/%.c
$(call quiet-command,$(CC) $(LIBC_CFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
@@ -50,7 +51,7 @@ libc.a: $(LIBCOBJS)
# libnet files:
LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
- dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o
+ dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC)
%.o : $(SLOF_DIR)/lib/libnet/%.c
diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c
index d007fb7a86..c059546480 100644
--- a/pc-bios/s390-ccw/netmain.c
+++ b/pc-bios/s390-ccw/netmain.c
@@ -30,6 +30,7 @@
#include <ipv6.h>
#include <dns.h>
#include <time.h>
+#include <pxelinux.h>
#include "s390-ccw.h"
#include "virtio.h"
@@ -41,12 +42,14 @@ extern char _start[];
#define KERNEL_ADDR ((void *)0L)
#define KERNEL_MAX_SIZE ((long)_start)
+#define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */
char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE)));
IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE)));
static char cfgbuf[2048];
static SubChannelId net_schid = { .one = 1 };
+static uint8_t mac[6];
static uint64_t dest_timer;
static uint64_t get_timer_ms(void)
@@ -159,7 +162,6 @@ static int tftp_load(filename_ip_t *fnip, void *buffer, int len)
static int net_init(filename_ip_t *fn_ip)
{
- uint8_t mac[6];
int rc;
memset(fn_ip, 0, sizeof(filename_ip_t));
@@ -233,6 +235,66 @@ static void net_release(filename_ip_t *fn_ip)
}
}
+/**
+ * Load a kernel with initrd (i.e. with the information that we've got from
+ * a pxelinux.cfg config file)
+ */
+static int load_kernel_with_initrd(filename_ip_t *fn_ip,
+ struct pl_cfg_entry *entry)
+{
+ int rc;
+
+ printf("Loading pxelinux.cfg entry '%s'\n", entry->label);
+
+ if (!entry->kernel) {
+ printf("Kernel entry is missing!\n");
+ return -1;
+ }
+
+ strncpy(fn_ip->filename, entry->kernel, sizeof(fn_ip->filename));
+ rc = tftp_load(fn_ip, KERNEL_ADDR, KERNEL_MAX_SIZE);
+ if (rc < 0) {
+ return rc;
+ }
+
+ if (entry->initrd) {
+ uint64_t iaddr = (rc + 0xfff) & ~0xfffUL;
+
+ strncpy(fn_ip->filename, entry->initrd, sizeof(fn_ip->filename));
+ rc = tftp_load(fn_ip, (void *)iaddr, KERNEL_MAX_SIZE - iaddr);
+ if (rc < 0) {
+ return rc;
+ }
+ /* Patch location and size: */
+ *(uint64_t *)0x10408 = iaddr;
+ *(uint64_t *)0x10410 = rc;
+ rc += iaddr;
+ }
+
+ if (entry->append) {
+ strncpy((char *)0x10480, entry->append, ARCH_COMMAND_LINE_SIZE);
+ }
+
+ return rc;
+}
+
+#define MAX_PXELINUX_ENTRIES 16
+
+static int net_try_pxelinux_cfg(filename_ip_t *fn_ip)
+{
+ struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES];
+ int num_ent, def_ent = 0;
+
+ num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES,
+ cfgbuf, sizeof(cfgbuf),
+ entries, MAX_PXELINUX_ENTRIES, &def_ent);
+ if (num_ent > 0) {
+ return load_kernel_with_initrd(fn_ip, &entries[def_ent]);
+ }
+
+ return -1;
+}
+
/**
* Load via information from a .INS file (which can be found on CD-ROMs
* for example)
@@ -302,6 +364,25 @@ static int net_try_direct_tftp_load(filename_ip_t *fn_ip)
if (!strncmp("* ", cfgbuf, 2)) {
return handle_ins_cfg(fn_ip, cfgbuf, rc);
}
+ /*
+ * pxelinux.cfg support via bootfile name is just here for developers'
+ * convenience (it eases testing with the built-in DHCP server of QEMU
+ * that does not support RFC 5071). The official way to configure a
+ * pxelinux.cfg file name is to use DHCP options 209 and 210 instead.
+ * So only use the pxelinux.cfg parser here for files that start with
+ * a magic comment string.
+ */
+ if (!strncasecmp("# pxelinux", cfgbuf, 10)) {
+ struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES];
+ int num_ent, def_ent = 0;
+
+ num_ent = pxelinux_parse_cfg(cfgbuf, sizeof(cfgbuf), entries,
+ MAX_PXELINUX_ENTRIES, &def_ent);
+ if (num_ent <= 0) {
+ return -1;
+ }
+ return load_kernel_with_initrd(fn_ip, &entries[def_ent]);
+ }
}
/* Move kernel to right location */
@@ -407,6 +488,9 @@ void main(void)
if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') {
rc = net_try_direct_tftp_load(&fn_ip);
}
+ if (rc <= 0) {
+ rc = net_try_pxelinux_cfg(&fn_ip);
+ }
net_release(&fn_ip);
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (8 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw/net: Add support for pxelinux-style config files Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw: Optimize the s390-netboot.img for size Cornelia Huck
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
With the STSI instruction, we can get the UUID of the current VM instance,
so we can support loading pxelinux config files via UUID in the file name,
too.
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Tested-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-ccw/netmain.c | 56 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c
index c059546480..0392131c27 100644
--- a/pc-bios/s390-ccw/netmain.c
+++ b/pc-bios/s390-ccw/netmain.c
@@ -44,6 +44,9 @@ extern char _start[];
#define KERNEL_MAX_SIZE ((long)_start)
#define ARCH_COMMAND_LINE_SIZE 896 /* Taken from Linux kernel */
+/* STSI 3.2.2 offset of first vmdb + offset of uuid inside vmdb */
+#define STSI322_VMDB_UUID_OFFSET ((8 + 12) * 4)
+
char stack[PAGE_SIZE * 8] __attribute__((aligned(PAGE_SIZE)));
IplParameterBlock iplb __attribute__((aligned(PAGE_SIZE)));
static char cfgbuf[2048];
@@ -235,6 +238,56 @@ static void net_release(filename_ip_t *fn_ip)
}
}
+/**
+ * Retrieve the Universally Unique Identifier of the VM.
+ * @return UUID string, or NULL in case of errors
+ */
+static const char *get_uuid(void)
+{
+ register int r0 asm("0");
+ register int r1 asm("1");
+ uint8_t *mem, *buf, uuid[16];
+ int i, cc, chk = 0;
+ static char uuid_str[37];
+
+ mem = malloc(2 * PAGE_SIZE);
+ if (!mem) {
+ puts("Out of memory ... can not get UUID.");
+ return NULL;
+ }
+ buf = (uint8_t *)(((uint64_t)mem + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1));
+ memset(buf, 0, PAGE_SIZE);
+
+ /* Get SYSIB 3.2.2 */
+ r0 = (3 << 28) | 2;
+ r1 = 2;
+ asm volatile(" stsi 0(%[addr])\n"
+ " ipm %[cc]\n"
+ " srl %[cc],28\n"
+ : [cc] "=d" (cc)
+ : "d" (r0), "d" (r1), [addr] "a" (buf)
+ : "cc", "memory");
+ if (cc) {
+ return NULL;
+ }
+
+ for (i = 0; i < 16; i++) {
+ uuid[i] = buf[STSI322_VMDB_UUID_OFFSET + i];
+ chk |= uuid[i];
+ }
+ free(mem);
+ if (!chk) {
+ return NULL;
+ }
+
+ sprintf(uuid_str, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-"
+ "%02x%02x%02x%02x%02x%02x", uuid[0], uuid[1], uuid[2], uuid[3],
+ uuid[4], uuid[5], uuid[6], uuid[7], uuid[8], uuid[9], uuid[10],
+ uuid[11], uuid[12], uuid[13], uuid[14], uuid[15]);
+
+ return uuid_str;
+}
+
/**
* Load a kernel with initrd (i.e. with the information that we've got from
* a pxelinux.cfg config file)
@@ -285,7 +338,8 @@ static int net_try_pxelinux_cfg(filename_ip_t *fn_ip)
struct pl_cfg_entry entries[MAX_PXELINUX_ENTRIES];
int num_ent, def_ent = 0;
- num_ent = pxelinux_load_parse_cfg(fn_ip, mac, NULL, DEFAULT_TFTP_RETRIES,
+ num_ent = pxelinux_load_parse_cfg(fn_ip, mac, get_uuid(),
+ DEFAULT_TFTP_RETRIES,
cfgbuf, sizeof(cfgbuf),
entries, MAX_PXELINUX_ENTRIES, &def_ent);
if (num_ent > 0) {
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw: Optimize the s390-netboot.img for size
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (9 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 12/12] pc-bios/s390-ccw: Update the s390-netboot.img binary Cornelia Huck
2018-06-20 9:52 ` [Qemu-devel] [PULL 00/12] next round of s390x patches Peter Maydell
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
The -O2 optimization flag is passed via CFLAGS to the firmware Makefile,
but in netbook.mak, we've got some rules that only use QEMU_CFLAGS for
compiling the libc and libnet from SLOF, so these files get compiled
without optimization so far. Use CFLAGS here, too, to create faster
and smaller code.
We can additionally save some more bytes in the firmware images by compi-
ling the code with -fno-asynchronous-unwind-tables. This will omit some
ELF sections (used for stack unwinding for example) from the image that
we do not need in the firmware.
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-ccw/Makefile | 1 +
pc-bios/s390-ccw/netboot.mak | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index 439e3cc9c9..1eb316b02f 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -15,6 +15,7 @@ OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \
QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS))
QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -msoft-float
QEMU_CFLAGS += -march=z900 -fPIE -fno-strict-aliasing
+QEMU_CFLAGS += -fno-asynchronous-unwind-tables
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
LDFLAGS += -Wl,-pie -nostdlib
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index 8af0cfd2da..14e96b2aa6 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -19,7 +19,7 @@ s390-netboot.img: s390-netboot.elf
# libc files:
-LIBC_CFLAGS := $(QEMU_CFLAGS) $(LIBC_INC) $(LIBNET_INC)
+LIBC_CFLAGS := $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC)
CTYPE_OBJS = isdigit.o isxdigit.o toupper.o
%.o : $(SLOF_DIR)/lib/libc/ctype/%.c
@@ -52,7 +52,7 @@ libc.a: $(LIBCOBJS)
LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
-LIBNETCFLAGS := $(QEMU_CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC)
+LIBNETCFLAGS := $(QEMU_CFLAGS) $(CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC)
%.o : $(SLOF_DIR)/lib/libnet/%.c
$(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@")
--
2.14.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PULL 12/12] pc-bios/s390-ccw: Update the s390-netboot.img binary
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (10 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw: Optimize the s390-netboot.img for size Cornelia Huck
@ 2018-06-19 12:04 ` Cornelia Huck
2018-06-20 9:52 ` [Qemu-devel] [PULL 00/12] next round of s390x patches Peter Maydell
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2018-06-19 12:04 UTC (permalink / raw)
To: Peter Maydell
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, qemu-devel
From: Thomas Huth <thuth@redhat.com>
This binary now contains the support for pxelinux.cfg-style network
booting.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
pc-bios/s390-netboot.img | Bin 87872 -> 54944 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img
index ef561efd2e222e03138705e9cf30d9e125a7970e..2c6886efb8320ff711589119ffbf077e68ec8784 100644
GIT binary patch
literal 54944
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
literal 87872
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
--
2.14.4
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PULL 00/12] next round of s390x patches
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
` (11 preceding siblings ...)
2018-06-19 12:04 ` [Qemu-devel] [PULL 12/12] pc-bios/s390-ccw: Update the s390-netboot.img binary Cornelia Huck
@ 2018-06-20 9:52 ` Peter Maydell
12 siblings, 0 replies; 14+ messages in thread
From: Peter Maydell @ 2018-06-20 9:52 UTC (permalink / raw)
To: Cornelia Huck
Cc: Christian Borntraeger, Alexander Graf, Richard Henderson,
David Hildenbrand, Thomas Huth, qemu-s390x, QEMU Developers
On 19 June 2018 at 13:04, Cornelia Huck <cohuck@redhat.com> wrote:
> The following changes since commit 2ef2f16781af9dee6ba6517755e9073ba5799fa2:
>
> Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20180615a' into staging (2018-06-15 18:13:35 +0100)
>
> are available in the Git repository at:
>
> git://github.com/cohuck/qemu tags/s390x-20180619
>
> for you to fetch changes up to 49b67e9440892179c016a7afd33725a50d995ba6:
>
> Merge tag 'tags/s390x-2018-06-18' into staging (2018-06-18 17:05:39 +0200)
>
> ----------------------------------------------------------------
> - cleanup in virtio-ccw
> - accommodate guests using vfio-ccw without specifying unlimited
> prefetch, but actually working fine
> - add cpu model for the z14 Model ZR1
> - add support for pxelinux.cfg-style network booting to the s390x
> firmware
>
> ----------------------------------------------------------------
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2018-06-20 9:52 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-06-19 12:04 [Qemu-devel] [PULL 00/12] next round of s390x patches Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 01/12] virtio-ccw: clean up notify Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 02/12] vfio-ccw: add force unlimited prefetch property Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 03/12] vfio-ccw: remove orb.c64 (64 bit data addresses) check Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 04/12] s390x/ipl: Try to detect Linux vs non Linux for initial IPL PSW Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 05/12] s390x/cpumodels: add z14 Model ZR1 Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: define loadparm length Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 07/12] roms: Update SLOF submodule to current status Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw/net: Update code for the latest changes in SLOF Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw/net: Add support for pxelinux-style config files Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw/net: Try to load pxelinux.cfg file accoring to the UUID Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw: Optimize the s390-netboot.img for size Cornelia Huck
2018-06-19 12:04 ` [Qemu-devel] [PULL 12/12] pc-bios/s390-ccw: Update the s390-netboot.img binary Cornelia Huck
2018-06-20 9:52 ` [Qemu-devel] [PULL 00/12] next round of s390x patches Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).