]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/suse-2.6.27.25/patches.kabi/xpc-pass-physical
Updated xen patches taken from suse.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.kabi / xpc-pass-physical
1 From: Raymund Will <rw@suse.de>
2 Subject: sgi-xpc: need to pass the physical address, not virtual.
3 References: bnc#458811
4
5 This version differs significantly from the community patch,
6 that breaks kABI after RC2, which is considered worse than
7 deviating from upstream (at least in this area).
8
9 Instead of actually _passing_ the physical address to
10 uv_bios_mq_watchlist_alloc() it's converted locally.
11
12 Signed-off-by: Raymund Will <rw@suse.de>
13
14 ---
15 arch/x86/kernel/bios_uv.c | 4 +++-
16 drivers/misc/sgi-xp/xpc_uv.c | 4 ++--
17 include/asm-x86/uv/bios.h | 2 +-
18 3 files changed, 6 insertions(+), 4 deletions(-)
19
20 --- a/arch/x86/kernel/bios_uv.c
21 +++ b/arch/x86/kernel/bios_uv.c
22 @@ -101,13 +101,15 @@ s64 uv_bios_get_sn_info(int fc, int *uvt
23 }
24
25 int
26 -uv_bios_mq_watchlist_alloc(int blade, unsigned long addr, unsigned int mq_size,
27 +uv_bios_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size,
28 unsigned long *intr_mmr_offset)
29 {
30 union uv_watchlist_u size_blade;
31 + unsigned long addr;
32 u64 watchlist;
33 s64 ret;
34
35 + addr = uv_gpa(mq);
36 size_blade.size = mq_size;
37 size_blade.blade = blade;
38
39 --- a/drivers/misc/sgi-xp/xpc_uv.c
40 +++ b/drivers/misc/sgi-xp/xpc_uv.c
41 @@ -119,7 +119,7 @@ xpc_gru_mq_watchlist_alloc_uv(struct xpc
42 int ret;
43
44 #if defined CONFIG_X86_64
45 - ret = uv_bios_mq_watchlist_alloc(mq->mmr_blade, uv_gpa(mq->address),
46 + ret = uv_bios_mq_watchlist_alloc(mq->mmr_blade, mq->address,
47 mq->order, &mq->mmr_offset);
48 if (ret < 0) {
49 dev_err(xpc_part, "uv_bios_mq_watchlist_alloc() failed, "
50 @@ -127,7 +127,7 @@ xpc_gru_mq_watchlist_alloc_uv(struct xpc
51 return ret;
52 }
53 #elif defined CONFIG_IA64_GENERIC || defined CONFIG_IA64_SGI_UV
54 - ret = sn_mq_watchlist_alloc(mq->mmr_blade, uv_gpa(mq->address),
55 + ret = sn_mq_watchlist_alloc(mq->mmr_blade, mq->address,
56 mq->order, &mq->mmr_offset);
57 if (ret < 0) {
58 dev_err(xpc_part, "sn_mq_watchlist_alloc() failed, ret=%d\n",
59 --- a/include/asm-x86/uv/bios.h
60 +++ b/include/asm-x86/uv/bios.h
61 @@ -100,7 +100,7 @@ extern s64 uv_bios_call_reentrant(enum u
62
63 extern s64 uv_bios_get_sn_info(int, int *, long *, long *, long *);
64 extern s64 uv_bios_freq_base(u64, u64 *);
65 -extern int uv_bios_mq_watchlist_alloc(int, unsigned long, unsigned int,
66 +extern int uv_bios_mq_watchlist_alloc(int, void *, unsigned int,
67 unsigned long *);
68 extern int uv_bios_mq_watchlist_free(int, int);
69 extern s64 uv_bios_change_memprotect(u64, u64, enum uv_memprotect);