[PATCH 1/8] hw/s390x: Use explicit big-endian LD/ST API

Philippe Mathieu-Daudé posted 8 patches 1 month, 2 weeks ago
Maintainers: Laurent Vivier <laurent@vivier.eu>, Halil Pasic <pasic@linux.ibm.com>, Christian Borntraeger <borntraeger@linux.ibm.com>, Eric Farman <farman@linux.ibm.com>, Farhan Ali <alifm@linux.ibm.com>, Thomas Huth <thuth@redhat.com>, Richard Henderson <richard.henderson@linaro.org>, Ilya Leoshkevich <iii@linux.ibm.com>, David Hildenbrand <david@kernel.org>, Matthew Rosato <mjrosato@linux.ibm.com>, "Michael S. Tsirkin" <mst@redhat.com>, Cornelia Huck <cohuck@redhat.com>
[PATCH 1/8] hw/s390x: Use explicit big-endian LD/ST API
Posted by Philippe Mathieu-Daudé 1 month, 2 weeks ago
The S390x architecture uses big endianness. Directly use
the big-endian LD/ST API.

Mechanical change running:

  $ for a in uw w l q; do \
      sed -i -e "s/ld${a}_p(/ld${a}_be_p(/" \
        $(git grep -wlE '(ld|st)u?[wlq]_p' hw/s390x/);
    done

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/s390x/css.c          | 24 +++++++++++-------------
 hw/s390x/s390-pci-bus.c |  4 ++--
 hw/s390x/virtio-ccw.c   | 24 ++++++++++++------------
 3 files changed, 25 insertions(+), 27 deletions(-)

diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 53444f68288..4bc2253c182 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1582,27 +1582,25 @@ static void css_update_chnmon(SubchDev *sch)
         /* Format 1, per-subchannel area. */
         uint32_t count;
 
-        count = address_space_ldl(&address_space_memory,
-                                  sch->curr_status.mba,
-                                  MEMTXATTRS_UNSPECIFIED,
-                                  NULL);
+        count = address_space_ldl_be(&address_space_memory,
+                                     sch->curr_status.mba,
+                                     MEMTXATTRS_UNSPECIFIED, NULL);
         count++;
-        address_space_stl(&address_space_memory, sch->curr_status.mba, count,
-                          MEMTXATTRS_UNSPECIFIED, NULL);
+        address_space_stl_be(&address_space_memory, sch->curr_status.mba, count,
+                             MEMTXATTRS_UNSPECIFIED, NULL);
     } else {
         /* Format 0, global area. */
         uint32_t offset;
         uint16_t count;
 
         offset = sch->curr_status.pmcw.mbi << 5;
-        count = address_space_lduw(&address_space_memory,
-                                   channel_subsys.chnmon_area + offset,
-                                   MEMTXATTRS_UNSPECIFIED,
-                                   NULL);
+        count = address_space_lduw_be(&address_space_memory,
+                                      channel_subsys.chnmon_area + offset,
+                                      MEMTXATTRS_UNSPECIFIED, NULL);
         count++;
-        address_space_stw(&address_space_memory,
-                          channel_subsys.chnmon_area + offset, count,
-                          MEMTXATTRS_UNSPECIFIED, NULL);
+        address_space_stw_be(&address_space_memory,
+                             channel_subsys.chnmon_area + offset, count,
+                             MEMTXATTRS_UNSPECIFIED, NULL);
     }
 }
 
diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
index 52820894fa1..aeeed82955a 100644
--- a/hw/s390x/s390-pci-bus.c
+++ b/hw/s390x/s390-pci-bus.c
@@ -461,8 +461,8 @@ static uint64_t table_translate(S390IOTLBEntry *entry, uint64_t to, int8_t ett,
     uint16_t err = 0;
 
     tx = get_table_index(entry->iova, ett);
-    te = address_space_ldq(&address_space_memory, to + tx * sizeof(uint64_t),
-                           MEMTXATTRS_UNSPECIFIED, NULL);
+    te = address_space_ldq_be(&address_space_memory, to + tx * sizeof(uint64_t),
+                              MEMTXATTRS_UNSPECIFIED, NULL);
 
     if (!te) {
         err = ERR_EVENT_INVALTE;
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 4a3ffb84f8f..9dd838c61e4 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -889,26 +889,26 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector)
             }
         } else {
             assert(vector < NR_CLASSIC_INDICATOR_BITS);
-            indicators = address_space_ldq(&address_space_memory,
-                                           dev->indicators->addr,
-                                           MEMTXATTRS_UNSPECIFIED,
-                                           NULL);
+            indicators = address_space_ldq_be(&address_space_memory,
+                                              dev->indicators->addr,
+                                              MEMTXATTRS_UNSPECIFIED,
+                                              NULL);
             indicators |= 1ULL << vector;
-            address_space_stq(&address_space_memory, dev->indicators->addr,
-                              indicators, MEMTXATTRS_UNSPECIFIED, NULL);
+            address_space_stq_be(&address_space_memory, dev->indicators->addr,
+                                 indicators, MEMTXATTRS_UNSPECIFIED, NULL);
             css_conditional_io_interrupt(sch);
         }
     } else {
         if (!dev->indicators2) {
             return;
         }
-        indicators = address_space_ldq(&address_space_memory,
-                                       dev->indicators2->addr,
-                                       MEMTXATTRS_UNSPECIFIED,
-                                       NULL);
+        indicators = address_space_ldq_be(&address_space_memory,
+                                          dev->indicators2->addr,
+                                          MEMTXATTRS_UNSPECIFIED,
+                                          NULL);
         indicators |= 1ULL;
-        address_space_stq(&address_space_memory, dev->indicators2->addr,
-                          indicators, MEMTXATTRS_UNSPECIFIED, NULL);
+        address_space_stq_be(&address_space_memory, dev->indicators2->addr,
+                             indicators, MEMTXATTRS_UNSPECIFIED, NULL);
         css_conditional_io_interrupt(sch);
     }
 }
-- 
2.52.0


Re: [PATCH 1/8] hw/s390x: Use explicit big-endian LD/ST API
Posted by Manos Pitsidianakis 1 month, 1 week ago
On Wed, Dec 24, 2025 at 6:20 PM Philippe Mathieu-Daudé
<philmd@linaro.org> wrote:
>
> The S390x architecture uses big endianness. Directly use
> the big-endian LD/ST API.
>
> Mechanical change running:
>
>   $ for a in uw w l q; do \
>       sed -i -e "s/ld${a}_p(/ld${a}_be_p(/" \
>         $(git grep -wlE '(ld|st)u?[wlq]_p' hw/s390x/);
>     done
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---

Reviewed-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>

