x86/platform/uv/BAU: Cleanup bau_operations declaration and instances
authorAndrew Banman <abanman@hpe.com>
Thu, 9 Mar 2017 16:42:11 +0000 (10:42 -0600)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 13 Mar 2017 13:26:28 +0000 (14:26 +0100)
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 <abanman@hpe.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Mike Travis <mike.travis@hpe.com>
Cc: sivanich@hpe.com
Cc: rja@hpe.com
Cc: akpm@linux-foundation.org
Link: http://lkml.kernel.org/r/1489077734-111753-4-git-send-email-abanman@hpe.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/uv/uv_bau.h
arch/x86/platform/uv/tlb_uv.c

index dcd63ed69162d48d17f036d233c46e2ae42a07ff..695b873f4fd37ef33701279648d204ec28d7529b 100644 (file)
@@ -406,17 +406,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
@@ -668,6 +657,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);
index 70721c493291a6651d39817f9d49952238c44499..e6994fd5597a52d4a2ac9589a144ad3444a65486 100644 (file)
 #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 @@ fail:
        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
  */