* kdump broken on Altix 350
@ 2008-08-29 16:03 Bernhard Walle
2008-08-29 16:05 ` Bernhard Walle
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Bernhard Walle @ 2008-08-29 16:03 UTC (permalink / raw)
To: Tony Luck, jlan; +Cc: kexec, linux-ia64
Hi Tony,
your commit
commit 10617bbe84628eb18ab5f723d3ba35005adde143
Author: Tony Luck <tony.luck@intel.com>
Date: Tue Aug 12 10:34:20 2008 -0700
[IA64] Ensure cpu0 can access per-cpu variables in early boot code
broke kdump on our Altix 350. I get following early crash in kdump
kernel:
------------------------------------- 8< ------------------------------
Pid: 1, CPU 0, comm: swapper
psr : 00001010085a6010 ifs : 800000000000038a ip :
[<a0000001004faaf0>] Not tainted (2.6.27-rc2-default)
ip is at __rtnl_register+0x150/0x1a0
unat: 0000000000000000 pfs : 000000000000038b rsc : 0000000000000003
rnat: 0000000000000014 bsps: 000000000001003e pr : 0000000000006581
ldrs: 0000000000000000 ccv : 0000000000000000 fpsr: 0009804c8a70433f
csd : 0000000000000000 ssd : 0000000000000000
b0 : a0000001004fab70 b6 : a0000001002a8de0 b7 : a000000100434340
f6 : 1003e0000000000000000 f7 : 1003e8888888888888889
f8 : 1003e0000000000000000 f9 : 1003e0000000000000001
f10 : 1003e0000000000000f00 f11 : 1003e00000000000000a0
r1 : a000000100c27bf0 r2 : a000000100a3db68 r3 : a000000100a32be0
r8 : 0000005200000051 r9 : a000000100a0ca40 r10 : 000000019873d109
r11 : fffffffe602b9dae r12 : e0000030192cfdf0 r13 : e0000030192c8000
r14 : 0000005200000071 r15 : 0000000000000000 r16 : 0000000000000000
r17 : a000000100a0be40 r18 : a000000100a3acb0 r19 : a000000100a3acb8
r20 : a000000100a32208 r21 : a000000100a321e8 r22 : 0000000000000000
r23 : e000003037449454 r24 : 0000000000000001 r25 : 0000000000000000
r26 : 0000000000000001 r27 : 00000010085a6010 r28 : e000003019298040
r29 : e000003019298030 r30 : 0000000000000000 r31 : a000000100a0ca38
Call Trace:
[<a000000100016320>] show_stack+0x40/0xa0
spà000030192cf9c0 bspà000030192c90b0
[<a000000100016c30>] show_regs+0x850/0x8a0
spà000030192cfb90 bspà000030192c9058
[<a000000100039d90>] die+0x1b0/0x2c0
spà000030192cfb90 bspà000030192c9010
[<a000000100609a00>] ia64_do_page_fault+0x9a0/0xb00
spà000030192cfb90 bspà000030192c8fb0
[<a00000010000c720>] ia64_native_leave_kernel+0x0/0x270
spà000030192cfc20 bspà000030192c8fb0
[<a0000001004faaf0>] __rtnl_register+0x150/0x1a0
spà000030192cfdf0 bspà000030192c8f60
[<a0000001004fab70>] rtnl_register+0x30/0x80
spà000030192cfdf0 bspà000030192c8f28
[<a000000100808a00>] rtnetlink_init+0x180/0x2a0
spà000030192cfdf0 bspà000030192c8f08
[<a000000100809a40>] netlink_proto_init+0x380/0x3e0
spà000030192cfdf0 bspà000030192c8ec8
[<a00000010000a960>] do_one_initcall+0xa0/0x2e0
spà000030192cfdf0 bspà000030192c8e88
[<a0000001007c4700>] kernel_init+0x4c0/0x580
spà000030192cfe30 bspà000030192c8e68
[<a000000100014870>] kernel_thread_helper+0xd0/0x100
spà000030192cfe30 bspà000030192c8e40
[<a00000010000a4c0>] start_kernel_thread+0x20/0x40
spà000030192cfe30 bspà000030192c8e40
Kernel panic - not syncing: Attempted to kill init!
------------------------------------- >8 ------------------------------
Since the code is very IA64-specific and I don't have the time now to
read all data sheets, I need your help to resolve that issue. :)
Bernhard
--
Bernhard Walle, SUSE Linux Products GmbH, Architecture Development
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: kdump broken on Altix 350 2008-08-29 16:03 kdump broken on Altix 350 Bernhard Walle @ 2008-08-29 16:05 ` Bernhard Walle 2008-08-29 20:42 ` Luck, Tony 2008-09-10 12:19 ` Bernhard Walle 2008-09-29 23:42 ` Luck, Tony 2 siblings, 1 reply; 13+ messages in thread From: Bernhard Walle @ 2008-08-29 16:05 UTC (permalink / raw) To: Tony Luck; +Cc: jlan, linux-ia64, kexec * Bernhard Walle [2008-08-29 18:03]: > > your commit > > commit 10617bbe84628eb18ab5f723d3ba35005adde143 > Author: Tony Luck <tony.luck@intel.com> > Date: Tue Aug 12 10:34:20 2008 -0700 > > [IA64] Ensure cpu0 can access per-cpu variables in early boot code > > broke kdump on our Altix 350. I get following early crash in kdump > kernel: Ah, and the kexec call was /sbin/kexec -p /boot/vmlinuz-2.6.27-rc2-default --append=" root=/dev/disk/by-id/scsi-SATA_HDS722580VLSA80_VNRB3KC2CZY0RL-part4 kdb=on sysrq=1 console=tty1 console=ttySG0,38400 thash_entries 97152 elevatorfiadline sysrq=1 reset_devices irqpoll maxcpus=1 " --initrd=/boot/initrd-2.6.27-rc2-default-kdump --noio The interesting thing should be the kernel command line here. Bernhard -- Bernhard Walle, SUSE Linux Products GmbH, Architecture Development -- To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: kdump broken on Altix 350 2008-08-29 16:05 ` Bernhard Walle @ 2008-08-29 20:42 ` Luck, Tony 2008-08-29 20:48 ` Bernhard Walle 2008-09-10 11:48 ` Bernhard Walle 0 siblings, 2 replies; 13+ messages in thread From: Luck, Tony @ 2008-08-29 20:42 UTC (permalink / raw) To: Bernhard Walle Cc: jlan@sgi.com, linux-ia64@vger.kernel.org, kexec@lists.infradead.org > your commit > > commit 10617bbe84628eb18ab5f723d3ba35005adde143 > Author: Tony Luck <tony.luck@intel.com> > Date: Tue Aug 12 10:34:20 2008 -0700 > > [IA64] Ensure cpu0 can access per-cpu variables in early boot code > > broke kdump on our Altix 350. I get following early crash in kdump > kernel Sorry about that. I'll try to reproduce it here. Do you (or anyone else reading this) know if the version of kexec that ships with RHEL5.2 works with current 2.6.27-rc kernels (perhaps not a politically correct question to ask someone with a @suse.de address :-) -Tony ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: kdump broken on Altix 350 2008-08-29 20:42 ` Luck, Tony @ 2008-08-29 20:48 ` Bernhard Walle 2008-09-10 11:48 ` Bernhard Walle 1 sibling, 0 replies; 13+ messages in thread From: Bernhard Walle @ 2008-08-29 20:48 UTC (permalink / raw) To: Luck, Tony Cc: jlan@sgi.com, linux-ia64@vger.kernel.org, kexec@lists.infradead.org Am Fr 29 Aug 2008 22:42:40 CEST schrieb "Luck, Tony" <tony.luck@intel.com>: >> your commit >> >> commit 10617bbe84628eb18ab5f723d3ba35005adde143 >> Author: Tony Luck <tony.luck@intel.com> >> Date: Tue Aug 12 10:34:20 2008 -0700 >> >> [IA64] Ensure cpu0 can access per-cpu variables in early boot code >> >> broke kdump on our Altix 350. I get following early crash in kdump >> kernel > > Sorry about that. I'll try to reproduce it here. Do you (or anyone > else reading this) know if the version of kexec that ships with RHEL5.2 > works with current 2.6.27-rc kernels There's the danger of a zero-size /proc/vmcore, but that doesn't matter here. If you get a /proc/vmcore, regardless of the size, the bug did not hit you. :-) So you can use it here. Bernhard ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-08-29 20:42 ` Luck, Tony 2008-08-29 20:48 ` Bernhard Walle @ 2008-09-10 11:48 ` Bernhard Walle 2008-09-10 20:21 ` Jay Lan 1 sibling, 1 reply; 13+ messages in thread From: Bernhard Walle @ 2008-09-10 11:48 UTC (permalink / raw) To: kexec, jlan * "Luck, Tony" <tony.luck@intel.com> [2008-08-29]: > > your commit > > > > commit 10617bbe84628eb18ab5f723d3ba35005adde143 > > Author: Tony Luck <tony.luck@intel.com> > > Date: Tue Aug 12 10:34:20 2008 -0700 > > > > [IA64] Ensure cpu0 can access per-cpu variables in early boot > > code > > > > broke kdump on our Altix 350. I get following early crash in kdump > > kernel > > Sorry about that. I'll try to reproduce it here. I had some discussion about that with Jay Lan that he could not reproduce that on his machine. We thought it was different config, but now I can verify that the problem is reproducible here with the default configuration (plus CONFIG_SATA_VITESSE). Bernhard ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-09-10 11:48 ` Bernhard Walle @ 2008-09-10 20:21 ` Jay Lan 2008-09-27 1:00 ` Jay Lan 0 siblings, 1 reply; 13+ messages in thread From: Jay Lan @ 2008-09-10 20:21 UTC (permalink / raw) To: Bernhard Walle; +Cc: linux-ia64, Luck, Tony, kexec, Simon Horman Bernhard Walle wrote: > * "Luck, Tony" <tony.luck@intel.com> [2008-08-29]: > >>> your commit >>> >>> commit 10617bbe84628eb18ab5f723d3ba35005adde143 >>> Author: Tony Luck <tony.luck@intel.com> >>> Date: Tue Aug 12 10:34:20 2008 -0700 >>> >>> [IA64] Ensure cpu0 can access per-cpu variables in early boot >>> code >>> >>> broke kdump on our Altix 350. I get following early crash in kdump >>> kernel >> Sorry about that. I'll try to reproduce it here. > > I had some discussion about that with Jay Lan that he could not > reproduce that on his machine. We thought it was different config, but > now I can verify that the problem is reproducible here with the default > configuration (plus CONFIG_SATA_VITESSE). Hi Bernhard and Tony, I started seeing this problem, and it affected A4700 in addition to A350. It was not clear the system hang was related to this problem. I saw a kdump kernel hang at cpu_init() at an A350, and a hang in find_memory on handling pernode space thing at an A4700. No error records and no backtrace, so i did not relate my problem to this one at first. Out of curiosity, i backed out Tony's patch mentioned from 2.6.27-rc5 and the kdump kernel hangs were gone on both systems. Also, i had a kdump kernel MCA problem that was caused by kexec underallocating kernel memory for the kdump kernel. The problem does not happen again after i backed out the patch. Regards, jay > > > Bernhard > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-09-10 20:21 ` Jay Lan @ 2008-09-27 1:00 ` Jay Lan 2008-09-29 20:55 ` Luck, Tony 0 siblings, 1 reply; 13+ messages in thread From: Jay Lan @ 2008-09-27 1:00 UTC (permalink / raw) To: Luck, Tony; +Cc: kexec, Bernhard Walle, Simon Horman, linux-ia64 Jay Lan wrote: > Bernhard Walle wrote: >> * "Luck, Tony" <tony.luck@intel.com> [2008-08-29]: >> >>>> your commit >>>> >>>> commit 10617bbe84628eb18ab5f723d3ba35005adde143 >>>> Author: Tony Luck <tony.luck@intel.com> >>>> Date: Tue Aug 12 10:34:20 2008 -0700 >>>> >>>> [IA64] Ensure cpu0 can access per-cpu variables in early boot >>>> code >>>> >>>> broke kdump on our Altix 350. I get following early crash in kdump >>>> kernel >>> Sorry about that. I'll try to reproduce it here. >> I had some discussion about that with Jay Lan that he could not >> reproduce that on his machine. We thought it was different config, but >> now I can verify that the problem is reproducible here with the default >> configuration (plus CONFIG_SATA_VITESSE). > > Hi Bernhard and Tony, > > I started seeing this problem, and it affected A4700 in addition to > A350. > > It was not clear the system hang was related to this problem. I saw a > kdump kernel hang at cpu_init() at an A350, and a hang in find_memory > on handling pernode space thing at an A4700. No error records and no > backtrace, so i did not relate my problem to this one at first. > > Out of curiosity, i backed out Tony's patch mentioned from 2.6.27-rc5 > and the kdump kernel hangs were gone on both systems. > > Also, i had a kdump kernel MCA problem that was caused by kexec > underallocating kernel memory for the kdump kernel. The problem > does not happen again after i backed out the patch. Tony and Simon, The program headers (PT_LOAD) of vmlinux before Tony's patch look like these: Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000010000 0xa000000100000000 0x0000000004000000 0x0000000000d04480 0x0000000000d04480 RWE 10000 LOAD 0x0000000000d20000 0xffffffffffff0000 0x0000000004d10000 0x0000000000009620 0x0000000000009620 RW 10000 LOAD 0x0000000000d30000 0xa000000100d20000 0x0000000004d20000 0x00000000000bef50 0x0000000000564c90 RW 10000 The program headers of vmlinux after Tony's patch look like these: Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flags Align LOAD 0x0000000000010000 0xa000000100000000 0x0000000004000000 0x0000000000d04480 0x0000000000d04480 RWE 10000 LOAD 0x0000000000d20000 0xffffffffffff0000 0x0000000004d20000 0x0000000000009620 0x0000000000009620 RW 10000 LOAD 0x0000000000d30000 0xa000000100d30000 0x0000000004d30000 0x00000000000bef58 0x0000000000564c90 RW 10000 The first PT_LOAD is for code, the second for percpu, and the third for data. The FileSiz and MemSiz of the code and percpu headers in both cases are identical. The only difference is the PhyAddr of the percpu header after the patch is 0x10000 greater than in the case of before patch. Tony's patch put per-cpu area for cpu0 in the vmlinux itself (in the percpu section of the ELF executable). If i read the code correctly, he added extra PERCPU_PAGE_SIZE (0x10000 in ia64) to the code segment. That explains why the PhysAddr of the percpu segment became 0x10000 greater after the patch. Howver, shouldn't the MemSiz of the code segment 0x10000 larger? The current logic of add_loaded_segments_info() in kexec/arch/ia64/crashdump-ia64.c counts on that information to correctly determine how much memory is needed for vmlinux. I could not figure out how the MemSiz of the code PL_LOAD header in vmlinux is determined and set. Regards, - jay ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: kdump broken on Altix 350 2008-09-27 1:00 ` Jay Lan @ 2008-09-29 20:55 ` Luck, Tony 0 siblings, 0 replies; 13+ messages in thread From: Luck, Tony @ 2008-09-29 20:55 UTC (permalink / raw) To: Jay Lan Cc: kexec@lists.infradead.org, Bernhard Walle, Simon Horman, linux-ia64@vger.kernel.org Maybe I'm starting to see what happened ... and it could well be my fault. I wanted to allocate the per-cpu memory for cpu0 statically in the vmlinux ... so it would be available in head.S to set up everything before we move to any C code that might try to access per cpu variables. To make life easy for myself I just made this allocation in vmlinus.lds.S immediately before the initialized block where all the percpu variables live (which means no extra labels ... and I could initialize this data with a simple copy of PERCPU_PAGESIZE bytes from (the poorly named) __phys_per_cpu_start to the unamed block before it that will be the cpu0 copy. But my extra allocation is in the "percpu" block in vmlinux.lds.S, so it ends up in that PT_LOAD section. Which ultimately confuses the kexec code. Probably the cpu0 percpu space should be placed in the data section. -Tony ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-08-29 16:03 kdump broken on Altix 350 Bernhard Walle 2008-08-29 16:05 ` Bernhard Walle @ 2008-09-10 12:19 ` Bernhard Walle 2008-09-29 23:42 ` Luck, Tony 2 siblings, 0 replies; 13+ messages in thread From: Bernhard Walle @ 2008-09-10 12:19 UTC (permalink / raw) To: Bernhard Walle; +Cc: jlan, linux-ia64, Tony Luck, kexec * Bernhard Walle <bwalle@suse.de> [2008-08-29]: > broke kdump on our Altix 350. I get following early crash in kdump > kernel: Just as side note: I still have the problem with 2.6.27-rc6. Bernhard ^ permalink raw reply [flat|nested] 13+ messages in thread
* RE: kdump broken on Altix 350 2008-08-29 16:03 kdump broken on Altix 350 Bernhard Walle 2008-08-29 16:05 ` Bernhard Walle 2008-09-10 12:19 ` Bernhard Walle @ 2008-09-29 23:42 ` Luck, Tony 2008-09-30 0:30 ` Jay Lan 2008-10-02 5:13 ` Simon Horman 2 siblings, 2 replies; 13+ messages in thread From: Luck, Tony @ 2008-09-29 23:42 UTC (permalink / raw) To: Jay Lan Cc: kexec@lists.infradead.org, Bernhard Walle, Simon Horman, linux-ia64@vger.kernel.org Does this make kexec/kdump happier? Bare minimum testing so far (builds and boots on tiger ... didn't try kexec yet). [IA64] Put the space for cpu0 per-cpu area into .data section Initial fix for making sure that we can access percpu variables in all C code commit: 10617bbe84628eb18ab5f723d3ba35005adde143 inadvertantly allocated the memory in the "percpu" section of the vmlinux ELF executable. This confused kexec. Signed-off-by: Tony Luck <tony.luck@intel.com> diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h index f667998..1a873b3 100644 --- a/arch/ia64/include/asm/sections.h +++ b/arch/ia64/include/asm/sections.h @@ -11,6 +11,9 @@ #include <asm-generic/sections.h> extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; +#ifdef CONFIG_SMP +extern char __cpu0_per_cpu[]; +#endif extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; extern char __start___rse_patchlist[], __end___rse_patchlist[]; extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S index 8bdea8e..66e491d 100644 --- a/arch/ia64/kernel/head.S +++ b/arch/ia64/kernel/head.S @@ -367,16 +367,17 @@ start_ap: ;; #else (isAP) br.few 2f - mov r20=r19 - sub r19=r19,r18 + movl r20=__cpu0_per_cpu ;; shr.u r18=r18,3 1: - ld8 r21=[r20],8;; - st8[r19]=r21,8 + ld8 r21=[r19],8;; + st8[r20]=r21,8 adds r18=-1,r18;; cmp4.lt p7,p6=0,r18 (p7) br.cond.dptk.few 1b + mov r19=r20 + ;; 2: #endif tpa r19=r19 diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index de71da8..10a7d47 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S @@ -215,9 +215,6 @@ SECTIONS /* Per-cpu data: */ percpu : { } :percpu . = ALIGN(PERCPU_PAGE_SIZE); -#ifdef CONFIG_SMP - . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ -#endif __phys_per_cpu_start = .; .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) { @@ -233,6 +230,11 @@ SECTIONS data : { } :data .data : AT(ADDR(.data) - LOAD_OFFSET) { +#ifdef CONFIG_SMP + . = ALIGN(PERCPU_PAGE_SIZE); + __cpu0_per_cpu = .; + . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ +#endif DATA_DATA *(.data1) *(.gnu.linkonce.d*) diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c index e566ff4..0ee085e 100644 --- a/arch/ia64/mm/contig.c +++ b/arch/ia64/mm/contig.c @@ -163,7 +163,7 @@ per_cpu_init (void) * get_zeroed_page(). */ if (first_time) { - void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; + void *cpu0_data = __cpu0_per_cpu; first_time=0; diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 78026aa..d8c5fcd 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c @@ -144,7 +144,7 @@ static void *per_cpu_node_setup(void *cpu_data, int node) for_each_possible_early_cpu(cpu) { if (cpu = 0) { - void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; + void *cpu0_data = __cpu0_per_cpu; __per_cpu_offset[cpu] = (char*)cpu0_data - __per_cpu_start; } else if (node = node_cpuid[cpu].nid) { ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-09-29 23:42 ` Luck, Tony @ 2008-09-30 0:30 ` Jay Lan 2008-10-02 5:13 ` Simon Horman 1 sibling, 0 replies; 13+ messages in thread From: Jay Lan @ 2008-09-30 0:30 UTC (permalink / raw) To: Luck, Tony Cc: kexec@lists.infradead.org, Bernhard Walle, Simon Horman, linux-ia64@vger.kernel.org Luck, Tony wrote: > Does this make kexec/kdump happier? Bare minimum testing so far > (builds and boots on tiger ... didn't try kexec yet). Hi Tony, Yep, the 2.6.27-rc7 kdump kernel built with this patch worked fine! Actually you probably can predict the results by doing 'readelf -l vmlinux'. If the PT_LOAD headers do not have a gap betweens headers, it is good. In other words, if the (PhysAddr+MemSiz) rounded up to Align value of one header is the same as the PhysAddr of the next header, kexec should produce a good boot memmap for the kdump kernel. Thanks for the patch! jay > > > > [IA64] Put the space for cpu0 per-cpu area into .data section > > Initial fix for making sure that we can access percpu variables > in all C code commit: 10617bbe84628eb18ab5f723d3ba35005adde143 > inadvertantly allocated the memory in the "percpu" section of > the vmlinux ELF executable. This confused kexec. > > Signed-off-by: Tony Luck <tony.luck@intel.com> > > diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h > index f667998..1a873b3 100644 > --- a/arch/ia64/include/asm/sections.h > +++ b/arch/ia64/include/asm/sections.h > @@ -11,6 +11,9 @@ > #include <asm-generic/sections.h> > > extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; > +#ifdef CONFIG_SMP > +extern char __cpu0_per_cpu[]; > +#endif > extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; > extern char __start___rse_patchlist[], __end___rse_patchlist[]; > extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; > diff --git a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S > index 8bdea8e..66e491d 100644 > --- a/arch/ia64/kernel/head.S > +++ b/arch/ia64/kernel/head.S > @@ -367,16 +367,17 @@ start_ap: > ;; > #else > (isAP) br.few 2f > - mov r20=r19 > - sub r19=r19,r18 > + movl r20=__cpu0_per_cpu > ;; > shr.u r18=r18,3 > 1: > - ld8 r21=[r20],8;; > - st8[r19]=r21,8 > + ld8 r21=[r19],8;; > + st8[r20]=r21,8 > adds r18=-1,r18;; > cmp4.lt p7,p6=0,r18 > (p7) br.cond.dptk.few 1b > + mov r19=r20 > + ;; > 2: > #endif > tpa r19=r19 > diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S > index de71da8..10a7d47 100644 > --- a/arch/ia64/kernel/vmlinux.lds.S > +++ b/arch/ia64/kernel/vmlinux.lds.S > @@ -215,9 +215,6 @@ SECTIONS > /* Per-cpu data: */ > percpu : { } :percpu > . = ALIGN(PERCPU_PAGE_SIZE); > -#ifdef CONFIG_SMP > - . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ > -#endif > __phys_per_cpu_start = .; > .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) > { > @@ -233,6 +230,11 @@ SECTIONS > data : { } :data > .data : AT(ADDR(.data) - LOAD_OFFSET) > { > +#ifdef CONFIG_SMP > + . = ALIGN(PERCPU_PAGE_SIZE); > + __cpu0_per_cpu = .; > + . = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */ > +#endif > DATA_DATA > *(.data1) > *(.gnu.linkonce.d*) > diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c > index e566ff4..0ee085e 100644 > --- a/arch/ia64/mm/contig.c > +++ b/arch/ia64/mm/contig.c > @@ -163,7 +163,7 @@ per_cpu_init (void) > * get_zeroed_page(). > */ > if (first_time) { > - void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; > + void *cpu0_data = __cpu0_per_cpu; > > first_time=0; > > diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c > index 78026aa..d8c5fcd 100644 > --- a/arch/ia64/mm/discontig.c > +++ b/arch/ia64/mm/discontig.c > @@ -144,7 +144,7 @@ static void *per_cpu_node_setup(void *cpu_data, int node) > > for_each_possible_early_cpu(cpu) { > if (cpu = 0) { > - void *cpu0_data = __phys_per_cpu_start - PERCPU_PAGE_SIZE; > + void *cpu0_data = __cpu0_per_cpu; > __per_cpu_offset[cpu] = (char*)cpu0_data - > __per_cpu_start; > } else if (node = node_cpuid[cpu].nid) { > -- > To unsubscribe from this list: send the line "unsubscribe linux-ia64" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-09-29 23:42 ` Luck, Tony 2008-09-30 0:30 ` Jay Lan @ 2008-10-02 5:13 ` Simon Horman 2008-10-02 17:04 ` Jay Lan 1 sibling, 1 reply; 13+ messages in thread From: Simon Horman @ 2008-10-02 5:13 UTC (permalink / raw) To: Luck, Tony Cc: Jay Lan, Bernhard Walle, linux-ia64@vger.kernel.org, kexec@lists.infradead.org On Mon, Sep 29, 2008 at 04:42:52PM -0700, Luck, Tony wrote: > Does this make kexec/kdump happier? Bare minimum testing so far > (builds and boots on tiger ... didn't try kexec yet). Hi Tony, your analysis (in your previous email) was more or less the same conclusion that I had come too, though I was puzzling over why you had put the reserved area for cpu0 where you had - I assumed I was misunderstanding things. This patch looks good to me. Jay, With this patch I assume that we still need an order of operations fix for kexec-tools but no section merging changes. Is that correct? -- Simon Horman VA Linux Systems Japan K.K., Sydney, Australia Satellite Office H: www.vergenet.net/~horms/ W: www.valinux.co.jp/en ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: kdump broken on Altix 350 2008-10-02 5:13 ` Simon Horman @ 2008-10-02 17:04 ` Jay Lan 0 siblings, 0 replies; 13+ messages in thread From: Jay Lan @ 2008-10-02 17:04 UTC (permalink / raw) To: Simon Horman Cc: kexec@lists.infradead.org, Bernhard Walle, Luck, Tony, linux-ia64@vger.kernel.org Simon Horman wrote: > On Mon, Sep 29, 2008 at 04:42:52PM -0700, Luck, Tony wrote: >> Does this make kexec/kdump happier? Bare minimum testing so far >> (builds and boots on tiger ... didn't try kexec yet). > > Hi Tony, > > your analysis (in your previous email) was more or less the same > conclusion that I had come too, though I was puzzling over > why you had put the reserved area for cpu0 where you had - I assumed > I was misunderstanding things. > > This patch looks good to me. > > Jay, > > With this patch I assume that we still need an order of operations fix for > kexec-tools but no section merging changes. Is that correct? I think the code should still be simplified. The 'break' of the if-statement has never been executed due to the mistake in operation precedence. Thus, the code have been doing segment merging by calculating p_memsz of each segment without having to deal with 'gap' between PT_LOAD headers. As demonstrated by this incidence, when there is a gap happened, the kernel boot fail. So, if we assume the PT_LOAD headers will be generated correctly, then the segment merging logic should be simplified. It does not make sense to pick up p_memsz of each segment and do all those calculation. It caused confusion. Regards, jay ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-10-02 17:04 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-08-29 16:03 kdump broken on Altix 350 Bernhard Walle 2008-08-29 16:05 ` Bernhard Walle 2008-08-29 20:42 ` Luck, Tony 2008-08-29 20:48 ` Bernhard Walle 2008-09-10 11:48 ` Bernhard Walle 2008-09-10 20:21 ` Jay Lan 2008-09-27 1:00 ` Jay Lan 2008-09-29 20:55 ` Luck, Tony 2008-09-10 12:19 ` Bernhard Walle 2008-09-29 23:42 ` Luck, Tony 2008-09-30 0:30 ` Jay Lan 2008-10-02 5:13 ` Simon Horman 2008-10-02 17:04 ` Jay Lan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox