kernel update (third patch relative to 2.4.2)
The latest IA-64 patch is now available at:
ftp://ftp.kernel.org/pub/linux/kernel/ports/ia64/
in file linux-2.4.2-ia64-010326.diff*
The only two changes are:
o fix do_csum_partial_copy_from_user() to work properly
o fix ia64_ksyms.c so it compiles for UP as well
Enjoy,
--david
Some of you reported that the 2.4.2 based kernels no longer boot properly because /sbin/init got stuck. Andreas Schwab found that this happened only when using a page size smaller than 16KB. I looked into this and it turned out to be a nasty initialization ordering problem. Basically, ia64_mmu_init() ended up using the "unimpl_va_mask" member in cpu_data[] before it was initialized, which made it appear as if the CPU implements all 64 virtual address bits. With a page size of 16KB or bigger, this happened to work mostly OK (though there could have been corner cases under which this would also have produced problems), but with a page size of 4 or 8KB, the kernel basically told the CPU that the entire address space is used for the virtually mapped page table. Of course, that doesn't work too well... ;-)
A patch to fix the problem is attached below. Please let me know how this goes. If nothing unexpected crops up, I'd like to update the patch on ftp.kernel.org on Monday.
--david
ia64/kernel/setup.c renamed from ia64/kernel/setup.c~ +8 -2
@@ -398,6 +398,14 @@pal_vm_info_2_u_t vmi;unsigned int max_ctx; +/* +* We can't pass "local_cpu_data" do identify_cpu() because we haven't called +* ia64_mmu_init() yet. And we can't call ia64_mmu_init() first because it +* depends on the data returned by identify_cpu(). We break the dependency by +* accessing cpu_data[] the old way, through identity mapped space. +*/ +identify_cpu (&cpu_data[smp_processor_id ()]); +/* Clear the stack memory reserved for pt_regs: */ memset (ia64_task_regs (current),0 ,sizeof (struct pt_regs ));
@@ -416,8 +424,6 @@ current->active_mm = &init_mm;ia64_mmu_init (); - -identify_cpu (local_cpu_data);#ifdef CONFIG_IA32_SUPPORT /* initialize global ia32 state - CR0 and CR4 */
David Mosberger <[email protected]> writes:
|> The latest IA-64 patch is now available at: |> |> ftp://ftp.kernel.org/pub/linux/kernel/ports/ia64/ |> |> in file linux-2.4.2-ia64-010326.diff* |> |> The only two changes are: |> |> o fix do_csum_partial_copy_from_user() to work properly |> o fix ia64_ksyms.c so it compiles for UP as well
Actually, for UP we need to export __flush_tlb_all for the agpgart module.
ia64_ksyms.c +3 -1
@@ -52,9 +52,11 @@EXPORT_SYMBOL_NOVERS (__down_write_failed);EXPORT_SYMBOL_NOVERS (__rwsem_wake); -#ifdef CONFIG_SMP #include <asm/pgalloc.h> +#ifdef CONFIG_SMP EXPORT_SYMBOL (smp_flush_tlb_all); +#else +EXPORT_SYMBOL (__flush_tlb_all);#endif #include <asm/page.h>
Andreas.
Signature · 5 lines
Andreas Schwab "And now for something SuSE Labs completely different." [email protected] SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5