From: Pierre Morel <pmorel@xxxxxxxxxxxxx> When the extended-length-SCCB facility is present use a big buffer already at first try when calling sclp_read_scp_info() to avoid the SCLP_RC_INSUFFICIENT_SCCB_LENGTH error. Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> Link: https://lore.kernel.org/r/20230601164537.31769-3-pmorel@xxxxxxxxxxxxx [ nrb: remove one call to sclp_read_scp_info() ] Signed-off-by: Nico Boehr <nrb@xxxxxxxxxxxxx> --- lib/s390x/sclp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/s390x/sclp.c b/lib/s390x/sclp.c index 15662aa..56d5c90 100644 --- a/lib/s390x/sclp.c +++ b/lib/s390x/sclp.c @@ -17,13 +17,14 @@ #include "sclp.h" #include <alloc_phys.h> #include <alloc_page.h> +#include <asm/facility.h> extern unsigned long stacktop; static uint64_t storage_increment_size; static uint64_t max_ram_size; static uint64_t ram_size; -char _read_info[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); +char _read_info[2 * PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); static ReadInfo *read_info; struct sclp_facilities sclp_facilities; @@ -113,7 +114,8 @@ static void sclp_read_scp_info(ReadInfo *ri, int length) void sclp_read_info(void) { - sclp_read_scp_info((void *)_read_info, SCCB_SIZE); + sclp_read_scp_info((void *)_read_info, + test_facility(140) ? sizeof(_read_info) : SCCB_SIZE); read_info = (ReadInfo *)_read_info; } -- 2.41.0