Move the bau_operations declaration after bau struct declarations so the
bau structs can be referenced when adding new functions to
bau_operations. That way we avoid forward declarations of the bau
structs.

Likewise, move uv*_bau_ops structs down to avoid forward declarations of
new functions defined in the same file. Declare these structs __initconst
since they are only used during initialization. Similarly, declare the
bau_operations ops instance __ro_after_init as it is read-only after
initialization.

This is a preparatory patch for adding wait_completion to bau_operations.

Signed-off-by: Andrew Banman <aban...@hpe.com>
Acked-by: Mike Travis <mike.tra...@hpe.com>
---
 arch/x86/include/asm/uv/uv_bau.h | 22 ++++++++++----------
 arch/x86/platform/uv/tlb_uv.c    | 43 ++++++++++++++++++++--------------------
 2 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h
index 1ed0574..59ae8a7 100644
--- a/arch/x86/include/asm/uv/uv_bau.h
+++ b/arch/x86/include/asm/uv/uv_bau.h
@@ -405,17 +405,6 @@ struct uv2_3_bau_msg_header {
        /* bits 127:120 */
 };
 
-/* Abstracted BAU functions */
-struct bau_operations {
-       unsigned long (*read_l_sw_ack)(void);
-       unsigned long (*read_g_sw_ack)(int pnode);
-       unsigned long (*bau_gpa_to_offset)(unsigned long vaddr);
-       void (*write_l_sw_ack)(unsigned long mmr);
-       void (*write_g_sw_ack)(int pnode, unsigned long mmr);
-       void (*write_payload_first)(int pnode, unsigned long mmr);
-       void (*write_payload_last)(int pnode, unsigned long mmr);
-};
-
 /*
  * The activation descriptor:
  * The format of the message to send, plus all accompanying control
@@ -667,6 +656,17 @@ struct bau_control {
        struct hub_and_pnode    *thp;
 };
 
+/* Abstracted BAU functions */
+struct bau_operations {
+       unsigned long   (*read_l_sw_ack)(void);
+       unsigned long   (*read_g_sw_ack)(int pnode);
+       unsigned long   (*bau_gpa_to_offset)(unsigned long vaddr);
+       void            (*write_l_sw_ack)(unsigned long mmr);
+       void            (*write_g_sw_ack)(int pnode, unsigned long mmr);
+       void            (*write_payload_first)(int pnode, unsigned long mmr);
+       void            (*write_payload_last)(int pnode, unsigned long mmr);
+};
+
 static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image)
 {
        write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image);
diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 70721c4..e6994fd 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -23,28 +23,7 @@
 #include <asm/irq_vectors.h>
 #include <asm/timer.h>
 
-static struct bau_operations ops;
-
-static struct bau_operations uv123_bau_ops = {
-       .bau_gpa_to_offset       = uv_gpa_to_offset,
-       .read_l_sw_ack           = read_mmr_sw_ack,
-       .read_g_sw_ack           = read_gmmr_sw_ack,
-       .write_l_sw_ack          = write_mmr_sw_ack,
-       .write_g_sw_ack          = write_gmmr_sw_ack,
-       .write_payload_first     = write_mmr_payload_first,
-       .write_payload_last      = write_mmr_payload_last,
-};
-
-static struct bau_operations uv4_bau_ops = {
-       .bau_gpa_to_offset       = uv_gpa_to_soc_phys_ram,
-       .read_l_sw_ack           = read_mmr_proc_sw_ack,
-       .read_g_sw_ack           = read_gmmr_proc_sw_ack,
-       .write_l_sw_ack          = write_mmr_proc_sw_ack,
-       .write_g_sw_ack          = write_gmmr_proc_sw_ack,
-       .write_payload_first     = write_mmr_proc_payload_first,
-       .write_payload_last      = write_mmr_proc_payload_last,
-};
-
+static struct bau_operations ops __ro_after_init;
 
 /* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) 
*/
 static int timeout_base_ns[] = {
@@ -2158,6 +2137,26 @@ static int __init init_per_cpu(int nuvhubs, int 
base_part_pnode)
        return 1;
 }
 
+static const struct bau_operations uv123_bau_ops __initconst = {
+       .bau_gpa_to_offset       = uv_gpa_to_offset,
+       .read_l_sw_ack           = read_mmr_sw_ack,
+       .read_g_sw_ack           = read_gmmr_sw_ack,
+       .write_l_sw_ack          = write_mmr_sw_ack,
+       .write_g_sw_ack          = write_gmmr_sw_ack,
+       .write_payload_first     = write_mmr_payload_first,
+       .write_payload_last      = write_mmr_payload_last,
+};
+
+static const struct bau_operations uv4_bau_ops __initconst = {
+       .bau_gpa_to_offset       = uv_gpa_to_soc_phys_ram,
+       .read_l_sw_ack           = read_mmr_proc_sw_ack,
+       .read_g_sw_ack           = read_gmmr_proc_sw_ack,
+       .write_l_sw_ack          = write_mmr_proc_sw_ack,
+       .write_g_sw_ack          = write_gmmr_proc_sw_ack,
+       .write_payload_first     = write_mmr_proc_payload_first,
+       .write_payload_last      = write_mmr_proc_payload_last,
+};
+
 /*
  * Initialization of BAU-related structures
  */
-- 
1.8.2.1

Reply via email to