Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1487702 > unrolled thread

[PATCH 0/9] arch/x86/platform/uv: add UV4 support to BAU

Started byAndrew Banman <abanman@sgi.com>
First post2016-09-21 00:40 +0200
Last post2016-09-22 12:40 +0200
Articles 5 on this page of 25 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/9] arch/x86/platform/uv: add UV4 support to BAU Andrew Banman <abanman@sgi.com> - 2016-09-21 00:40 +0200
    [PATCH 7/9] arch/x86/platform/uv: BAU UV4 disable software timeout Andrew Banman <abanman@sgi.com> - 2016-09-21 00:40 +0200
    [PATCH 6/9] arch/x86/platform/uv: BAU UV4 populate uvhub_version Andrew Banman <abanman@sgi.com> - 2016-09-21 00:40 +0200
    Re: [PATCH 0/9] arch/x86/platform/uv: add UV4 support to BAU Thomas Gleixner <tglx@linutronix.de> - 2016-09-21 17:00 +0200
    [PATCHv2 0/10] arch/x86/platform/uv: add UV4 support to BAU Andrew Banman <abanman@sgi.com> - 2016-09-21 18:10 +0200
      [PATCH 01/10] arch/x86/platform/uv: BAU cleanup: vertical alignment Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Clean up vertical alignment tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 02/10] arch/x86/platform/uv: BAU cleanup: update printks Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Clean up and update printks tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 10/10] arch/x86/platform/uv: BAU UV4 add version-specific functions Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Add UV4-specific functions tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 08/10] arch/x86/platform/uv: BAU UV4 disable software timeout Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Disable software timeout on  UV4 hardware tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 03/10] arch/x86/platform/uv: BAU cleanup: pq_init Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Clean up pq_init() tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 06/10] arch/x86/platform/uv: BAU use generic function pointers Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Use generic function  pointers tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 04/10] arch/x86/platform/uv: BAU replace uv_physnodeaddr Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Convert uv_physnodeaddr()  use to uv_gpa_to_offset() tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 05/10] arch/x86/platform/uv: BAU add generic function pointers Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Add generic function  pointers tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 07/10] arch/x86/platform/uv: BAU UV4 populate uvhub_version Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Populate ->uvhub_version  with UV4 version information tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200
      [PATCH 09/10] arch/x86/platform/uv: BAU UV4 fix payload queue setup Andrew Banman <abanman@sgi.com> - 2016-09-21 18:20 +0200
        [tip:x86/platform] x86/platform/uv/BAU: Fix payload queue setup on  UV4 hardware tip-bot for Andrew Banman <tipbot@zytor.com> - 2016-09-22 12:40 +0200

Page 2 of 2 — ← Prev page 1 [2]


#1488743 — [tip:x86/platform] x86/platform/uv/BAU: Add generic function pointers

Fromtip-bot for Andrew Banman <tipbot@zytor.com>
Date2016-09-22 12:40 +0200
Subject[tip:x86/platform] x86/platform/uv/BAU: Add generic function pointers
Message-ID<sk9A6-58y-45@gated-at.bofh.it>
In reply to#1488240
Commit-ID:  5e4f96fe2a61c759d5d47f8112813618805c85a0
Gitweb:     http://git.kernel.org/tip/5e4f96fe2a61c759d5d47f8112813618805c85a0
Author:     Andrew Banman <abanman@sgi.com>
AuthorDate: Wed, 21 Sep 2016 11:09:16 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 22 Sep 2016 11:16:13 +0200

x86/platform/uv/BAU: Add generic function pointers

Many BAU functions have different implementations depending on the UV
version. Rather than switching on the uvhub_version throughout the driver,
we can define a set of operations for each version. This is especially
beneficial for UV4, which will require many new MMR read/write functions.

Currently, the set of abstracted functions are the same for UV1, UV2, and
UV3. The functions were chosen because each one will have a different
implementation for UV4. Other functions will be added as needed to handle
new implementations or to cleanup the existing differences between UV1,
UV2, and UV3, i.e. read_status and wait_completion.

Signed-off-by: Andrew Banman <abanman@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Mike Travis <travis@sgi.com>
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: akpm@linux-foundation.org
Cc: rja@sgi.com
Link: http://lkml.kernel.org/r/1474474161-265604-6-git-send-email-abanman@sgi.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/uv/uv_bau.h | 11 +++++++++++
 arch/x86/platform/uv/tlb_uv.c    | 19 +++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h
index a46f270..a7a93a5 100644
--- a/arch/x86/include/asm/uv/uv_bau.h
+++ b/arch/x86/include/asm/uv/uv_bau.h
@@ -385,6 +385,17 @@ 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
diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 34b2a48..a33a433 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -24,6 +24,18 @@
 #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,