>  hw/s390x/css.c          | 24 +++++++++++-------------
>  hw/s390x/s390-pci-bus.c |  4 ++--
>  hw/s390x/virtio-ccw.c   | 24 ++++++++++++------------
>  3 files changed, 25 insertions(+), 27 deletions(-)
>
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 53444f68288..4bc2253c182 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -1582,27 +1582,25 @@ static void css_update_chnmon(SubchDev *sch)
>          /* Format 1, per-subchannel area. */
>          uint32_t count;
>
> -        count = address_space_ldl(&address_space_memory,
> -                                  sch->curr_status.mba,
> -                                  MEMTXATTRS_UNSPECIFIED,
> -                                  NULL);
> +        count = address_space_ldl_be(&address_space_memory,
> +                                     sch->curr_status.mba,
> +                                     MEMTXATTRS_UNSPECIFIED, NULL);
>          count++;
> -        address_space_stl(&address_space_memory, sch->curr_status.mba, count,
> -                          MEMTXATTRS_UNSPECIFIED, NULL);
> +        address_space_stl_be(&address_space_memory, sch->curr_status.mba, count,
> +                             MEMTXATTRS_UNSPECIFIED, NULL);
>      } else {
>          /* Format 0, global area. */
>          uint32_t offset;
>          uint16_t count;
>
>          offset = sch->curr_status.pmcw.mbi << 5;
> -        count = address_space_lduw(&address_space_memory,
> -                                   channel_subsys.chnmon_area + offset,
> -                                   MEMTXATTRS_UNSPECIFIED,
> -                                   NULL);
> +        count = address_space_lduw_be(&address_space_memory,
> +                                      channel_subsys.chnmon_area + offset,
> +                                      MEMTXATTRS_UNSPECIFIED, NULL);
>          count++;
> -        address_space_stw(&address_space_memory,
> -                          channel_subsys.chnmon_area + offset, count,
> -                          MEMTXATTRS_UNSPECIFIED, NULL);
> +        address_space_stw_be(&address_space_memory,
> +                             channel_subsys.chnmon_area + offset, count,
> +                             MEMTXATTRS_UNSPECIFIED, NULL);
>      }
>  }
>
> diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c
> index 52820894fa1..aeeed82955a 100644
> --- a/hw/s390x/s390-pci-bus.c
> +++ b/hw/s390x/s390-pci-bus.c
> @@ -461,8 +461,8 @@ static uint64_t table_translate(S390IOTLBEntry *entry, uint64_t to, int8_t ett,
>      uint16_t err = 0;
>
>      tx = get_table_index(entry->iova, ett);
> -    te = address_space_ldq(&address_space_memory, to + tx * sizeof(uint64_t),
> -                           MEMTXATTRS_UNSPECIFIED, NULL);
> +    te = address_space_ldq_be(&address_space_memory, to + tx * sizeof(uint64_t),
> +                              MEMTXATTRS_UNSPECIFIED, NULL);
>
>      if (!te) {
>          err = ERR_EVENT_INVALTE;
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 4a3ffb84f8f..9dd838c61e4 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -889,26 +889,26 @@ static void virtio_ccw_notify(DeviceState *d, uint16_t vector)
>              }
>          } else {
>              assert(vector < NR_CLASSIC_INDICATOR_BITS);
> -            indicators = address_space_ldq(&address_space_memory,
> -                                           dev->indicators->addr,
> -                                           MEMTXATTRS_UNSPECIFIED,
> -                                           NULL);
> +            indicators = address_space_ldq_be(&address_space_memory,
> +                                              dev->indicators->addr,
> +                                              MEMTXATTRS_UNSPECIFIED,
> +                                              NULL);
>              indicators |= 1ULL << vector;
> -            address_space_stq(&address_space_memory, dev->indicators->addr,
> -                              indicators, MEMTXATTRS_UNSPECIFIED, NULL);
> +            address_space_stq_be(&address_space_memory, dev->indicators->addr,
> +                                 indicators, MEMTXATTRS_UNSPECIFIED, NULL);
>              css_conditional_io_interrupt(sch);
>          }
>      } else {
>          if (!dev->indicators2) {
>              return;
>          }
> -        indicators = address_space_ldq(&address_space_memory,
> -                                       dev->indicators2->addr,
> -                                       MEMTXATTRS_UNSPECIFIED,
> -                                       NULL);
> +        indicators = address_space_ldq_be(&address_space_memory,
> +                                          dev->indicators2->addr,
> +                                          MEMTXATTRS_UNSPECIFIED,
> +                                          NULL);
>          indicators |= 1ULL;
> -        address_space_stq(&address_space_memory, dev->indicators2->addr,
> -                          indicators, MEMTXATTRS_UNSPECIFIED, NULL);
> +        address_space_stq_be(&address_space_memory, dev->indicators2->addr,
> +                             indicators, MEMTXATTRS_UNSPECIFIED, NULL);
>          css_conditional_io_interrupt(sch);
>      }
>  }
> --
> 2.52.0
>
Re: [PATCH 1/8] hw/s390x: Use explicit big-endian LD/ST API
Posted by Halil Pasic 1 month, 2 weeks ago
On Wed, 24 Dec 2025 17:20:28 +0100
Philippe Mathieu-Daudé <philmd@linaro.org> wrote:

> The S390x architecture uses big endianness. Directly use
> the big-endian LD/ST API.
> 
> Mechanical change running:
> 
>   $ for a in uw w l q; do \
>       sed -i -e "s/ld${a}_p(/ld${a}_be_p(/" \
>         $(git grep -wlE '(ld|st)u?[wlq]_p' hw/s390x/);
>     done
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>