2009-06-24 14:40:37

by Cliff Wickman

[permalink] [raw]
Subject: [PATCH] x86: uv bau sending buffer initialization

From: Cliff Wickman <[email protected]>

The initialization of the UV Broadcast Assist Unit's sending buffers
was making an invalid assumption about the initialization of an MMR
that defines its address.

The BIOS will not be providing that MMR. So uv_activation_descriptor_init()
should unconditionally set it.

Tested on UV simulator.

Diffed against 2.6.30

Signed-off-by: Cliff Wickman <[email protected]>

---
arch/x86/kernel/tlb_uv.c | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)

Index: linux/arch/x86/kernel/tlb_uv.c
===================================================================
--- linux.orig/arch/x86/kernel/tlb_uv.c
+++ linux/arch/x86/kernel/tlb_uv.c
@@ -711,7 +711,6 @@ uv_activation_descriptor_init(int node,
unsigned long pa;
unsigned long m;
unsigned long n;
- unsigned long mmr_image;
struct bau_desc *adp;
struct bau_desc *ad2;

@@ -727,12 +726,8 @@ uv_activation_descriptor_init(int node,
n = pa >> uv_nshift;
m = pa & uv_mmask;

- mmr_image = uv_read_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE);
- if (mmr_image) {
- uv_write_global_mmr64(pnode, (unsigned long)
- UVH_LB_BAU_SB_DESCRIPTOR_BASE,
- (n << UV_DESC_BASE_PNODE_SHIFT | m));
- }
+ uv_write_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE,
+ (n << UV_DESC_BASE_PNODE_SHIFT | m));

/*
* initializing all 8 (UV_ITEMS_PER_DESCRIPTOR) descriptors for each


2009-06-24 15:37:43

by Cliff Wickman

[permalink] [raw]
Subject: [tip:x86/urgent] x86: Fix uv bau sending buffer initialization

Commit-ID: 9c26f52b900f7207135bafc8789e1a4f5d43e096
Gitweb: http://git.kernel.org/tip/9c26f52b900f7207135bafc8789e1a4f5d43e096
Author: Cliff Wickman <[email protected]>
AuthorDate: Wed, 24 Jun 2009 09:41:59 -0500
Committer: Ingo Molnar <[email protected]>
CommitDate: Wed, 24 Jun 2009 17:33:58 +0200

x86: Fix uv bau sending buffer initialization

The initialization of the UV Broadcast Assist Unit's sending
buffers was making an invalid assumption about the
initialization of an MMR that defines its address.

The BIOS will not be providing that MMR. So
uv_activation_descriptor_init() should unconditionally set it.

Tested on UV simulator.

Signed-off-by: Cliff Wickman <[email protected]>
Cc: <[email protected]> # for v2.6.30.x
LKML-Reference: <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>


---
arch/x86/kernel/tlb_uv.c | 9 ++-------
1 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c
index 124d40c..8ccabb8 100644
--- a/arch/x86/kernel/tlb_uv.c
+++ b/arch/x86/kernel/tlb_uv.c
@@ -711,7 +711,6 @@ uv_activation_descriptor_init(int node, int pnode)
unsigned long pa;
unsigned long m;
unsigned long n;
- unsigned long mmr_image;
struct bau_desc *adp;
struct bau_desc *ad2;

@@ -727,12 +726,8 @@ uv_activation_descriptor_init(int node, int pnode)
n = pa >> uv_nshift;
m = pa & uv_mmask;

- mmr_image = uv_read_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE);
- if (mmr_image) {
- uv_write_global_mmr64(pnode, (unsigned long)
- UVH_LB_BAU_SB_DESCRIPTOR_BASE,
- (n << UV_DESC_BASE_PNODE_SHIFT | m));
- }
+ uv_write_global_mmr64(pnode, UVH_LB_BAU_SB_DESCRIPTOR_BASE,
+ (n << UV_DESC_BASE_PNODE_SHIFT | m));

/*
* initializing all 8 (UV_ITEMS_PER_DESCRIPTOR) descriptors for each