+};
+
 /* timeouts in nanoseconds (indexed by UVH_AGING_PRESCALE_SEL urgency7 30:28) */
 static int timeout_base_ns[] = {
 		20,
@@ -2135,6 +2147,13 @@ static int __init uv_bau_init(void)
 	if (!is_uv_system())
 		return 0;
 
+	if (is_uv3_hub())
+		ops = uv123_bau_ops;
+	else if (is_uv2_hub())
+		ops = uv123_bau_ops;
+	else if (is_uv1_hub())
+		ops = uv123_bau_ops;
+
 	for_each_possible_cpu(cur_cpu) {
 		mask = &per_cpu(uv_flush_tlb_mask, cur_cpu);
 		zalloc_cpumask_var_node(mask, GFP_KERNEL, cpu_to_node(cur_cpu));

[toc] | [prev] | [next] | [standalone]


#1488241 — [PATCH 07/10] arch/x86/platform/uv: BAU UV4 populate uvhub_version

FromAndrew Banman <abanman@sgi.com>
Date2016-09-21 18:20 +0200
Subject[PATCH 07/10] arch/x86/platform/uv: BAU UV4 populate uvhub_version
Message-ID<sjSpB-2NO-45@gated-at.bofh.it>
In reply to#1488222
Signed-off-by: Andrew Banman <abanman@sgi.com>
Acked-by: Mike Travis <travis@sgi.com>
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/platform/uv/tlb_uv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 030d452..ddbeb16 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -2044,8 +2044,10 @@ static int scan_sock(struct socket_desc *sdp, struct uvhub_desc *bdp,
 			bcp->uvhub_version = 2;
 		else if (is_uv3_hub())
 			bcp->uvhub_version = 3;
+		else if (is_uv4_hub())
+			bcp->uvhub_version = 4;
 		else {
-			pr_emerg("uvhub version not 1, 2, or 3\n");
+			pr_emerg("uvhub version not 1, 2, 3, or 4\n");
 			return 1;
 		}
 		bcp->uvhub_master = *hmasterp;
-- 
1.8.5.6

[toc] | [prev] | [next] | [standalone]


#1488740 — [tip:x86/platform] x86/platform/uv/BAU: Populate ->uvhub_version with UV4 version information

Fromtip-bot for Andrew Banman <tipbot@zytor.com>
Date2016-09-22 12:40 +0200
Subject[tip:x86/platform] x86/platform/uv/BAU: Populate ->uvhub_version with UV4 version information
Message-ID<sk9A6-58y-41@gated-at.bofh.it>
In reply to#1488241
Commit-ID:  58d4ab46f21e7e800a7597f271a23ec602796247
Gitweb:     http://git.kernel.org/tip/58d4ab46f21e7e800a7597f271a23ec602796247
Author:     Andrew Banman <abanman@sgi.com>
AuthorDate: Wed, 21 Sep 2016 11:09:18 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 22 Sep 2016 11:16:14 +0200

x86/platform/uv/BAU: Populate ->uvhub_version with UV4 version information

Signed-off-by: Andrew Banman <abanman@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Mike Travis <travis@sgi.com>
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: akpm@linux-foundation.org
Cc: rja@sgi.com
Link: http://lkml.kernel.org/r/1474474161-265604-8-git-send-email-abanman@sgi.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/platform/uv/tlb_uv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 030d452..ddbeb16 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -2044,8 +2044,10 @@ static int scan_sock(struct socket_desc *sdp, struct uvhub_desc *bdp,
 			bcp->uvhub_version = 2;
 		else if (is_uv3_hub())
 			bcp->uvhub_version = 3;
+		else if (is_uv4_hub())
+			bcp->uvhub_version = 4;
 		else {
-			pr_emerg("uvhub version not 1, 2, or 3\n");
+			pr_emerg("uvhub version not 1, 2, 3, or 4\n");
 			return 1;
 		}
 		bcp->uvhub_master = *hmasterp;

[toc] | [prev] | [next] | [standalone]


#1488242 — [PATCH 09/10] arch/x86/platform/uv: BAU UV4 fix payload queue setup

FromAndrew Banman <abanman@sgi.com>
Date2016-09-21 18:20 +0200
Subject[PATCH 09/10] arch/x86/platform/uv: BAU UV4 fix payload queue setup
Message-ID<sjSpB-2NO-47@gated-at.bofh.it>
In reply to#1488222
The BAU on UV4 does not need to maintain the payload queue tail pointer. Do
not initialize the tail pointer MMR on UV4.

Note that write_payload_tail is not an abstracted BAU function since it is
an operation specific to pre-UV4 versions. Then we must switch on the UV
version to control its usage, for which we use uvhub_version rather than
is_uv*_hub because it is quicker/more concise.

Signed-off-by: Andrew Banman <abanman@sgi.com>
Acked-by: Mike Travis <travis@sgi.com>
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/platform/uv/tlb_uv.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 72a5de7..7ca0e5c 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -1826,11 +1826,19 @@ static void pq_init(int node, int pnode)
 
 	first = ops.bau_gpa_to_offset(uv_gpa(pqp));
 	last = ops.bau_gpa_to_offset(uv_gpa(pqp + (DEST_Q_SIZE - 1)));
-	tail = first;
-	gnode = uv_gpa_to_gnode(uv_gpa(pqp));
-	first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
 
-	write_mmr_payload_tail(pnode, tail);
+	/*
+	 * Pre UV4, the gnode is required to locate the payload queue
+	 * and the payload queue tail must be maintained by the kernel.
+	 */
+	bcp = &per_cpu(bau_control, smp_processor_id());
+	if (bcp->uvhub_version <= 3) {
+		tail = first;
+		gnode = uv_gpa_to_gnode(uv_gpa(pqp));
+		first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
+		write_mmr_payload_tail(pnode, tail);
+	}
+
 	ops.write_payload_first(pnode, first);
 	ops.write_payload_last(pnode, last);
 	ops.write_g_sw_ack(pnode, 0xffffUL);
-- 
1.8.5.6

[toc] | [prev] | [next] | [standalone]


#1488729 — [tip:x86/platform] x86/platform/uv/BAU: Fix payload queue setup on UV4 hardware

Fromtip-bot for Andrew Banman <tipbot@zytor.com>
Date2016-09-22 12:40 +0200
Subject[tip:x86/platform] x86/platform/uv/BAU: Fix payload queue setup on UV4 hardware
Message-ID<sk9A5-58y-7@gated-at.bofh.it>
In reply to#1488242
Commit-ID:  6d78059bbc0ace5461938aaea8cda95eb6719898
Gitweb:     http://git.kernel.org/tip/6d78059bbc0ace5461938aaea8cda95eb6719898
Author:     Andrew Banman <abanman@sgi.com>
AuthorDate: Wed, 21 Sep 2016 11:09:20 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 22 Sep 2016 11:16:15 +0200

x86/platform/uv/BAU: Fix payload queue setup on UV4 hardware

The BAU on UV4 does not need to maintain the payload queue tail pointer. Do
not initialize the tail pointer MMR on UV4.

Note that write_payload_tail is not an abstracted BAU function since it is
an operation specific to pre-UV4 versions. Then we must switch on the UV
version to control its usage, for which we use uvhub_version rather than
is_uv*_hub because it is quicker/more concise.

Signed-off-by: Andrew Banman <abanman@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Mike Travis <travis@sgi.com>
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: akpm@linux-foundation.org
Cc: rja@sgi.com
Link: http://lkml.kernel.org/r/1474474161-265604-10-git-send-email-abanman@sgi.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/platform/uv/tlb_uv.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/arch/x86/platform/uv/tlb_uv.c b/arch/x86/platform/uv/tlb_uv.c
index 72a5de7..7ca0e5c 100644
--- a/arch/x86/platform/uv/tlb_uv.c
+++ b/arch/x86/platform/uv/tlb_uv.c
@@ -1826,11 +1826,19 @@ static void pq_init(int node, int pnode)
 
 	first = ops.bau_gpa_to_offset(uv_gpa(pqp));
 	last = ops.bau_gpa_to_offset(uv_gpa(pqp + (DEST_Q_SIZE - 1)));
-	tail = first;
-	gnode = uv_gpa_to_gnode(uv_gpa(pqp));
-	first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
 
-	write_mmr_payload_tail(pnode, tail);
+	/*
+	 * Pre UV4, the gnode is required to locate the payload queue
+	 * and the payload queue tail must be maintained by the kernel.
+	 */
+	bcp = &per_cpu(bau_control, smp_processor_id());
+	if (bcp->uvhub_version <= 3) {
+		tail = first;
+		gnode = uv_gpa_to_gnode(uv_gpa(pqp));
+		first = (gnode << UV_PAYLOADQ_GNODE_SHIFT) | tail;
+		write_mmr_payload_tail(pnode, tail);
+	}
+
 	ops.write_payload_first(pnode, first);
 	ops.write_payload_last(pnode, last);
 	ops.write_g_sw_ack(pnode, 0xffffUL);

[toc] | [prev] | [standalone]


Page 2 of 2 — ← Prev page 1 [2]

Back to top | Article view | linux.kernel


csiph-web