On Thu, Jul 08, 2004 at 02:32:40AM +1000, Omar Kilani wrote: > >This should be fixed properly in the next kernel that Arjan pushes > >out. Binary search on patches since the last working kernel and first > >broken one took a while, but it turned out to be something (sort of) > >trivial. > > Just out of interest, what was this sort of trivial something? :) The patch attached at the bottom of this mail went into 2.6.7bk11. > Oh, and has the fix for said something been upstreamed? It's an incompatability with the 4g/4g patch, and hence doesn't need to go upstream. It seems to be a valid change, so the quick fix for now is to just drop it as part of the 4g/4g patch. Dave # This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/06/27 10:53:48-07:00 stsp@xxxxxxxx # [PATCH] larger IO bitmaps # # The previous discussion was started here: # http://www.uwsg.iu.edu/hypermail/linux/kernel/0211.0/0477.html but in 2.4 # times this was kind of problematic. # # Now, with the lazy bitmap allocation and per-CPU TSS, this will really not # drain any resources I think. 8K TSS increase and 8K per process *that does # ioperm()* - I think it is not very bad. # # The reasons why I need that, are described in the URL above. Basically this # will allow to use full-screen VESA under dosemu (without LFB though), and this # may be also helpfull for the XFree project and some other projects: # # http://www.uwsg.iu.edu/hypermail/linux/kernel/9807.1/1079.html # # Signed-off-by: Andrew Morton <akpm@xxxxxxxx> # Signed-off-by: Linus Torvalds <torvalds@xxxxxxxx> # # include/asm-x86_64/processor.h # 2004/06/27 00:19:26-07:00 stsp@xxxxxxxx +2 -2 # larger IO bitmaps # # include/asm-mips/processor.h # 2004/06/27 00:19:26-07:00 stsp@xxxxxxxx +2 -2 # larger IO bitmaps # # include/asm-i386/processor.h # 2004/06/27 00:19:26-07:00 stsp@xxxxxxxx +3 -3 # larger IO bitmaps # # include/asm-i386/desc.h # 2004/06/27 00:19:26-07:00 stsp@xxxxxxxx +2 -1 # larger IO bitmaps # diff -Nru a/include/asm-i386/desc.h b/include/asm-i386/desc.h --- a/include/asm-i386/desc.h 2004-07-06 21:54:34 +01:00 +++ b/include/asm-i386/desc.h 2004-07-06 21:54:34 +01:00 @@ -44,7 +44,8 @@ static inline void __set_tss_desc(unsigned int cpu, unsigned int entry, void *addr) { - _set_tssldt_desc(&cpu_gdt_table[cpu][entry], (int)addr, 235, 0x89); + _set_tssldt_desc(&cpu_gdt_table[cpu][entry], (int)addr, + offsetof(struct tss_struct, __cacheline_filler) - 1, 0x89); } #define set_tss_desc(cpu,addr) __set_tss_desc(cpu, GDT_ENTRY_TSS, addr) diff -Nru a/include/asm-i386/processor.h b/include/asm-i386/processor.h --- a/include/asm-i386/processor.h 2004-07-06 21:54:34 +01:00 +++ b/include/asm-i386/processor.h 2004-07-06 21:54:34 +01:00 @@ -297,9 +297,9 @@ #define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) /* - * Size of io_bitmap, covering ports 0 to 0x3ff. + * Size of io_bitmap. */ -#define IO_BITMAP_BITS 1024 +#define IO_BITMAP_BITS 65536 #define IO_BITMAP_BYTES (IO_BITMAP_BITS/8) #define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long)) #define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap) @@ -391,7 +391,7 @@ /* * pads the TSS to be cacheline-aligned (size is 0x100) */ - unsigned long __cacheline_filler[5]; + unsigned long __cacheline_filler[37]; /* * .. and then another 0x100 bytes for emergency kernel stack */ diff -Nru a/include/asm-mips/processor.h b/include/asm-mips/processor.h --- a/include/asm-mips/processor.h 2004-07-06 21:54:34 +01:00 +++ b/include/asm-mips/processor.h 2004-07-06 21:54:34 +01:00 @@ -137,9 +137,9 @@ #endif /* - * Size of io_bitmap in longwords: 32 is ports 0-0x3ff. + * Size of io_bitmap in longwords. */ -#define IO_BITMAP_SIZE 32 +#define IO_BITMAP_SIZE 2048 #define NUM_FPU_REGS 32 diff -Nru a/include/asm-x86_64/processor.h b/include/asm-x86_64/processor.h --- a/include/asm-x86_64/processor.h 2004-07-06 21:54:34 +01:00 +++ b/include/asm-x86_64/processor.h 2004-07-06 21:54:34 +01:00 @@ -178,9 +178,9 @@ (test_thread_flag(TIF_IA32) ? TASK_UNMAPPED_32 : TASK_UNMAPPED_64) /* - * Size of io_bitmap, covering ports 0 to 0x3ff. + * Size of io_bitmap. */ -#define IO_BITMAP_BITS 1024 +#define IO_BITMAP_BITS 65536 #define IO_BITMAP_BYTES (IO_BITMAP_BITS/8) #define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long)) #define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap)