x86-32: use non-lazy io bitmap context switching
Impact: remove 32-bit optimization to prepare unification x86-32 and -64 differ in the way they context-switch tasks with io permission bitmaps. x86-64 simply copies the next tasks io bitmap into place (if any) on context switch. x86-32 invalidates the bitmap on context switch, so that the next IO instruction will fault; at that point it installs the appropriate IO bitmap. This makes context switching IO-bitmap-using tasks a bit more less expensive, at the cost of making the next IO instruction slower due to the extra fault. This tradeoff only makes sense if IO-bitmap-using processes are relatively common, but they don't actually use IO instructions very often. However, in a typical desktop system, the only process likely to be using IO bitmaps is the X server, and nothing at all on a server. Therefore the lazy context switch doesn't really win all that much, and its just a gratuitious difference from 64-bit code. This patch removes the lazy context switch, with a view to unifying this code in a later change. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:

committed by
Ingo Molnar

parent
645af4e9e0
commit
db949bba3c
@@ -248,7 +248,6 @@ struct x86_hw_tss {
|
||||
#define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long))
|
||||
#define IO_BITMAP_OFFSET offsetof(struct tss_struct, io_bitmap)
|
||||
#define INVALID_IO_BITMAP_OFFSET 0x8000
|
||||
#define INVALID_IO_BITMAP_OFFSET_LAZY 0x9000
|
||||
|
||||
struct tss_struct {
|
||||
/*
|
||||
@@ -263,11 +262,6 @@ struct tss_struct {
|
||||
* be within the limit.
|
||||
*/
|
||||
unsigned long io_bitmap[IO_BITMAP_LONGS + 1];
|
||||
/*
|
||||
* Cache the current maximum and the last task that used the bitmap:
|
||||
*/
|
||||
unsigned long io_bitmap_max;
|
||||
struct thread_struct *io_bitmap_owner;
|
||||
|
||||
/*
|
||||
* .. and then another 0x100 bytes for the emergency kernel stack:
|
||||
|
Reference in New Issue
Block a user