On 15/01/2021 09:00, Nathan Lynch wrote:
RTAS_RMOBUF_MAX doesn't actually describe a "maximum" value in any
sense. It represents the size of an area of memory set aside for user
space to use as work areas for certain RTAS calls.

Rename it to RTAS_USER_REGION, and express the value in terms of the
number of work areas allocated.

Signed-off-by: Nathan Lynch <nath...@linux.ibm.com>

squash! powerpc/rtas: rename RTAS_RMOBUF_MAX to RTAS_USER_REGION_SIZE
---
  arch/powerpc/include/asm/rtas.h | 9 ++++++---
  arch/powerpc/kernel/rtas-proc.c | 2 +-
  arch/powerpc/kernel/rtas.c      | 2 +-
  3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h
index 332e1000ca0f..1aa7ab1cbc84 100644
--- a/arch/powerpc/include/asm/rtas.h
+++ b/arch/powerpc/include/asm/rtas.h
@@ -19,8 +19,11 @@
  #define RTAS_UNKNOWN_SERVICE (-1)
  #define RTAS_INSTANTIATE_MAX (1ULL<<30) /* Don't instantiate rtas at/above 
this value */
-/* Buffer size for ppc_rtas system call. */
-#define RTAS_RMOBUF_MAX (64 * 1024)
+/* Work areas shared with RTAS must be 4K, naturally aligned. */

Why exactly 4K and not (for example) PAGE_SIZE?

+#define RTAS_WORK_AREA_SIZE   4096
+
+/* Work areas allocated for user space access. */
+#define RTAS_USER_REGION_SIZE (RTAS_WORK_AREA_SIZE * 16)

This is still 64K but no clarity why. There is 16 of something, what is it?


/* RTAS return status codes */
  #define RTAS_BUSY             -2    /* RTAS Busy */
@@ -357,7 +360,7 @@ extern void rtas_take_timebase(void);
  static inline int page_is_rtas_user_buf(unsigned long pfn)
  {
        unsigned long paddr = (pfn << PAGE_SHIFT);
-       if (paddr >= rtas_rmo_buf && paddr < (rtas_rmo_buf + RTAS_RMOBUF_MAX))
+       if (paddr >= rtas_rmo_buf && paddr < (rtas_rmo_buf + 
RTAS_USER_REGION_SIZE))
                return 1;
        return 0;
  }
diff --git a/arch/powerpc/kernel/rtas-proc.c b/arch/powerpc/kernel/rtas-proc.c
index d2b0d99824a4..6857a5b0a1c3 100644
--- a/arch/powerpc/kernel/rtas-proc.c
+++ b/arch/powerpc/kernel/rtas-proc.c
@@ -767,6 +767,6 @@ static int ppc_rtas_tone_volume_show(struct seq_file *m, 
void *v)
   */
  static int ppc_rtas_rmo_buf_show(struct seq_file *m, void *v)
  {
-       seq_printf(m, "%016lx %x\n", rtas_rmo_buf, RTAS_RMOBUF_MAX);
+       seq_printf(m, "%016lx %x\n", rtas_rmo_buf, RTAS_USER_REGION_SIZE);
        return 0;
  }
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index 55f6aa170e57..da65faadbbb2 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -1204,7 +1204,7 @@ void __init rtas_initialize(void)
        if (firmware_has_feature(FW_FEATURE_LPAR))
                rtas_region = min(ppc64_rma_size, RTAS_INSTANTIATE_MAX);
  #endif
-       rtas_rmo_buf = memblock_phys_alloc_range(RTAS_RMOBUF_MAX, PAGE_SIZE,
+       rtas_rmo_buf = memblock_phys_alloc_range(RTAS_USER_REGION_SIZE, 
PAGE_SIZE,
                                                 0, rtas_region);
        if (!rtas_rmo_buf)
                panic("ERROR: RTAS: Failed to allocate %lx bytes below %pa\n",


--
Alexey

Reply via email to