From 8c6cc7b9df36e0ca6f562a46f2afd883b6dc6867 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:15 -0400 Subject: [PATCH 01/14] pc-bios: s390x: cio.c cleanup and compile fix Let's initialize the structs at the beginning to ease reading and also zeroing all other fields. This also makes the compiler stop complaining about sense_id_ccw.flags being ored into when it's not initialized. Signed-off-by: Janosch Frank Reviewed-by: Pierre Morel Reviewed-by: Thomas Huth Reviewed-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Cornelia Huck Message-Id: <20200624075226.92728-2-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/cio.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/pc-bios/s390-ccw/cio.c b/pc-bios/s390-ccw/cio.c index 339ec5fbe7..83ca27ab41 100644 --- a/pc-bios/s390-ccw/cio.c +++ b/pc-bios/s390-ccw/cio.c @@ -49,13 +49,13 @@ void enable_subchannel(SubChannelId schid) uint16_t cu_type(SubChannelId schid) { - Ccw1 sense_id_ccw; SenseId sense_data; - - sense_id_ccw.cmd_code = CCW_CMD_SENSE_ID; - sense_id_ccw.cda = ptr2u32(&sense_data); - sense_id_ccw.count = sizeof(sense_data); - sense_id_ccw.flags |= CCW_FLAG_SLI; + Ccw1 sense_id_ccw = { + .cmd_code = CCW_CMD_SENSE_ID, + .flags = CCW_FLAG_SLI, + .count = sizeof(sense_data), + .cda = ptr2u32(&sense_data), + }; if (do_cio(schid, CU_TYPE_UNKNOWN, ptr2u32(&sense_id_ccw), CCW_FMT1)) { panic("Failed to run SenseID CCw\n"); @@ -67,13 +67,13 @@ uint16_t cu_type(SubChannelId schid) int basic_sense(SubChannelId schid, uint16_t cutype, void *sense_data, uint16_t data_size) { - Ccw1 senseCcw; + Ccw1 senseCcw = { + .cmd_code = CCW_CMD_BASIC_SENSE, + .count = data_size, + .cda = ptr2u32(sense_data), + }; Irb irb; - senseCcw.cmd_code = CCW_CMD_BASIC_SENSE; - senseCcw.cda = ptr2u32(sense_data); - senseCcw.count = data_size; - return __do_cio(schid, ptr2u32(&senseCcw), CCW_FMT1, &irb); } @@ -314,7 +314,17 @@ static void print_irb_err(Irb *irb) */ static int __do_cio(SubChannelId schid, uint32_t ccw_addr, int fmt, Irb *irb) { - CmdOrb orb = {}; + /* + * QEMU's CIO implementation requires prefetch and 64-bit idaws. We + * allow all paths. + */ + CmdOrb orb = { + .fmt = fmt, + .pfch = 1, + .c64 = 1, + .lpm = 0xFF, + .cpa = ccw_addr, + }; int rc; IPL_assert(fmt == 0 || fmt == 1, "Invalid ccw format"); @@ -324,12 +334,6 @@ static int __do_cio(SubChannelId schid, uint32_t ccw_addr, int fmt, Irb *irb) IPL_assert(ccw_addr <= 0xFFFFFF - 8, "Invalid ccw address"); } - orb.fmt = fmt; - orb.pfch = 1; /* QEMU's cio implementation requires prefetch */ - orb.c64 = 1; /* QEMU's cio implementation requires 64-bit idaws */ - orb.lpm = 0xFF; /* All paths allowed */ - orb.cpa = ccw_addr; - rc = ssch(schid, &orb); if (rc == 1 || rc == 2) { /* Subchannel status pending or busy. Eat status and ask for retry. */ From e70bc57ba0c982944cf5b71f293122dbb2b462f4 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:16 -0400 Subject: [PATCH 02/14] pc-bios: s390x: Consolidate timing functions into time.h Let's consolidate timing related functions into one header. Signed-off-by: Janosch Frank Acked-by: Thomas Huth Reviewed-by: David Hildenbrand Message-Id: <20200624075226.92728-3-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/menu.c | 1 + pc-bios/s390-ccw/netmain.c | 15 +++------------ pc-bios/s390-ccw/s390-ccw.h | 8 ++++---- pc-bios/s390-ccw/s390-time.h | 23 +++++++++++++++++++++++ pc-bios/s390-ccw/virtio-net.c | 1 + pc-bios/s390-ccw/virtio-scsi.c | 1 + pc-bios/s390-ccw/virtio.c | 18 +++--------------- 7 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 pc-bios/s390-ccw/s390-time.h diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index ce3815b201..de8260a5d6 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -12,6 +12,7 @@ #include "libc.h" #include "s390-ccw.h" #include "sclp.h" +#include "s390-time.h" #define KEYCODE_NO_INP '\0' #define KEYCODE_ESCAPE '\033' diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 309ffa30d9..f1ee63577a 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -35,6 +35,7 @@ #include "s390-ccw.h" #include "cio.h" #include "virtio.h" +#include "s390-time.h" #define DEFAULT_BOOT_RETRIES 10 #define DEFAULT_TFTP_RETRIES 20 @@ -57,24 +58,14 @@ static SubChannelId net_schid = { .one = 1 }; static uint8_t mac[6]; static uint64_t dest_timer; -static uint64_t get_timer_ms(void) -{ - uint64_t clk; - - asm volatile(" stck %0 " : : "Q"(clk) : "memory"); - - /* Bit 51 is incremented each microsecond */ - return (clk >> (63 - 51)) / 1000; -} - void set_timer(int val) { - dest_timer = get_timer_ms() + val; + dest_timer = get_time_ms() + val; } int get_timer(void) { - return dest_timer - get_timer_ms(); + return dest_timer - get_time_ms(); } int get_sec_ticks(void) diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 21f27e7990..fae1de363f 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -74,8 +74,6 @@ unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2, bool virtio_is_supported(SubChannelId schid); void virtio_blk_setup_device(SubChannelId schid); int virtio_read(ulong sector, void *load_addr); -u64 get_clock(void); -ulong get_second(void); /* bootmap.c */ void zipl_load(void); @@ -153,11 +151,13 @@ static inline void yield(void) #define MAX_SECTOR_SIZE 4096 +#include "s390-time.h" + static inline void sleep(unsigned int seconds) { - ulong target = get_second() + seconds; + ulong target = get_time_seconds() + seconds; - while (get_second() < target) { + while (get_time_seconds() < target) { yield(); } } diff --git a/pc-bios/s390-ccw/s390-time.h b/pc-bios/s390-ccw/s390-time.h new file mode 100644 index 0000000000..ed6d982371 --- /dev/null +++ b/pc-bios/s390-ccw/s390-time.h @@ -0,0 +1,23 @@ +#ifndef TIME_H +#define TIME_H + +static inline u64 get_clock(void) +{ + u64 r; + + asm volatile("stck %0" : "=Q" (r) : : "cc"); + return r; +} + +static inline u64 get_time_ms(void) +{ + /* Bit 51 is incremented each microsecond */ + return (get_clock() >> 12) / 1000; +} + +static inline u64 get_time_seconds(void) +{ + return get_time_ms() / 1000; +} + +#endif diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index ff7f4dad25..a13f3b6fb9 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -19,6 +19,7 @@ #include #include "s390-ccw.h" #include "virtio.h" +#include "s390-time.h" #ifndef DEBUG_VIRTIO_NET #define DEBUG_VIRTIO_NET 0 diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c index 4fe4b9d261..7bf0be4ffa 100644 --- a/pc-bios/s390-ccw/virtio-scsi.c +++ b/pc-bios/s390-ccw/virtio-scsi.c @@ -14,6 +14,7 @@ #include "virtio.h" #include "scsi.h" #include "virtio-scsi.h" +#include "s390-time.h" static ScsiDevice default_scsi_device; static VirtioScsiCmdReq req; diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index fb40ca9828..ab49840db8 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -15,6 +15,7 @@ #include "virtio-scsi.h" #include "bswap.h" #include "helper.h" +#include "s390-time.h" #define VRING_WAIT_REPLY_TIMEOUT 30 @@ -157,19 +158,6 @@ void vring_send_buf(VRing *vr, void *p, int len, int flags) } } -u64 get_clock(void) -{ - u64 r; - - asm volatile("stck %0" : "=Q" (r) : : "cc"); - return r; -} - -ulong get_second(void) -{ - return (get_clock() >> 12) / 1000000; -} - int vr_poll(VRing *vr) { if (vr->used->idx == vr->used_idx) { @@ -194,7 +182,7 @@ int vr_poll(VRing *vr) */ int vring_wait_reply(void) { - ulong target_second = get_second() + vdev.wait_reply_timeout; + ulong target_second = get_time_seconds() + vdev.wait_reply_timeout; /* Wait for any queue to be updated by the host */ do { @@ -207,7 +195,7 @@ int vring_wait_reply(void) if (r) { return 0; } - } while (!vdev.wait_reply_timeout || (get_second() < target_second)); + } while (!vdev.wait_reply_timeout || (get_time_seconds() < target_second)); return 1; } From 12ea90dbd8fc38ca937acb53c730818077bf86fe Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:17 -0400 Subject: [PATCH 03/14] pc-bios: s390x: Move sleep and yield to helper.h They are definitely helper functions. Signed-off-by: Janosch Frank Reviewed-by: Christian Borntraeger Reviewed-by: Thomas Huth Reviewed-by: David Hildenbrand Message-Id: <20200624075226.92728-4-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/helper.h | 17 +++++++++++++++++ pc-bios/s390-ccw/s390-ccw.h | 18 ------------------ pc-bios/s390-ccw/virtio-net.c | 1 + pc-bios/s390-ccw/virtio-scsi.c | 1 + 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/pc-bios/s390-ccw/helper.h b/pc-bios/s390-ccw/helper.h index 78d5bc7442..32a453b634 100644 --- a/pc-bios/s390-ccw/helper.h +++ b/pc-bios/s390-ccw/helper.h @@ -14,6 +14,7 @@ #define S390_CCW_HELPER_H #include "s390-ccw.h" +#include "s390-time.h" /* Avoids compiler warnings when casting a pointer to a u32 */ static inline uint32_t ptr2u32(void *ptr) @@ -28,4 +29,20 @@ static inline void *u32toptr(uint32_t n) return (void *)(uint64_t)n; } +static inline void yield(void) +{ + asm volatile ("diag 0,0,0x44" + : : + : "memory", "cc"); +} + +static inline void sleep(unsigned int seconds) +{ + ulong target = get_time_seconds() + seconds; + + while (get_time_seconds() < target) { + yield(); + } +} + #endif diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index fae1de363f..c5820e43ae 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -142,26 +142,8 @@ static inline void debug_print_addr(const char *desc, void *p) #define KVM_S390_VIRTIO_SET_STATUS 2 #define KVM_S390_VIRTIO_CCW_NOTIFY 3 -static inline void yield(void) -{ - asm volatile ("diag 0,0,0x44" - : : - : "memory", "cc"); -} - #define MAX_SECTOR_SIZE 4096 -#include "s390-time.h" - -static inline void sleep(unsigned int seconds) -{ - ulong target = get_time_seconds() + seconds; - - while (get_time_seconds() < target) { - yield(); - } -} - static inline void IPL_assert(bool term, const char *message) { if (!term) { diff --git a/pc-bios/s390-ccw/virtio-net.c b/pc-bios/s390-ccw/virtio-net.c index a13f3b6fb9..2fcb0a58c5 100644 --- a/pc-bios/s390-ccw/virtio-net.c +++ b/pc-bios/s390-ccw/virtio-net.c @@ -20,6 +20,7 @@ #include "s390-ccw.h" #include "virtio.h" #include "s390-time.h" +#include "helper.h" #ifndef DEBUG_VIRTIO_NET #define DEBUG_VIRTIO_NET 0 diff --git a/pc-bios/s390-ccw/virtio-scsi.c b/pc-bios/s390-ccw/virtio-scsi.c index 7bf0be4ffa..eddfb8a7ad 100644 --- a/pc-bios/s390-ccw/virtio-scsi.c +++ b/pc-bios/s390-ccw/virtio-scsi.c @@ -15,6 +15,7 @@ #include "scsi.h" #include "virtio-scsi.h" #include "s390-time.h" +#include "helper.h" static ScsiDevice default_scsi_device; static VirtioScsiCmdReq req; From e6d393d097ac09c9146772a829fff1bfaf61eb9d Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:18 -0400 Subject: [PATCH 04/14] pc-bios: s390x: Get rid of magic offsets into the lowcore If we have a lowcore struct that has members for offsets that we want to touch, why not use it? Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Reviewed-by: Cornelia Huck Message-Id: <20200624075226.92728-5-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/cio.h | 17 +++++++++++------ pc-bios/s390-ccw/main.c | 8 +++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/pc-bios/s390-ccw/cio.h b/pc-bios/s390-ccw/cio.h index aaa432dedd..1e5d4e92e1 100644 --- a/pc-bios/s390-ccw/cio.h +++ b/pc-bios/s390-ccw/cio.h @@ -122,12 +122,17 @@ typedef struct schib { } __attribute__ ((packed, aligned(4))) Schib; typedef struct subchannel_id { - __u32 cssid:8; - __u32:4; - __u32 m:1; - __u32 ssid:2; - __u32 one:1; - __u32 sch_no:16; + union { + struct { + __u16 cssid:8; + __u16 reserved:4; + __u16 m:1; + __u16 ssid:2; + __u16 one:1; + }; + __u16 sch_id; + }; + __u16 sch_no; } __attribute__ ((packed, aligned(4))) SubChannelId; struct chsc_header { diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 4e65b411e1..8b912454c9 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -36,11 +36,9 @@ LowCore *lowcore; /* Yes, this *is* a pointer to address 0 */ */ void write_subsystem_identification(void) { - SubChannelId *schid = (SubChannelId *) 184; - uint32_t *zeroes = (uint32_t *) 188; - - *schid = blk_schid; - *zeroes = 0; + lowcore->subchannel_id = blk_schid.sch_id; + lowcore->subchannel_nr = blk_schid.sch_no; + lowcore->io_int_parm = 0; } void write_iplb_location(void) From b88faa1c899db2fae8b5b168aeb6c47bef090f27 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:20 -0400 Subject: [PATCH 05/14] pc-bios: s390x: Rename PSW_MASK_ZMODE to PSW_MASK_64 This constant enables 64 bit addressing, not the ESAME architecture, so it shouldn't be named ZMODE. Signed-off-by: Janosch Frank Reviewed-by: Thomas Huth Message-Id: <20200624075226.92728-7-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/s390-arch.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/s390-arch.h b/pc-bios/s390-ccw/s390-arch.h index 5f36361c02..73852029d4 100644 --- a/pc-bios/s390-ccw/s390-arch.h +++ b/pc-bios/s390-ccw/s390-arch.h @@ -29,7 +29,7 @@ _Static_assert(sizeof(struct PSWLegacy) == 8, "PSWLegacy size incorrect"); #define PSW_MASK_WAIT 0x0002000000000000ULL #define PSW_MASK_EAMODE 0x0000000100000000ULL #define PSW_MASK_BAMODE 0x0000000080000000ULL -#define PSW_MASK_ZMODE (PSW_MASK_EAMODE | PSW_MASK_BAMODE) +#define PSW_MASK_64 (PSW_MASK_EAMODE | PSW_MASK_BAMODE) /* Low core mapping */ typedef struct LowCore { From fe75c657b8ee962da79f5d3518b139e26dc69c24 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:21 -0400 Subject: [PATCH 06/14] pc-bios: s390x: Use PSW masks where possible and introduce PSW_MASK_SHORT_ADDR Let's move some of the PSW mask defines into s390-arch.h and use them in jump2ipl.c. Also let's introduce a new constant for the address mask of 8 byte (short) PSWs. Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Message-Id: <20200624075226.92728-8-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/jump2ipl.c | 10 ++++------ pc-bios/s390-ccw/s390-arch.h | 2 ++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pc-bios/s390-ccw/jump2ipl.c b/pc-bios/s390-ccw/jump2ipl.c index 4eba2510b0..767012bf0c 100644 --- a/pc-bios/s390-ccw/jump2ipl.c +++ b/pc-bios/s390-ccw/jump2ipl.c @@ -8,12 +8,10 @@ #include "libc.h" #include "s390-ccw.h" +#include "s390-arch.h" #define KERN_IMAGE_START 0x010000UL -#define PSW_MASK_64 0x0000000100000000ULL -#define PSW_MASK_32 0x0000000080000000ULL -#define PSW_MASK_SHORTPSW 0x0008000000000000ULL -#define RESET_PSW_MASK (PSW_MASK_SHORTPSW | PSW_MASK_32 | PSW_MASK_64) +#define RESET_PSW_MASK (PSW_MASK_SHORTPSW | PSW_MASK_64) typedef struct ResetInfo { uint64_t ipl_psw; @@ -54,7 +52,7 @@ void jump_to_IPL_code(uint64_t address) current->ipl_psw = (uint64_t) &jump_to_IPL_2; current->ipl_psw |= RESET_PSW_MASK; - current->ipl_continue = address & 0x7fffffff; + current->ipl_continue = address & PSW_MASK_SHORT_ADDR; debug_print_int("set IPL addr to", current->ipl_continue); @@ -86,7 +84,7 @@ void jump_to_low_kernel(void) /* Trying to get PSW at zero address */ if (*((uint64_t *)0) & RESET_PSW_MASK) { - jump_to_IPL_code((*((uint64_t *)0)) & 0x7fffffff); + jump_to_IPL_code((*((uint64_t *)0)) & PSW_MASK_SHORT_ADDR); } /* No other option left, so use the Linux kernel start address */ diff --git a/pc-bios/s390-ccw/s390-arch.h b/pc-bios/s390-ccw/s390-arch.h index 73852029d4..6da44d4436 100644 --- a/pc-bios/s390-ccw/s390-arch.h +++ b/pc-bios/s390-ccw/s390-arch.h @@ -26,9 +26,11 @@ _Static_assert(sizeof(struct PSWLegacy) == 8, "PSWLegacy size incorrect"); /* s390 psw bit masks */ #define PSW_MASK_IOINT 0x0200000000000000ULL +#define PSW_MASK_SHORTPSW 0x0008000000000000ULL #define PSW_MASK_WAIT 0x0002000000000000ULL #define PSW_MASK_EAMODE 0x0000000100000000ULL #define PSW_MASK_BAMODE 0x0000000080000000ULL +#define PSW_MASK_SHORT_ADDR 0x000000007fffffffULL #define PSW_MASK_64 (PSW_MASK_EAMODE | PSW_MASK_BAMODE) /* Low core mapping */ From add923b72e76080ca5339a27d58ed13566156935 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:22 -0400 Subject: [PATCH 07/14] pc-bios: s390x: Move panic() into header and add infinite loop panic() was defined for the ccw and net bios, i.e. twice, so it's cleaner to rather put it into the header. Also let's add an infinite loop into the assembly of disabled_wait() so the caller doesn't need to take care of it. Signed-off-by: Janosch Frank Reviewed-by: Pierre Morel Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Message-Id: <20200624075226.92728-9-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/main.c | 7 ------- pc-bios/s390-ccw/netmain.c | 8 -------- pc-bios/s390-ccw/s390-ccw.h | 9 +++++++-- pc-bios/s390-ccw/start.S | 5 +++-- 4 files changed, 10 insertions(+), 19 deletions(-) diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 8b912454c9..146a50760b 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -46,13 +46,6 @@ void write_iplb_location(void) lowcore->ptr_iplb = ptr2u32(&iplb); } -void panic(const char *string) -{ - sclp_print(string); - disabled_wait(); - while (1) { } -} - unsigned int get_loadparm_index(void) { return atoui(loadparm_str); diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index f1ee63577a..056e93a818 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -439,14 +439,6 @@ static int net_try_direct_tftp_load(filename_ip_t *fn_ip) return rc; } -void panic(const char *string) -{ - sclp_print(string); - for (;;) { - disabled_wait(); - } -} - void write_subsystem_identification(void) { SubChannelId *schid = (SubChannelId *) 184; diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index c5820e43ae..36b884cced 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -50,12 +50,11 @@ typedef unsigned long long __u64; #include "iplb.h" /* start.s */ -void disabled_wait(void); +void disabled_wait(void) __attribute__ ((__noreturn__)); void consume_sclp_int(void); void consume_io_int(void); /* main.c */ -void panic(const char *string); void write_subsystem_identification(void); void write_iplb_location(void); extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); @@ -91,6 +90,12 @@ bool menu_is_enabled_enum(void); #define MAX_BOOT_ENTRIES 31 +static inline void panic(const char *string) +{ + sclp_print(string); + disabled_wait(); +} + static inline void fill_hex(char *out, unsigned char val) { const char hex[] = "0123456789abcdef"; diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S index aa8fceb19d..ce519300a1 100644 --- a/pc-bios/s390-ccw/start.S +++ b/pc-bios/s390-ccw/start.S @@ -47,8 +47,9 @@ memsetxc: */ .globl disabled_wait disabled_wait: - larl %r1,disabled_wait_psw - lpswe 0(%r1) + larl %r1,disabled_wait_psw + lpswe 0(%r1) +1: j 1b /* From 78182aea78257edc6b03a167cf7159479aa2ae06 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:23 -0400 Subject: [PATCH 08/14] pc-bios: s390x: Use ebcdic2ascii table Why should we do conversion of a ebcdic value if we have a handy table where we could look up the ascii value instead? Signed-off-by: Janosch Frank Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Message-Id: <20200624075226.92728-10-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/bootmap.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index d13b7cbd15..97205674e5 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -328,9 +328,7 @@ static void print_eckd_ldl_msg(ECKD_IPL_mode_t mode) msg[0] = '2'; break; default: - msg[0] = vlbl->LDL_version; - msg[0] &= 0x0f; /* convert EBCDIC */ - msg[0] |= 0x30; /* to ASCII (digit) */ + msg[0] = ebc2asc[vlbl->LDL_version]; msg[1] = '?'; break; } From 9598c227aaff9f0c2ee7aee5b8013600b71bca15 Mon Sep 17 00:00:00 2001 From: Janosch Frank Date: Wed, 24 Jun 2020 03:52:24 -0400 Subject: [PATCH 09/14] pc-bios: s390x: Make u32 ptr check explicit Let's make it a bit more clear that we check the full 64 bits to fit into the 32 we return. Signed-off-by: Janosch Frank Suggested-by: David Hildenbrand Reviewed-by: David Hildenbrand Reviewed-by: Thomas Huth Message-Id: <20200624075226.92728-11-frankja@linux.ibm.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/helper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/helper.h b/pc-bios/s390-ccw/helper.h index 32a453b634..dfcfea0ff0 100644 --- a/pc-bios/s390-ccw/helper.h +++ b/pc-bios/s390-ccw/helper.h @@ -19,7 +19,7 @@ /* Avoids compiler warnings when casting a pointer to a u32 */ static inline uint32_t ptr2u32(void *ptr) { - IPL_assert((uint64_t)ptr <= 0xffffffff, "ptr2u32: ptr too large"); + IPL_assert((uint64_t)ptr <= 0xffffffffull, "ptr2u32: ptr too large"); return (uint32_t)(uint64_t)ptr; } From 1c9f655066d1defbe083ef06723be919cdfc13dc Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Tue, 30 Jun 2020 16:17:30 +0200 Subject: [PATCH 10/14] pc-bios/s390-ccw: Generate and include dependency files in the Makefile The Makefile of the s390-ccw bios does not handle dependencies of the *.c files from the headers yet, so that you often have to run a "make clean" to get the build right when one of the headers has been changed. Let's make sure that we generate and include dependency files for all *.c files now to avoid this problem in the future. Acked-by: Cornelia Huck Message-Id: <20200630142955.7662-1-thuth@redhat.com> Signed-off-by: Thomas Huth --- pc-bios/s390-ccw/Makefile | 3 +++ pc-bios/s390-ccw/netboot.mak | 13 +++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile index a048b6b077..50bc880272 100644 --- a/pc-bios/s390-ccw/Makefile +++ b/pc-bios/s390-ccw/Makefile @@ -38,5 +38,8 @@ s390-netboot.img: @echo "s390-netboot.img not built since roms/SLOF/ is not available." endif +ALL_OBJS = $(sort $(OBJECTS) $(NETOBJS) $(LIBCOBJS) $(LIBNETOBJS)) +-include $(ALL_OBJS:%.o=%.d) + clean: rm -f *.o *.d *.img *.elf *~ *.a diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak index 5eefb7c289..577c023afe 100644 --- a/pc-bios/s390-ccw/netboot.mak +++ b/pc-bios/s390-ccw/netboot.mak @@ -1,8 +1,7 @@ SLOF_DIR := $(SRC_PATH)/roms/SLOF -NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o \ - libnet.a libc.a +NETOBJS := start.o sclp.o cio.o virtio.o virtio-net.o jump2ipl.o netmain.o LIBC_INC := -nostdinc -I$(SLOF_DIR)/lib/libc/include LIBNET_INC := -I$(SLOF_DIR)/lib/libnet @@ -11,15 +10,16 @@ NETLDFLAGS := $(LDFLAGS) -Ttext=0x7800000 $(NETOBJS): QEMU_CFLAGS += $(LIBC_INC) $(LIBNET_INC) -s390-netboot.elf: $(NETOBJS) - $(call quiet-command,$(CC) $(NETLDFLAGS) -o $@ $(NETOBJS),"BUILD","$(TARGET_DIR)$@") +s390-netboot.elf: $(NETOBJS) libnet.a libc.a + $(call quiet-command,$(CC) $(NETLDFLAGS) -o $@ $^,"BUILD","$(TARGET_DIR)$@") s390-netboot.img: s390-netboot.elf $(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@") # libc files: -LIBC_CFLAGS := $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) +LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ + -MMD -MP -MT $@ -MF $(@:%.o=%.d) CTYPE_OBJS = isdigit.o isxdigit.o toupper.o %.o : $(SLOF_DIR)/lib/libc/ctype/%.c @@ -52,7 +52,8 @@ 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) $(CFLAGS) -DDHCPARCH=0x1F $(LIBC_INC) $(LIBNET_INC) +LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \ + -DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d) %.o : $(SLOF_DIR)/lib/libnet/%.c $(call quiet-command,$(CC) $(LIBNETCFLAGS) -c -o $@ $<,"CC","$(TARGET_DIR)$@") From b71db6b9abb5af302c9669c133d78115c6437c45 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Thu, 2 Jul 2020 11:51:31 +0200 Subject: [PATCH 11/14] pc-bios/s390: Update s390-ccw bios binaries with the latest changes ... to make sure that the binaries match the current state of the sources. Signed-off-by: Thomas Huth --- pc-bios/s390-ccw.img | Bin 42608 -> 42608 bytes pc-bios/s390-netboot.img | Bin 67232 -> 67232 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index b9da9d8ecb10faa484a9a524a202f1f69cb59ad6..3074686a8c7448d943aa62f810d88d3e92865ef3 100644 GIT binary patch literal 42608 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 literal 67232 zcmb<-^>JfjVq|~=W(F|^1_rPIdjrP=sJH`|W@LH*rX3h87&sXm82B0Z7#JAX7#J8> zz~T%H5Oo+d;}3{DjAr0qU|?WI=wq^g$fMH?{19k=|#5*W#K%Qos$fCgHAR`Ek2?mfj$J^UUM%@SAv%TTEtaJB?{sW7h zCRb`^^zm-raeXq>46GD0Jl^9sPl;prKqKtzy%fd|B3UvlUIh-P2_hrbMxI3!*n z=~+{dfq@&Oj=d3{jujXf7)+7Wp8&~2^N&43`~Xy#sRbm5WDYc)GAJ+CZ}<<%?+9^lc(6D8e*v`&Vh%Js z*c<+TKoMVZ2<#5_hX2s~4-0Qdc(6Bu!yBXpVonn{doi##GDv^~;qGZP0CU+JnLy&L|G!#7+P{?JNu-t-ySwz^wKp`(e!GU3^+W(&* zSBMEMjsO22N~^T=|&|NkY5mbWnKf%VvcL{kyo51jxda2la!mz>0D+GXf9mgKVklbP!nD~@q5l6;^$!fo zJp~w`F|r9{OH^0{!v%)r5)4e6YBw-!QetT6Xkd^L>R4XFG+`$TgXd082JhwG|2Hh( z%@DBMl0o3Hzy=0}2~Hv#7{nTv?`B|JZvOwrP8J4rkXdmXggTbDFcmx&_|(rZ;W5Lf zK86X813vYF;_g!qDDFOWgJSkm7sG_d0v{O|R2~a_>IA9$@BOmD75qqG3fiX_cQQ)J>V*!v^%Oyen z{;+{T#Zds1sz7Egm*il0EC5QQJ6Raq4XRjwfBDz)IN_r+Se+ACog-MC1617}usW9IU;Z^55MW@a zbzg3&!0=c=fB~HA9G81PVAv_b-~tM}#{wS(7{IApaR;~rNs=g9?((l?xgG=i@*|8% z%k|j*EmvU(*~!A-1TqB_v$3%t^CR9kifu4i?#aLeilx|KkPkC2PGS%M$3=LhkkaxN zhKb8P8Mwgm&S3d(V4cE3pmJ3Ul)oGkKB_E_WDo%5j^&md3}EwhVL8tC94N;B+2V?E z#cL8ppjc+$UH;{t)=m}%H;@}ar3%=d)$ovQVbBNL{}Ck4R16{&<}Cm6@AFO;21`eU zj~*Zqb8Qe0q%QXph@X_a{LA0_ATdXUj|LzSb14uHq#{!g#7_!Z{^jq!2!&4-pt1ub zq7l3N%Rg{D8Cxv(1pCVfraJ;0Mj01C>XJ;CfB8Ednt~W(wt&P!kMCq+*tEQb;phPY z2F93GlNdHI?Brlb1chJB60ogij}tyhK;kP&#Bsw0#^n|N|4(Juz_7gKf9>N9A0-$R zmoNEW0WxD3H0*WD+To@B1&X<=ka6aDfk%NH+Z048$ zH3J5YRcmMwz zq?du+#Xx~!`Iq05t}}q-KzWqGbJHdPhSv-q7#LKiF@0bIv-H6-T8{-7cQB}c*>0EE z88-+pfY}yc9cf@4|39$22C*PIq#g?}{($N*yu{A<0jfhDtOIPvl)o@L*#Cibs!m~m znZf>#fr)_;Hs}p%iZP?{LF2?wd9b?I>puiQ+G&Z6%YXk*fQCrya!&?^<&q4H%XdQB zU(HgFLlhVoCM=I<;F4fn-U1FK>76VL8=V*z@GbXdUx>|NoDN zrb8A6?bqu+d|+T<|FS%i|NBlw2GQjz|F1npc0 z0R{&F1qNuC3vE(jSkSQm66XJwE?@Qk-*O2CM$v`Kk1$Ar+TtLS61taLGH`&}z)c#C zjt&fu9UK@KCOEq&FgQ7GU|22V7QZo zVe(EEhDFPdFgPvW$^YX(0|P_j2Z*~G7$z|^z|w;Ra(eg|zLSYz=JFN>v7Jl|(xCc( zc?*La$W4ux9F-R^I66Ck{dkE%fx&@)x%mGtj};m?7$z>)`u`K+GEnLMy8puia7qHD z=P&;s?POuty!^}m1E7#ZxHpA$`S1S<*SSBe`LG5Y8jhfpD=}#&3q$ix7KWwERTv(F zN{8ho3~ZqW7dV!yFuY$X$I#HZfk9kkV}!s3mJopt8^ShRU=Z85T;l)#fDIou1T=iu zBC*j?;lmmU$xX%zpmybkjtvYl6560v>v9VQMp5PEM;Pu4?OtBOkOs;Df4@seZZcf} zQYp|Oz#t>Ead`;?_hW~T0SqiVMHsYS_kUCX`2~~`6EZ*|j}<_zuS@(NP6;qvV*PMS zK)_Mq!vaTv59dH>J|S_rCj-YN{tr6?7#~u8#u=5gw0K)=?OAG>x2B5fRTJHY;J~&k!K17^E}*eOh)8bhvd`IrBqAbxxg zSk4m6o&;tagV@RM!0KX`fBDad99PSC{QtlF%YSW9x&noL(i2ddx}$a{3xo12wJaDh@Z`@iKHV7q=l{_vrKL1p>x{~F6J{{NQ{l2CRu_^@P?i2*1Dfy>ot z4Ifr+G6M6#ra%4wN=uN^206bbO`8x>|g7NZTb`OZ1><$V|*=<;CIP(7@NJZQUuewWW5Gub$Ak|rKrO+YEDYg0 zSs1(|G{ENl2lW^vjFz`BsDWCztT9s=J_>?c*b^Qrd=zAuu)KspcDXzQ&+-;lzvY4q zOv_ss6qoN~U|O!iAiF#g+~RTr+rpJrP6UYZ~ z%fYsDEZ1aUel5Wu$iTC+fkEg%0Rux^)nfrrFU~RH!vV($A9F78f6ORgxWxLgq5#z5 zR@=$KAPK7B;tHX8=+Xj2{(iJT;B^Eze}`h^@6ZpI9F0F*0_E=jEcrVw9ps`v`yDrc zd*Iq&-VO=G6iQQ0kOVB0Gpt=a$o|CB71|Nnny1A_#;ToC&T z>;en83yi^iT^6kNUqkl&1qOx*ml!^PW8wm+q=m$UB)FtCTz;E@(NPo>3ll&sOkpsK zQGj9jYzBBq8@mx?_wQdYyMKQLrI1UtaS6>rO=m#pN!{;QSd|>gX)M;Hanoswo&RF*tzAxiA0k zK34dc!7yQB!-p3VLXQnTya44Q!M)23861|E2pTUpWKdXMBAB(@kU?O1i2z8PV|j_d zhvkM0EXzv->XsWaFfK0Rf9 zj^!o%4$Bomy7_*Bb6W}DzU7J_Q}~)EHhg&X*xnH42+J7pm0)PSYGn~m!smx3`fC_nUlB_7!WEi%WPQ8FPryg)L{%`0^NpZ|P|N1hD;CaQjmq3w(G-NBd*J_JhVQAmI;+|MzsXUkhaa zPk8+Q1jYXc22k0wgF%J%=`Z#>*nW8Y{{+SV4?5a^1Z+P%{(q)E7Wl|WzwnQp2(}*{ z|36h93w&f^m}z1MGiz z{Qm&OKN}tGKMJ-V9{)c;@z0KGKd98d#0shdKz->;{2xGNzrqAa+W=JddrSbe4P3yj zv`BEzaz#cEZM0mGp<#Im^CC!VfOR9JHNcujmR~$^`XwEQUxb#c zK>ZSi!!MAQkHAN62_X*yuwPy-Hw3j%Se8NB7%bV#4H=l0m#}C++BwW`$#MI)*Erp7 zO3>{pINT12hlY;=62gxaJ_>+ZOdJ~^AAYR#;xb`X1sd)-4cUu@*vn#cBp= zO|pE3_=;r*S-ui|Ebx(sK@3tqI8OMm!!hB*HQLt`5jR0)#n)?&7d~8ql^0*nKNk3~ zfqr#$1bCF?E2vivZYzE52lqer~28Tfi-2eWNe%x|7%L(8%zMLZa@)icRolFdZ z%S--7!+P?dp1q^PhZi8--*Z7D1Al!dHhcu7aPWLXL?B4!s|L7V1sX92joNxMFgl8W z`U{})_5UwNmkkWy{uHRB1eKVeew6_OLxh{7A+)3fjin-&lqx?{K;wH6rj8~G430tq z44|IZB?be~IPjPMcfs@FkqiuAmq&wol1R3N!flHN_h6v5g{{S5o6vF>hB}aKVRIZ! zvDpSr>xBJ=YFj-X+q}WHIyx&}&@5Ojql z1E`;j@UsI0Lzo_DlpNeo2E`|$pDeuGg~1){3Ry>20|rN70qB^u12jI#u`TpH9@~6D zwuRoqVVfdD1K6J}f0D?u`7jQf4VSAhse^6agxzMatzZ7glVxijZd)Ot8ybtfISsK{P+u+hJS^FZO0d{ zSaMMCP8@y(m4*VKQX+T-_WTO9T>?rAfNdw$?_qfS4hd;j?0yH^MxtLsgmL)QaJdQt zIHW_E@cQ)@)UTJwu|4=C9^1iw4c>v>cCu`1$737Vufb*5ZG-wT21G@E4J(Pxt&nDPr z1m!LZq;`}614F<$9687l)@lpb>uBo0;3y)%09r4F(w{S4jxSAPv&|omZQ!ygzz(}@ zP`|c7Y4A#ifLow`?As&DzxAb1g{HHgpc}xYI|_G z95~HU1-b8|Ky2R!u%2DIX^9TczNQG z;1Kp-hTRop*;awawkA-C>Yq+U+pO@|77Vsc6T5BD5S1p!kA7e9*b2@uevk3l`u+~Y z_V>_ueSZP$3KDaU-yA$S2i)fH>!u**pp{8}@i=S)rR5KxkoNP#UP^%dMkwc?+a`{~ zHc(9mS^>}C$3{Kdd|%%*i z2I93f8)|zrl#Yke;ZWL};CKZneWS&*FEbujfy*YJPuN{WRv1L$u?<}M`+87d8(Qh_ za~)490WST0j^QgM-p+%B>|1DQ@pda{)h9dq>-ir%AnTufKQ90MFT!!chZU2ad|2>! z0%*;o#HQsc4BFEaJ}h)x@L|Dn2}Xv12_Kd?2z*%dcmYU$xe9~rV+ZJ(N-qh}PAW#w zdM!}v?Da$;(B2#W#}1z)KB(Ph0opPzyC)#8GKj};P7FIL%@eclNdfM+{wg{wvz?Cmxg5$D4Zt1!p>vC2GDql zG{hCJtr!d#cy~51ct$8}(0OglV8Fn$JQA|{^wpoo4j&~LSYFSE>>vQS%X1mnKj3{l zo)5rm@cLgr4zPR6mw)+x734mU+N34y|3EoCX~AO!0b_;Zks(4rfn|9KgT&(r3ZV4CpuoT&wtOW6!{ZGTKx>HG z85ZmmV_5Zi6$2v!uY=SC7LfX#A`F7B1sPZvcpq<25MW@DU|q`o@Bd@N4Gf@tf(k4Q zB2ZZakZgdX0mowjbWsOJ1D*&21<>krVW?`*#tIe(LkB(-)dC6v3>+Q?0({G@7#JN4 z1o%KMST4oD7yxp4AZVQ)1NUPEkn24J6qrCV4gv~HU>~wTe9O)bkB5j&tREJD*S@nn z{s3MR58glV`u>LuNdEKL3QAuHRj-v8co=vd3xIPM3q#P(HU`Jn_rbfKSQu1ZD=`Rx z!t}9#f&zH2UC?6z0Valtkpc=FpdCU1AX);n=T(8_F~}z@%QYAn0u%%|9t#8rfcKDq z_LML}S7+mlNk|MfGcdS-^g~pG;{SF12MegXV+p$(wDLDGa3|c|j};auFmUW-VF0at zF5EA_fMNL&1{?5hm>CQVueBN27qeJfsHN!0vj}zXEHE=M<770080jA z*qYKn(>|>bt`XQ+NTrSPP^jZ*9wni{~*s)WL;ez8k z2ZrUh|NnOse83=Fj2rSc6R7foEgnt?GwU;~4s)bb+?A)wt@0RkU(fMW%; zgFX^m61p$9WB~2D*M2+!w4U5y!G}Gd5OG-WVY!3Ahm~M+#X)K6e=;b)xPAnQJedb# zd+q?UXMosV!Ju@)a%lON|NbDp>s_#17l`e-3(Rf-vAyiU>egX#qsspcAfJHU7sLf3U=X>Fp$}vNg%aPz~?`Baf9utTK?tV zJCK~~RIr>Ai0$bBX4`<--@)qAmVf!T55#wE1j~U>I`Cu%vo%2Co{z!mf|h^z7XsqD z=7Qy2?YTH8$kPp z7y<+~2rQ3aU|as>pDXBO45&C0R9t2Gmw%R^oorBXn0m$KU;gPr+F_s)540-}SnkQd26B<*iRCL89F}Xc z{s8f8YN30eWp}bLSTB!cU|R0U3OW-(6J*Nob<3Ci2d!6x@VX&o7HD0}>-isEfXYRX zuU#&K)IM$iu|58S*;OF6rzyw=<|WI&{J#w1yX*(cf%pGv256`+u1yEdTO< zHK*6rN85b4WN<} zyz>Lpt^}z8>-2)|9s<$Y;F{p+|Np=3mw#bk0o8q=^a)mX51b=@L?~fzv0b zJ^-~ZL>RPQ_aoA%$9$0goGq5G0PpI0&(02M4?x{r4BF8IGWFNy#~Z-$vVeinHt?~* z1_cI|#|{e^7$#n2T)^c z2S`g*aiHB1}=Bo<-w#!0{M#fUF8AC%A)4w};O`d$pSdnK{5>(_ioZ@PmQnz!wGv zCN8M^;O%1fnIQKqw_pf||j`UcQ2X0kj)9W-sU@fTi<5HBtkEgw|3u28N~L3=CpI0RjyS67HK!z~{1n`&!HW z7?>p#m$xwJEcg5We|Zao#ze*qpk3(-AX^_-L?|>cfLOnU!Q&n+4B(#aPl@Gv42<9w z8qe}Pus*)W3LDrMCQ7O;Z(-nAzKVfy`LzFsKs7O>d;*=818cWI!x4P05vW}SI^_gZ zb~+|}0H0c*!3sW+VbgLK2BYPAEDXz47$iVt0C?}SlcT``hXV=>3~qlwDbZ0FQu>2R z3s_wx;nd~8zy(qVYTJUwouFu?(I=EP$IkSOeA9FzT^n2x#wE^QkcKzm0; z7(75Z78G0mLxhwhl9szLxI7kEAOP!yFz77T;s>4YWVlm=VH3zqxM?$%ZvVg_-MtfP z2B_Wvn_~bqN8z!-1p&}1S5P{a%6`1T0F;wJIZ@@Yzyb-l4WL|TxZIPu;jsd!cL?&2 zNftB(h%l(ZQUKVut{_+1bXh z5VYg;fB*xdRsCxh1{MaMogAREc?1|3R9>$KCFCT~zyL8ZN?-v4 z=tQu`4qpX8Ey6G0-WSvtpp!0G7+Uwo8-QE_O3|A@b?ovMNIQJ_7Y6R-QVdLwRY0da zNePJtEoI^zof)7Vm<)_UN;}0EoR^pUe<2|(8n|5L|J&si;IqCm zcSddjB()DFJa&Xg&VZRBEq2bIv+AZvRsbg;_?zkI|*rUoUkx}T&xHl zO$7Du7#JovDhPnj>@hp~SRsLdK?PdFi94DvV0v8eVFjo~SirzA0TedI-yaKr*kF|` zj)IUKtKgb}W%(`!Ch$Jt2~rzHcPw}LUnIUm0DLY5D6TPG26hpXgf+;A%dHrgLHmxE z?_ywiEVzJyVM3<>1BZm-V_^_mOvpiCirDfm|F41dFoNQ2rxf@^0U?kpL96h0vM>~a zUEm-9bL&EgTO9=_i-GplLU>Xemw)-c3A;Iv(LXFE)j;$*3Qj^dsTXRJ7=vJh`U0i^ zg-HxxSAhKhwyOrLf(eq>LB5eNT5k3Kzmvg-6;s(itXQtXuokqlA5^Y6DNGW1yc?tj ztTSFh8f4Z^F$QgL+=(#=Ix2zA(3m8uzyJv)usUzB4UC|0gt`F|7YH|4AyiCaoWKTE z#Q`!M$sBbQRm@OTJZP#!P*gEORSBS}Vg&hV`Imox5voyD{QCfv!IL6QYaS~kaKKXJ zzjL6tMo*DO>mYFhRtZm$%fI~F4jnOs^p4>90n$$ewLe^bLfapkVEI3M8K|{v-3UtQ zMom*WHi(*uu>k1I94R3QMbL_$<>vo?E*Av1JEfci z7BEgSUjW{5@3>$A({fEl21mn<3{yd;_OvjtISDLaa9pqevYtl$|Cgx@8=RJxFc?o| z*x^Nbw*d%8pGgeDDf%JpS!D_~0h#6r0U;a;qjbDP} zopJf^-=H?)qUD~9pix5bNpn`<`pmHUzy=0J%P-3%7#SS|Ht0kMYy*vQ7))Z@pa*iB zu=8?H@Cj5#pp;_80unRKb)4{F0jySmv^^OZ48uTXfOrl9A0JI({Iq2f9K!-oMQxPF@joIptc04l?JLMJtl$NVUrdh@L@^BgoObh)ASC5 zWm>^9H^Cyiz#-|sQ-onAv^SyoxM2sVeJZd4LNYL@Ebm|d_qqQYPh#9501A;`*T7^w zDC9uq2=z^6-XZWP{J;3L5fpZ+hC16!5kHP-i3Cb5xSAl(GC#1Ao<^QzheW20f z|BIG)fJcuz0t9x5Ol4T$u)O8}Mo?c36oS?}z_v<)*fvIBwlUbnE&o?KHhfqDJw=ky z27FqhmMged$QB{+0W_X9Zzl_+2edpA+^S);0iRFE3fh|pI%(q_*v}>ZJCX~86RP;U7EP6>at&~u1|ImizFORyZW zLjrsf20VvY$b#g>?2vPag)m4=Xa!~tfwU7r<$~kS<-fm6I2L@^0XokMl-fZpcu?OE z=30;$`dL$%HZUwNVJHWcaOU@~GH+m62IA*CCTswWN2{mpzbK}H#{>ly~_&wjIk=7(sn- zPsm6C1A|`rRE7^bm$xtoO=bA7dwB~3-(!VON1*zrK34d20?M90mEps_b=)OYr z(eg-!21kbtIgSP&wm2$$xdKWpKTdWkFi3PMFi0#{1l9fjjUo&_Y*}svnOgz3>{&o< zX^`5V^`MmXA9O-9Bt@0{ySeW>b%3%>l{zdVuwEVKN}|8>jdKlT--|9QQ_N#NsM2?wY%;Nkewji4g%kV90a~CoW%H*Z4%?x zi<20?UYo@D_3|XfZ@QBhzk>G^|9XpF@|gYtna(>EIGUXmJ=MuN^aqVOhuWFaJP&Yzw&DRLa+T!KZL*eFnK2Di0c&1^Eh`&n-@Ye5Lgml+Txc`3E|0*?PGr8@R^P0iEZX z=xFfy94O{3z;iTO)1aoyZ`) zb7mfX+oW1GPoLBdt#v7<7_fOKbq0!~rse3p5Ju zxNrf3aLXI0YfKp7iqagSkT~P0I`y_@13_F<^IzVSrLRw~^ zH1)dv!wpb*3o2Vdtu5zsVE?j#{Q)^`mxVzCrV4a=?@ks5=)4%RerULW>v>SUXLoV= z@Bg5ADbQ>==rmE#h{|F}tpTz@^Q%PD@-7C}<#nJl*BK@+mt@dbK9j)!yyIPE`3?pR zP(89-i$PKfG)m_UN~7TTO9biGz62UIu}B1sJ6c3IW+s5=i6aCqa6rdw)RuRF&flH@ znt^0=5SRdNQ)|u!g*r&T<~GpG8rVEbaQ~b`Vg<-02PQBuS{OJACNREU1zNeayoDh+ z!r%f6n8y=fAOM=n2c4jAwbZ`>Jifub(=p-04$w)=pqy#V11kGKHfZ;PNH)+aF)Pq| zl;xh_5p6~bur9Vupb<>}^*cpCBjDgU7tl&9(0CD}`3LZL2Mh1R#||GYKrL_ZnCqA2 zk_;ltXEMmZLr4T1LSO#pM>t$y0IxLT32=b85bnCHsD=+)mfC~QqqBINF!ck27_6KD z$M{nQ2Ei-Kzx>|?iNEFkpp)+zxIp1*z9v9H^aE(di~S#TJl2yz0F>rI;bsM1ucs{q zNl748uit}KDY1V6nS^Nn*j|OU_BT&ra9{wXFsHdYSs04IX8hgB!jQ6)g#moWfyNn7 z846Ni*8~bXtr_4Fp#@x{YlFmX!@=S`%e5Imse2Px%pa`lDFcI61BQA>u=*0vxdh-I ziU9+IT_{|A21GrhF321^P;Cot8)(Js zK`lSCPaw0McpN2{vw-9*-+;!L!1A^rzEujC9S-WHg3q>7VR#8@Ia@`5WG%1mWMPn= zs<#2uD>i)W03HKwVPF+TN7< zVaNdGDJ#&3ygI0b@E1Jq{`mul{dwl{FANfpRu==?@;-1WvS}*A3Kq}_8Bm*Rz$!uQ z;3Ev66PVONHgZpREU-d?VFKtB4T+7*TmIh%-QMw98&onwdR(y95~O4VjilOuTmQ!0 z_*KGEihBFOU;|$1U~CNic!c|5Eh6|u|pnRY; zl%ScJrTRY@L=>0WH!w&lFK+>lJ0n(%DZy4>EEiYNsJN_%fI|TwqJMx+wzwG2f(I(Vc>$A44Q$JT7Kj|XeP-TZ0ZV_slR`LO>Oyq z{VL-IrVC8VOa4Cx#kU0yC}mqt0mXva4RD`L@+#v7h6|83!o=k*3>M4f7-T>vxp7U1~Ta0mHr`IrBZAXi(Q1*w3$d@d-zEid_h3>qHppa=t*Y`F)ry5sQ% zQ2hj&OWw)Eu={lkG`j#A{d^n%S`W1oG+$E>uI;{pT@0G9!H@yD50Rd% zK=Y5Fb_VDKY|t3S=H;FY8lZMQ=zM9AUFs(;F??7)felg$f!e7bmhEI>Shc)`ArQQt zo#XKW(AlS;I?OS80TZP4_Sj(qBV@inOk^kM)`Q&)Ogj}AqL-Ka|LExOVG+o*<(A-; z#|8|%uLZ%SItPQ|a&ra+P<{Jah(Q2+POkD!4hEsuieMf{UgH0ManKpb2B3Z~xPDgx z>3uyPQhRy`IDqzDGA;k|{|d-O%fI|T1si7so%{_NHv`S6f<_V?4Gcgd3!v3z>Y&gD z`xdm`R(iQK1K)B@)^|G<8H5}!EYMi4!srEVF;PJW2s)efv48+1Wq`yBAA{ym6qc9#|MprLq~f(QXw45Sri9ve zGBG4AZ(;Zk8tDP2{5r5Z)WK^OrY$dF*bWvg2FZg~KZ0dJ>laEGZta&(lK{8hQkIu6 zfbu&i<$?R*it!+I9H4$sB2*FN4S~|aV}k?*1{Oz!1>l_nYHmnzSn^+CCkto?#{w3HiJ;sG z^4q^iNWY&U)j?r_-tsU1g+O5p3T^W}pi&>?UbSRU3HE<3D5RH{{0E(A?YCUQ*w{hf z!v#=3($V0<9!G@_m%wUymw)-+kHsEU2ZaS%%fI}41S)UfC!ZtSuF0kV(yy@+k{15I zTkgrG0IpY_GBBuuPA>+XEN$+nkO20X>doa6tc(r<36d~Z3cLWVl?0t_?;rs3$-lMW zvgFJETy}QId@88sU*5vd4{4=B+ozzJ^~Dm3%R3kt91A`yUOt0?13crc2pV$*xkwGv zwigl-TyDt#YSC*iZ(#tBQY*`V?mq#w=D?$REervmH2|Fg3<6yO3!?g63Kv zWz+I52Bzim3|10~pi};x6*e$}TVLSO6$ZuSs~MP0{r|!C4}sSG zy=F9k+_eQNe>d-BVORpn&5-gQl&=2Vg^cj~zC!Fidnb*r0)sVF?Af z7cxJwR4xJ365ixspupnfpuh&|yMR_iPx`OGzLSN)6cp}`3JTzKq_WjfVFPHa*bF2J znXdrZq_Prh9{Bzdkbgn_2vF^^+>?RXalr>r3jln+yUJ8YgAL4JQH2j{L1C)Wvs~i; zKTs}q5csefbgD8aWWX}@kHKpIA+7A!>pwDpdf*^?mdgBVfVdsJVnzkzV$jF}C?x+M z0I&5{f%Lc_E`;>9!0TZcO`kyejnLFB^;iL1Q-f+}0oB|Nif> zT$91!wJWGK0a?`v(y6u;(sE(|jc_}_%u{{@4le_64+Y%IQU>4E!@3R}64oGDklBs~ zA2v8DY~TQ&6A13RC|`W+@KFOiYN`EtKcqZlN4kf^Y%Vw!A@?99ymke(R6y|pbJ73* zzgxg5wuB)Nn%f}jU{pb_2fH|CClkY>cR@sAY8Wh-I0iFv2 z&1r&WOF?tapcWD|y?|m46lajM1d26SN&>goRF;4Fe;YpE1{y6}1o8oBeKE)vsz0IO zz6iw^Y6lt^7)|zr?lXD3p+NzBqtgsftb%d{sI36ft1SOmp+Nz%?)rZyXe7fOyl&my z9kk!X-2;*i!8ft6KvQ8P1HqJ<< zD|Q(l3pj9q?xFhs|35fh`3^$Dkbyy#0knDs&EPZyo{#za0Fr-~fBB#ESO6Th zU;aOa<}+~l0v;!V?1cf{IU?|SbpQhc3up)5YerD6aa8!Q0aCKQUJYwWE6o&8LR=t2kn&m|9bhZ|NobFF))I4l>C1Q zo~cw}&|2QYP_}#@1N-t41{F{**yJWGeicFYiGfO(DzG?sP8wvkf(0n<7#hIsHBJUE ziISyd3=DgnFM#&R@Pb_T*x{oCxFw|hx*oLJm;DQ<9(8Q^unD>n090>l>=a=r2bm{- z#&N-iMULVhHaRMQM@y|BV=e#x|9%f{Z#qeATHf;i>T(GN0cp@ErY5K#04mQxx)njA zSYY!&sSmubqvij8Q0o$;0@Ax;U{C~&CvRK6kAZc$%Kr_^_km|t)`0z$2=^~&ZPcda zCI7oX`3oZY|Nrl`5Z_2_0^Lvp^Uoy43H-}?(PX-&8j* z-_HOZ<-Zsc!JRjyNdGI{=|M$qTD#r{q6V$o|uRW0i z@BjJ_+NGfhmMMm;#Rat=BNwP%m}43WLJ(I0l#HEex^C*x-VJw7( z8hAz(I)VjW^UnTdseS{aWDw|Xn5&Ei44}~o1_@OC|NnnC#H}BBrWRDAqM8nyo#0Er zZ35U{(7hCQp!T{r8W?aO*5rT40;Ohl@cm~-Z?f?J3o-U7MQg&4MaAUbAlM+ny|1nU@4%8bm zNu0#};en&VhlgM@XFV2xtlj?b1XNowFffAdqyx`0Ix2j416I=k*}?Ew;KL`-IuFp= z8&Hi3N>PsmKKx=(S?fSKWPE!|m@NIQ77(jcrz&jRR>Ve$*;yNhwKrUl=2HvmO!XOVG#R9Jz z{r?~0CUEZqy21;r>j`+x$`i0HGl=hGVVLc>Wdmq**=V^QgZ1)~ z|BoFFCV<9s!Q%)rOCKkIcCbGdC;;{NSQs=O2M7i*h&Vb3I5-*zC^(9NMxG#dmkLZ? zuJ<3bYUU8c&!0d$k3f5g@;_bx#k=E#2`rBlpypVD>gna$4B-1g<&r>k1gK{Y8XE$I z=4Z|2U;fX7^rg|wVQ1gT#9#zg-NFFcbHixN1LVF&RY=&S^A zT7v9B_yS4|Ad{Vbfz4R}HdzSdg8x@Reg?Y>ysFG-5?GD}EO#6=92C{GYm;Wc0@B05~rx*ihBt{EtS}DjJmJrxF1*G0J%uVPzVnE^Y zBbx*r&LBHj-{IB)$`PPBJkVaI$In1KSpQ}x3wRGLC~ug6a=U|o0uLx892FEmCDKxm z$+Dmok)U>qHb~|*cz-!44ak~;Oahe;CZ8a?J3wg@WC|z;1t4Enf+~ zVH>oDk-<@60}IF`aEf}$z#z*CDx(7gw*CkZ*!pMrZZ?MH%m2Ry^${Gwccd~1LVE|0 z{VkBTGuRcNzAPl4gUWFOMrb=#1T>ZjnlXfpXD(M^+Ph!gfM+KQLknm$6kLwaSYE=o zJVGFWCqTe}2jl|K9iE`l3FNNjk_=pr9TXTCChp{5FagaTE*Jm*bE*FS|F4C?W>|DUN*0C)A!T?!0 zF9um}zO#*i1-yfi=QSe(69ex~4hF{844|EbJ2@E?B$XwEmbWlj?G$4Oe60!=ap&*lo(!O#0Qe4!og56J5L3V_fxta78Su)=zo7ekKsz?U zckD$3B=9^o0PPe4xdb#$0&1TG1VC1V$uNV>V2KF$umvO^5Fh|5j4h5G8CcJ*>g4mPmu;QhY;Iw8BoK&}LhWP$S8zjDwF#qtuyl@SUF z9H7}(2Jrgzoh%H2j~PI_t9G_AIJ|aYU}oTXZ2}Ev=hr6SFyLem4iHG-hy=$OgCuNi z{7x2z0Pq114^O z-boJjc_zpQf9*j2)dS^VC)jP(#ugx%f1r~CK=~HDUe_4BibXnFLIZSvZGb`=4@k{Z z@cjW#c^)qS?d$^e)xe@U@SZSa=25^=YU_{v@}Rwx|389qIi#lnE?e^fd8C#oUj4ZV{m#L0CFLyO%C?u)Bpeff>ykN)=yi3#^FFABK2l@7kKX961sB^ z;`&xBu9aY5aNGde@4rB5xhDf?q*WV~@4=?*eJrqm2ei8mbgR6F!vYCVpYRgHhocKP z9UMOF6LAFRY|xDdEezlljyuH|j6l1N9vd$Z0hbuUqE5?I{(l4Ac@3UZ2bCfs;GU5A z|DQ|k|Nn>1?ldq6??j&K5dzgC;zHoH^d$@|pwhxYV1d-~FMsbsN(u%mPzfO^95Eq5 zVtEUL7bwN-Febl*V9>-@LM;FC_dQB{S%czh`|sDAk>krg6cS&{zx>w#_andjeY;%a z|G(v5{=0(wv;50{N62`i;k^I_0Ul5-^yfLqB*SZu6$E$~#6a!w#}__8&$rQ4T`H%* zASDzk0A2+lCt(Ci74}LU1`ME60qR9eL35IZJDdyzn3r2HGB_9rFieUQU~&N0I1U0} zlUUe6Cmk^wE(M+55fC6C04hC}TQd9y&CT2Wfv5r1Vv@%|wHVZWeUB9c1R(AKyRR)k zK|liR-hME@?y-V^1d@DNfP#PsSiT-CpZ8cnKm;luz`&q$1TuRdp$Mv*BNYNbt2z`A zC;dn$F4y|s;H2fFrOck*LI3AC_RRr1hiD|KLdyl zK4S^YLX!Cpl7aD;OSlSvZbk;xY@l<9CjD37a1c=7axhR}a&l1M370EIm$ z1Q7M8PA;ep-^s$Tf4KyMu&CqmBMjM~Suz9AUe%`k@)JO_DT^Z*3!Fyw}UX627C zWQH<;M^(a>^MOVz7&!OKPv8NK0!V^Xd4pWxQLq4%lf6LotfRpK5m1W+T+b>vKKHRS(`fMz#z zmkWaKfnu07m2Cm%V}S*n;5o?F<#G(*`9yFz)xuy8YO#ZRrM!h8$3=;Wm3J^8yi%f(1;E6&8SRRa+necHw=<88i$<;B$T+TxDD!ae-@j$^W%i z85c-h;8=a{g z0fjWEO#l99`IrBlj}5@`R{!7Z6k#xSR9FCBlPtPs`IrCI5WS#2CaA_S766rn63!sM zEdTO9r&ED}8I;D2`Jn1V7?ePD(sJ+r;6AH_-b953Y~YwE`QHeR4WUi}24*jT1xyYC z1x%o|N=DC?fBA2=TnlWw(@qu!P)kjEsrY};X&Uo)ax#1brP>IE1w0^EgLc`cW)}&0@cR?3sk}JCNfPyywGEx#abBXFBk3*2G?nQpkV zjX~kH5xA|S3~ehZzg7a*^_&bsk|N-f4dQo-F$lfh2o~jF*a)fnBclsIsrojkWxnMs z*frVUnK(62yHpF@!x6UywL}^09Ss(6fKw$L_ zh&_Dl(8dF<<3VF>jCw1RU8JM!*9Qp9E zKm!MZ7`p$!p_T$_d4gIQ5eWVZ&pA4_m-}{SeTI8EB5wQQ^ZLklRK7 zf_4Nf2c6g@$)NW*zyMM^xGuLwsvSh2wS&`64hF~95FQ7EBRJQBaz3c9S^$~{aS-^h z4eU$Mco&lUK;f%94Lo-PZhwH+G_^38f_m*2d%$z4(9_}=Bp*8%fKGsrU|@W#U;x@P zrr@B#paP1?#|8=-;ByNt7eR6bUx8z1<1J!AU&@YL8}E}YC!7*P(`3U z=->YXUb})%K44)0&Au7HW*He6BrL(B-7O5#%RLzkK(>QJ3%p(!6#t+RLa<0CX#5A{ zcTkD|i-5*iL34pD4BD_6Kal?~N!1JLk|DPkB!U0*O^=0`^@JTeF87Giy zprVlW*M$q<)jl9sfJUyx9~*$?qrvsW7Y5G90s;^hfa-Bh@Q5RLPI@N`c+aK^q$PtK zj~7-v7BB#U=6lk8mBR{yrZaA<)PH-ecOrpby?%*TUce+F=1bfdjN&F><*l`^Dv!4B(#p=RQy` z$$b8D4N%V&H23SE(7@rapn(fAdbU#pe7YrQRXpQ)1ITO>`^U!ujiCGiIw#wcLGW<` zsCTp6l0gCN9$8Rc{&^4V9>wJq3<}`YrBDC=e<$)d0i+K+`<%_70G$m1uUtJ3-bec` z8mvoTc?E+BXs!*`jscAjgWRc>0Un?8WMlw^0LZp;&n~fkSOgjE7WxC~Z=AdNSYe_7 z151R!M2_X!3=YuH*ar=bU*Oa7Rxp6hTm;Y72s{PVBH-A1%D^CS4^%IL;zCVNYBMNg z1weC6WYM}M$5eE_&7|gCb7Dxb<+w$N(a2BX6J6i@?jRjh- z{@7rl0)q&sLzIMF*Dd1*L?PB#M@o{J#K7vnt?~qkJbo zryzn%c2t7oHo;`jSn&V<4hjp^_6lEMS+2sE^Vngb3V8LaCP*dNXP~wJl^&q@l3-u} z`4?1{gJl&M7|+y#+#xV6LSP}ZBxeNm4cV5rFlvKZL7){fufsuM_c|0DZjjO(G!F(o zTlT|JP!2WO7NG!|>jIVN0SX&9CNXT_f#gr<7$>+-bH<(b;c|)pKbBYg{{fCeP#ebq zI{&2}Ah6H{7F&-6HgGdcST6PdKlBWsBMe%gRx?;v1^Dc*$DlgVL13W{Bn5!_M4;G* zteuQdSg0T&A|i?HWfrSpB^P@nk7NPn6VQWItF(jlxA^a!(u>xqtCitwHFOLNlsxeHAGFYgvT#A7^ zz+j<*q~h`;49SlLKsf<4J0mHyyyV}y{qhS9mY4inwOr!=cc{C*FaPqte7VH`pHTkK zH5 zlv9>}`RD&wU?H}889e`a8hkhJHzCm2@9EIx9SopzPr+x-zVdjS0Mdt6FN5c3PMd-3 zf7K7x<+8kk!F2hTe}}+n_shR!?ChYD|Fpt#iT~fEg#rW&H6SiBbb++0Ve5B6<(&%X z9Pb3MIiTLENPxgb2T0p%qlSaPMja?y0dfZOMiWr#auC?40-_@v6hi_8Hn4!zIBetq zpWq7W>4DQL_|zvBhRMr4S*L(%ITeP-3L8OZ2@7mA0F~#bV?bq#gTO|$fPjr2j}tb6 zP8NU4z#v=#N@q&obqx}iKxc@X@Pl&Ua?St$LB9TV;qin8(Dey7z~|52nEY4(H0t+Q z0W{+dQuBKgXm=R8=m(HG3(&d48$CinC7}z$tWX63mgO!CtM3`QOf8+Df3{r@ikZoNvFfOh^tSE5NkY<=wt zE(^eAD8yZ`RP*Zz#9WYhptKX9AON1xx&f{~Zs;!m@_#AF?Byl@KY1{0)LG65UMuis zxdj8Wh|zL8P<`?LDJYB-cY?|!2?vOc5L-a*|80z9!9*?1axx$ zMsV!~4N-NFX|mVBrb+I%-)OSDguygIVWR@HcLF+f1iFG_xy1h)0RkH}mTUaK0X7#r zg9|YoR2IN@YDxUR4pny@pE_`;C@?T6rhsf0zqS0!|D%ZZE{Nm8wRC*2E{m79l?_lpzvV{c(m!ja!ZD2m^ilsbR93- z)M)StcNxnq8T8klYw;Hte0N`>^! z7(ni~1f4+!5`6wE{vQJQ5R_6Bu7OMz2hA-*T+j_F4M3;eEdTN!eA>FgCy)xU&q(5+GlHzax~DGx z^8X>21&&Fv2S}>sfW<*OOD@1|JFxuA|C4aus^wphT+#xv5iVD}{LB9>pcWlu{sYuM z1D(9OlZ9dH@)m}s<$nMFEpK7?yWH>p-{ma~cb5D8|FgV>Vcl}S|G$^FFw9x*_x~4Y zr_OS}|38L=AaM9PFfb@YEdTQV4p{LBCP~NbLBux>ga6NsXlj@dB7>GdiFhEXb zKK=_-8!CX;bMb@cHIILU>*-(q<=^Aw5(Z*mJpl$h3}WE%O7QBb<9ES2T|l<+KLok( z_!YR$-sNBZ9RvHt0d#f;C>J2g(f_ zbA%0O>>M;J0xAU^p{Mjh#(F_z!M|`Y8$6OK0onlpngKKf=hz~Un?!y?M+iaZhC|P` zcQn`lI-!F>0bHMpyuwrg)(@T&5V^hl%l`);m&5ZfXx;24$7TianIr)U2@H=DKI{P9 zN&s5_4(%tb6ax9Ibomj6CCjb<|A+cP8#<4j!NA~Xynz9{S_Cx83qIAG!wFoD-vsZ! zXmXsO04i67KsQ)`_OFBbFQ7HIpio$@{U0<_YPgdVe7k`1R0RPB@ch$+|G%5609xGv-GL7}Q3<4i&2hs9#^qoBe+JDiFc>YDV*u@S z)&q^vfb0T=A^TTQU9!A|p%Qdn2k30Qso=9vLFYGucecxc?P3GTfJ}mwee$P4x;d@D z^_(_%1&GQ{MTQy6moP|6rY~Q@0NUHM6SRf_Zqos97?k{Pf~>09$-)3i<+aOiB8}EVa~>tTN^ z@L>l7OF)7E!}2T!#+@Pz*Oq_zzh=2511H>N#o#a~`41X70oNJw;CwB7dij_C)8Q_O z1e8ffkqF6R%H1J%+H{oY{yYPh^Rh%dYt)Ngn#3-<%Za?KA6j~D8{U;yo& z0j;%!=myug96ey0goM&Sy8^K2`T*7inq7qG0-un^Q3%rY|0r13AuPInfOYABQaw_B z1?|uP?WF*X%z#dlO^FcrSh8H||Nj7i4|^U9d<5OyBmmmK`&i&(3j=5`?g`M^Vnq+g zY0;o_jF-1Cf^HoF-!;H)w_JkZjwonubr5I>b2Gly)$-;0EEW!)AjbTNH zFj_q}0I3GGHbC-hcOPH)um?PE=ev`I0d#r>sC5JG8~K;@ZQo%N;M+j^TfsR%7fJ$FE&`My4%RndEV7kmx zNNM>J2G9)(ki96Novq;geUSKYOVFAbTOa_ig z3=N=}0F2Q4vkDaI|8tgi|Np-{{r|h=U;ev;>IYfysds|Ep(~Jr!D8SWeFQ&3#XP}c z`$7H_d=3?}-^m0z@tT2?{U7+QKd5gZ>v)#SGw3WY`TrF>4(0a$JNrM-Xda}83`*Ug zaRAU7I%s=b5Hu?QjJln1w2~_I$IoMvIPT!gyZrO&|Vz| zp~nIWpdC0?42&RKK{iS_f=hEp2GBZi&?;kPkj?OU!-Sno49w7d{;tbQ7(hE!e4%~- zkDOug1Ka=a2vG?}@aYvT;BsFG%>Kf__t-!H?j4tme*vp1`F{i=3JOD*3{rXK0C5>;7Z~`Y zK+x)g5>Rao9pz7!P+UHffpPf_@C?AV<&~iIat!}P6nBb%?r30OV0Q$q&1Q%Kr6>t0 zkZV9O&DI9Cy@g>0Sey?oUIjXn2b7{a7cdBPEnpB>F2TSlx^TG)gC*2ApizF%?I_@~ zo#mLL)Q4@3yCD99jUU2B@Hvb@GlSs$*iufK2@If^#b1Memk0M!7?B|+zge^>$9mGl4qgGG)DHh@w`&~i`k?tM_- zT>!Ku2~>JMc)eVrmBB$^gBj=~KL>#gb|BH`70`KjBS+|d8`j03vRm^CXtV(`YP;N% z0W{;I3E}aA<|@E>hl>faD;IWNI#}NZP#Tqf4lYB$=aKPSqpE_;`yLVjs}KQ~2jF=| z&^Vn8FL>WF3j^5Ku$gEMF{sbeKszx&=?4@Ztj>^?8ITm?A+UhYLEytWMA%$n_^@^X zFUXG%#2gzS;Q|T^Q0#!h2h<(~%f>I4Xa|+kR^YG!pAP~G8wLheIcP|M@85j(7%8N{ zXCkojfqe`*htC2MHp@LB=f^^Lh>+sUMGXV6K51}BrGvu(98!GCP*uUw!A}Oq1_#i% zCFo3^#o(0^2_Ig7=50Z9G_W~5mg9~JA09XwEMNn<6BI%$`=+*U(0DAcK?A(X3v@PV z$MP1&g5`1yZOdC2<{_^Q`d)xIoAkQ@XyzG~?%2a2q0e{*6k7KSU||UgLvUDv=3bxv z|9^kC;u450j%lFv?BI1TypJ6)Lk47y)E>xsl1r=~HVA;`a~D8PL;-~e$X)N&>||n? zw7iAU@v*`NJ%)(^3KKv*X9f+E2!#y>0SXgjAZa8*VS`D4!UP3STF_8?tgt~B)Vc$m z!@t~v!G5Xw{{tc-ko#T4gdp<@%eDW1a1t;8opPw;xM72Z#G>U#7-Ad~J{*|Jh}0WP z2cJY+!r%f5A4h`?pcny%1M}vkGXD=e2DPgjmg<1_dxQ2N8C+%Fz_9@|$EN*S`NILw zol2k*2Iimppi;kRc?*LK$anW`q3s1xFfR$b1FMCBZ@DLfhND6Oc;1s4bPhFm?brQn zkbP#LwUyEfcSylpQLsFun!3HK!ng+E9K{3f3 zgw?#Ji<|QU;Y0R$mfqYfL6qV_LMtr*r4%v1L)MB#|uDx3b0AK;PpT( zkhlY#kO1<}JJ7kgpuO3Oj}1T}0b1t*vLCENWD?T`$^G)%BtU!Q@uw3|igYyiZ~$y3 z^jy9FFTgxbkj~{_{y%nHumO~U*+BIqNIl37rbiJD+a#8If#-TbyCF0|b59_BPbUe;{)D}1WGq9 z5}=d9MV5Oo{1-6+lOmFa?0t_NK<&kyObjmIwxS5=j3H3V3cLLh5ZisgV-;Ks+RIHC zq?TJS{1>qTw_iac7>W#_JDvFn#!QS2=Wtn zeT@i%B66!6bUu#(1LS1B!mw#apSyw~0{Q>{wZ{UW zu?mnY92**-{$F15e?RCHI8ZD=%mc>-)HG=N=>Oor068rPa2)TZSx;{{J6jrlY9=gJY-y1Jn#g0|qC?00!`wE7%N>8j$Iz zCmFSlS|6%_{M-<>lV1ce2`IxHACMU_D-E_Tjj zP!d)W1E+tGPr>U^<}bHkkQ5bOuEM~wTP#OlwfnpTY?*X;wKzo`PzQFDW1@!~O z1i}3PCWc^8&9l6PVdHYp+Sd)Bxg1f)e)nOGUu$CHclkO7-Q^q%pt~h_ z9The(!d$k2aXAMAXcoi>9J?h95^(>OFf>5@)dhAj*k23+V09pqS{MqTDWMsf5*A>j z1W<~T0;hz91XBX&eFNLmhRML^6oddvVC!+dQFGWW3q z$i&wSAk%j?GBCe3ftt$4C$axGh0A$naG_c(a1`yw*z7Bxe z8upmM0OFefDbeLp3@j3X%Q+bMI|3LaL;{wo|NkJSD#0ib*b%_M(ZRqV;G|%{;3Qzc z?8IQe=oDbUv|N*cA95Gh&ISgd#{mwE3=>`}g6snCnB;vN-~h2v=(Q@;MxnwIXXGOd}Z*M0d%hy$Ok(c7!n>UfXxH#kmH5=KmlrA;%gzOd14Urb~Z8y zEoWr-0BQsMuiPod06GbW0dBU-|1043P@qug@{)g_c8V~7&o*L9eyp&7gF#_=2}2F& z+;A`tbiX%f^)_hb_(o9ZgHH2-g#L0D1{-h;xcqls{^dVN6?mMG&Hk~%0s#h<<@(^c zS5V(N1e`iqKxyx>!U6^c70@k#;PeQZ+{a+}Xh3Eny&SxztO50d$W3QZxSl0oDSb z9SBHzms>FKiz=s2l4j&eP z=TO08!K|!Eqs#9>rzo?30nL6uS`$e2fO-y^uj4;}_BuiAftM0kyO-?1Ar82>_KmY@pS=OCV>~fm+j$GwYzMa6sp}Y z#1$BpyD+HkWMKfE|78UV|DEmNv-^cWbBUleV~-U-EMS-bIzQw8V^E*|w=2jD2_ZC7 zmi)i}_(B5%0|%H?0gVwr;uaK+up72PEjcWrHyJ>4`fEV(3J-?_Xlr{iD7Ax27Rb2% z*2fK?67_MxM|Xw^k1u@mVGsek3glkUUMx#+3zCH)8q@;Z*$!UWW(``wyHk+?bQ8hW z!47A z-RA*X7rOk*|CP_wwKW zHtb|#D0&?5;Ra|w*GEtp(8A~l$t8@op!p(5`S{oXvmo z;_@X7-<%9SY?!JFI$_iSv>)iM^8^P5#|@p#9xRt*@CV(-0t&z7_6+&U zTNorjVRAGFH;vB5`K(40ExG*0k{lrv;J7E%H&w`VYrP+s1`Gj$;GKqCYhj|D!0_Ffiz0Iz>wkOB9I zE;tE%WS`3Uk$t%eQ)h(3ha)@17(~D~;IJ^52RM8<;-vV|KtdC06R5t}wv&@#$4*6t z)yt1CfcA|27Xhth-?-d^L0eSBvA}@w@dQxay(N9V1sWJ13xHDSB-IAcs-zbTD&Ta*^4I}% zYoMcp1Jm*^|IS0>1-x_7(LsRYG3bB`(CQM&gI059s7OKbDhg2 z85AJl1_`m9EDTnl&{&?yz_mP*fe{o|khlbe$76*L7a*tj{#gc2%b++hm(T>2$51ff39Cwc}hNrh$PEEVEbF_+K;+r_f{%Rhc-OK1hSC4|*ikkE#tT97M1vAsN#0dyDP z3CP+QSd9MxttXNIyMhz6-i8-+rldAF1%uNqD9wW0`v)WrRku8n0n}6XUH;|YjOFtg za+a6;cL9aHvw{H=DC8Xt449UG`MZ1he1;5gsV~6*8r6fx%ind*3LoVr8GuVix#eH} z7Q$jf`V!bBpwI@@rE1_&uOt79CV|!#g31&YNWBdzU6x-1uYv*X1vHn?T>j;6GbnAM zxuFt#0*(r(f5!_tPZhMX+!=D7BUpw7G>85tfSsNEb|%A2NIUa2wCx9~wb|KU+kXI^ zRt-6`*l4*X10$&YC*=)3*<1ybD0(I8~@PDttKbSOHXfgWIv7-NfJ-UWQC; z=7UXBfvk#w)I!kK$)<<}pxvea|9`%?lZC+=RI~3Cft=tue*st*Xw|_cs2)!SCeS<( zZ#=kv32t%C?}fBPz+;^O2Cg|x)X zoYWMB^30M9h2&&g28I%>qE-q96=`UIivi&Rh}Rhy3QCHMN{x-I6bed;6iV{*6><`b z(o-22k~8xaQc}w@lT#H^i;D7#xEK@^ii`NVopgcgF>`(PHJKiNJK$F!7;fcvn;cu5}`gQwYW4l zRW~3tFC{ZC9i$#?0zv?45<&oKB0>OUM@C{^UTTgm*!)zGDK22Y!v#PtD=jWa%}Ys5 zfx0EQB(bEl7~vAfoK&dGJ@ZOZi*i#_G80R{W(5>w<|YXi)I!hUR6K=(^^C-52dtT3iY8 zhcnb?FmZ_K5M>I{U@guWsma+OwP2oWMRIBZ#4?a;p!yNcVNi$;D9TSSO3c*-+Y0t9 zD4H|#^T6)&%uCKMDoRZ*(e+8qOE1X)nGDwfu?k{FNh&z*b>a3y?a~D$5KK|9ZE&?< zYts^wQz5Q^i#ul|X69w)rNi|rC@3TsB-(;fsDeU4QEFLya&oyX1ITYB8JWcpo@;V; zih@gGaf(84Dk!0XT%e$lmRq7=WTKl?S&~|;X~o5WTa~d9LKVnlh$+tbc`2Eopj2?n zNlY&Wr*G%n6y2cItkh(1+6Mcg3=+AzL8*nMnMIKF1&Tji|I!lOfW)HAl1jL5qFoD1 zGYfK4^GaYs3<}X8*TT38(f(ziY=?-8+=86cl2l!n{M^J$h-g4+QEp-$$P8Cd)`rF! zxD3(_DN0Pv)^*E;mM+{fi;7Eh!9LLS$xjEXcFik;s0t`bEl$mYgfX&RAXN$q zpb{xFr8F@|!8yM)uLKlh3eXf1kWpEz;8K)Xma5?C0+xWub5;ixbmRL0Vv@rRA3Brlf)kl)RE?16}i2>@pU*hNiJl z(+Z06(-jiInMNTwKLunSRK__!FD)~@v?vjr+A{Of@?oasf)(m3WMt}s91n5=R1b)& zrhssJv;oW>3>ib5GDaX7H%OIKlCMxyng_{2o-PW`&gEPT3=B^H8UEWc{Ac+8|2wF@ zV_{%01koV;|Ns9VQ2IZVhVuhl85lzIic1R$@{3ARQxwWFi%Q^C5*Gu5bAD+~ib7s~ zi9&j6i9!;%Vu99I$;g3$t}-n(v81#pwOAo3v!ocwl;YG91zd6%HiQK#pjzUbm17)A~UXX$%Q*SDG6hS3&A5LFQW>*l4F zz^dhx{M2G_06+stp(G%11n6-$;nSnEJ;?#Mg{|y zf&znrLWo;P0Nj=o1=V5&4b>C{Zzpg$%mpgRv8#Y70LelOv{Fzl=3?;4PXsj%6bdR* zb29TvEA*1n(iKwkN{T8K)K!bsxfmF{Q;YIabD(0G#R|EZ#l@L<>55zoeyJtp`9;|Z zN%{FDpeQUV$;?aF)6?T(@C@*Y4~YzLjdykqS4gcWNKGzDO=0lMhb2{{s7eDBkH{$^ zGcU6wGchN#Dpes5YC#IP!NH)Q5DKyxIU=nTR1J(OtZ)&amK3P!NG%3A4V?HuO-N9y zsw^{6!NtQlzzUS@6&N@;I8+UcQy941Gs`mb(iKVz6cW=)Qi~K+Q^3j;ic$+pQ;SQA zxfnodIa2cTQn`@w2q+(T2Efu6C>|hg^$aL8fr(lvsHW(_5IC;jYRr(-6oXt1kpah6 zacWUnYLOKv_MP(cOVToPQWf$Nb5pHgF$9YTc*sGDI!J3+PXW|e1Vs!N0|O{Z6*7wv z$x=Z>HB$jxi7Vvi6DnF5E|s8$b}{bs*whj1w5x7#JD27?`1B7mN%{9Bd%l z{{LrSo=N%L?V67f-^nk}#7#P58NHYvnOQ@zm>nxP2EG@rCLA96x6n@|) z9k^uyYUM!nCnhI@nto-O`8inDOSi$tjNqQ z&4m~MHyWgs!PD6{KmlCVC@85GD?v;K`(GhHIk~i`2o!LzCP`9a3M_rXnyD#xbU@o| zpvFuQbikuswqm+&@al*FVRoWEYUAa%`Me0 z%Fiv<5BBkQ)6dCF0^z*W5`Bc*b-?kcpqdFv88G2^P*W}*9M|#5Y3blTT|Bs?D~d19 z&&f>AECJ_UD+QDmDX3IT%}a^TOU+ErNXjoIpcvFsL{giWQU>yCaVn@J#55U{6Cf2M zBtL-o3=C=@4kMIi@I2<13lad;p#~Ko76Ygn{r~^}qaH~9crb}F`mq9K`f=I+_#DLC zhtP5Ym%67u_|-i%fXJikhxz}>672F%EKtR9x#O`0s=CK}AfXH=p-}`W`#^yYk^$*q zfJOzB0*&W@gy9&ZuKxf3|GdyH1BgG0M?+vV1V%$(Gz3ONU^E0qUI^s>|MwN*YbNlR z1_J|hEeHd12Sl8K4MH<*fY1!E)`JU_&kdy|ptLBIhEePg2J;07&A zBLhQnQ*bhAzF3@r^TjLa1@f>KiyJQ7PF;<|>K3=De3 z8O0?Jpd8K+urI|S?x|t~qU|vRIaR!54N@ZSg zWiEs+DPqtoO3g_G2{Pyv<%5PK!7_=tnaK=#>G>rLdJwUs;$jB9}LfIA%!Y z7)(FZzwq)Elx{#_1C@uBm*Dczj)8%J8DtOxbS{ShUQWZyYgoAqRfba1xG^v=!2AO> zA672IXmGgzCP!AY2YkU#`@)E>lw`U6q^ z!pdQ=@gV<0R3YLYG_RG26#w9GU~l*jwHHQ1@)S%nbl4um1-T;)Lw_Sk3P}{6o}l6g z`#}OZNajK8Zv;6Dq#v3Nl{bOn52O}~q4E%3AxI^J$pEhqz Date: Fri, 19 Jun 2020 21:21:40 -0700 Subject: [PATCH 12/14] target/s390x: Fix SQXBR The output is 128-bit, and thus requires a pair of 64-bit temps. Signed-off-by: Richard Henderson Reviewed-by: David Hildenbrand Buglink: https://bugs.launchpad.net/bugs/1883984 Message-Id: <20200620042140.42070-1-richard.henderson@linaro.org> Signed-off-by: Cornelia Huck --- target/s390x/insn-data.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/s390x/insn-data.def b/target/s390x/insn-data.def index 91ddaedd84..d79ae9e3f1 100644 --- a/target/s390x/insn-data.def +++ b/target/s390x/insn-data.def @@ -798,7 +798,7 @@ /* SQUARE ROOT */ F(0xb314, SQEBR, RRE, Z, 0, e2, new, e1, sqeb, 0, IF_BFP) F(0xb315, SQDBR, RRE, Z, 0, f2, new, f1, sqdb, 0, IF_BFP) - F(0xb316, SQXBR, RRE, Z, x2h, x2l, new, x1, sqxb, 0, IF_BFP) + F(0xb316, SQXBR, RRE, Z, x2h, x2l, new_P, x1, sqxb, 0, IF_BFP) F(0xed14, SQEB, RXE, Z, 0, m2_32u, new, e1, sqeb, 0, IF_BFP) F(0xed15, SQDB, RXE, Z, 0, m2_64, new, f1, sqdb, 0, IF_BFP) From 1a8242f7c3f53341dd66253b142ecd06ce1d2a97 Mon Sep 17 00:00:00 2001 From: Halil Pasic Date: Tue, 16 Jun 2020 06:50:34 +0200 Subject: [PATCH 13/14] virtio-ccw: fix virtio_set_ind_atomic The atomic_cmpxchg() loop is broken because we occasionally end up with old and _old having different values (a legit compiler can generate code that accessed *ind_addr again to pick up a value for _old instead of using the value of old that was already fetched according to the rules of the abstract machine). This means the underlying CS instruction may use a different old (_old) than the one we intended to use if atomic_cmpxchg() performed the xchg part. Let us use volatile to force the rules of the abstract machine for accesses to *ind_addr. Let us also rewrite the loop so, we that the new old is used to compute the new desired value if the xchg part is not performed. Fixes: 7e7494627f ("s390x/virtio-ccw: Adapter interrupt support.") Reported-by: Andre Wild Signed-off-by: Halil Pasic Reviewed-by: Christian Borntraeger Message-Id: <20200616045035.51641-2-pasic@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/virtio-ccw.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c index c1f4bb1d33..3c988a000b 100644 --- a/hw/s390x/virtio-ccw.c +++ b/hw/s390x/virtio-ccw.c @@ -786,9 +786,10 @@ static inline VirtioCcwDevice *to_virtio_ccw_dev_fast(DeviceState *d) static uint8_t virtio_set_ind_atomic(SubchDev *sch, uint64_t ind_loc, uint8_t to_be_set) { - uint8_t ind_old, ind_new; + uint8_t expected, actual; hwaddr len = 1; - uint8_t *ind_addr; + /* avoid multiple fetches */ + uint8_t volatile *ind_addr; ind_addr = cpu_physical_memory_map(ind_loc, &len, true); if (!ind_addr) { @@ -796,14 +797,15 @@ static uint8_t virtio_set_ind_atomic(SubchDev *sch, uint64_t ind_loc, __func__, sch->cssid, sch->ssid, sch->schid); return -1; } + actual = *ind_addr; do { - ind_old = *ind_addr; - ind_new = ind_old | to_be_set; - } while (atomic_cmpxchg(ind_addr, ind_old, ind_new) != ind_old); - trace_virtio_ccw_set_ind(ind_loc, ind_old, ind_new); - cpu_physical_memory_unmap(ind_addr, len, 1, len); + expected = actual; + actual = atomic_cmpxchg(ind_addr, expected, expected | to_be_set); + } while (actual != expected); + trace_virtio_ccw_set_ind(ind_loc, actual, actual | to_be_set); + cpu_physical_memory_unmap((void *)ind_addr, len, 1, len); - return ind_old; + return actual; } static void virtio_ccw_notify(DeviceState *d, uint16_t vector) From 45175361f1bfc2d3ccdcb4b22570c2352f3de754 Mon Sep 17 00:00:00 2001 From: Halil Pasic Date: Tue, 16 Jun 2020 06:50:35 +0200 Subject: [PATCH 14/14] s390x/pci: fix set_ind_atomic The atomic_cmpxchg() loop is broken because we occasionally end up with old and _old having different values (a legit compiler can generate code that accessed *ind_addr again to pick up a value for _old instead of using the value of old that was already fetched according to the rules of the abstract machine). This means the underlying CS instruction may use a different old (_old) than the one we intended to use if atomic_cmpxchg() performed the xchg part. Let us use volatile to force the rules of the abstract machine for accesses to *ind_addr. Let us also rewrite the loop so, we that the new old is used to compute the new desired value if the xchg part is not performed. Fixes: 8cba80c3a0 ("s390: Add PCI bus support") Reported-by: Christian Borntraeger Signed-off-by: Halil Pasic Reviewed-by: Christian Borntraeger Message-Id: <20200616045035.51641-3-pasic@linux.ibm.com> Signed-off-by: Cornelia Huck --- hw/s390x/s390-pci-bus.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index 142e52a8ff..736965c928 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -637,22 +637,24 @@ static AddressSpace *s390_pci_dma_iommu(PCIBus *bus, void *opaque, int devfn) static uint8_t set_ind_atomic(uint64_t ind_loc, uint8_t to_be_set) { - uint8_t ind_old, ind_new; + uint8_t expected, actual; hwaddr len = 1; - uint8_t *ind_addr; + /* avoid multiple fetches */ + uint8_t volatile *ind_addr; ind_addr = cpu_physical_memory_map(ind_loc, &len, true); if (!ind_addr) { s390_pci_generate_error_event(ERR_EVENT_AIRERR, 0, 0, 0, 0); return -1; } + actual = *ind_addr; do { - ind_old = *ind_addr; - ind_new = ind_old | to_be_set; - } while (atomic_cmpxchg(ind_addr, ind_old, ind_new) != ind_old); - cpu_physical_memory_unmap(ind_addr, len, 1, len); + expected = actual; + actual = atomic_cmpxchg(ind_addr, expected, expected | to_be_set); + } while (actual != expected); + cpu_physical_memory_unmap((void *)ind_addr, len, 1, len); - return ind_old; + return actual; } static void s390_msi_ctrl_write(void *opaque, hwaddr addr, uint64_t data,