On 4/2/26 19:04, Philippe Mathieu-Daudé wrote:
On 8/1/26 12:46, Philippe Mathieu-Daudé wrote:
On 8/1/26 08:53, Thomas Huth wrote:
On 07/01/2026 14.08, Philippe Mathieu-Daudé wrote:
Since commit 166f1bb7968 ("s390x/ioinst: Rework memory access
in CHSC instruction") the access is no more tied to the page
size. Define CHSC_MAX_REQ_LEN to better express the relation
with the length of the Channel Subsystem Call request.

Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
---
  target/s390x/ioinst.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index 2320dd4c122..d07773d14a3 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -398,6 +398,7 @@ typedef struct ChscResp {
      char data[];
  } QEMU_PACKED ChscResp;
+#define CHSC_MAX_REQ_LEN  0x1000
  #define CHSC_MIN_RESP_LEN 0x0008
  #define CHSC_SCPD 0x0002
@@ -660,7 +661,7 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, uintptr_t ra)
      uint16_t len;
      uint16_t command;
      CPUS390XState *env = &cpu->env;
-    uint8_t buf[TARGET_PAGE_SIZE];
+    uint8_t buf[CHSC_MAX_REQ_LEN];
      trace_ioinst("chsc");
      reg = (ipb >> 20) & 0x00f;
@@ -690,7 +691,7 @@ void ioinst_handle_chsc(S390CPU *cpu, uint32_t ipb, uintptr_t ra)
          s390_program_interrupt(env, PGM_OPERAND, ra);
          return;
      }
-    memset((char *)req + len, 0, TARGET_PAGE_SIZE - len);
+    memset((char *)req + len, 0, CHSC_MAX_REQ_LEN - len);
      res = (void *)((char *)req + len);
      command = be16_to_cpu(req->command);
      trace_ioinst_chsc_cmd(command, len);

Sorry, I don't quite get it, there are still dozends of others TARGET_PAGE_SIZE usages in target/s390x/, what's the advantage of removing that one here?

The other ones are really related to the s390x page size.

This one seems to use TARGET_PAGE_SIZE as an optimization.

Also, making this file common, we get the page size at runtime,
and that triggers:

../../target/s390x/ioinst.c:663:17: error: variable length array used [-Werror,-Wvla]
  663 |     uint8_t buf[TARGET_PAGE_SIZE];
      |                 ^~~~~~~~~~~~~~~~
include/exec/target_page.h:42:30: note: expanded from macro 'TARGET_PAGE_SIZE'
   42 | # define TARGET_PAGE_SIZE    (-(int)TARGET_PAGE_MASK)
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~
include/exec/target_page.h:40:49: note: expanded from macro 'TARGET_PAGE_MASK'
   40 | #  define TARGET_PAGE_MASK   ((TARGET_PAGE_TYPE)target_page.mask)
      |                                                 ^
include/exec/target_page.h:32:29: note: declared here
   32 | extern const TargetPageBits target_page;
      |                             ^
1 error generated.

I'll drop this patch and let someone with proper s390x knowledge post
a proper fix when this will become a blocking issue, but today it isn't.



The other ones are also used by user emulation so need more care. This
series addresses all system-only files. I neglected to mention that in
the cover :(

But if you think this is better to review all target/s390x/ conversion
in one go, I can wait until I finish the rest.



Reply via email to