lkml.org 
[lkml]   [2009]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Subject[PATCH] i386, entry_32: cleanup
Date
Hi Ingo and others!

Here is a new batch of patches to the entry code. I started
something similar a few months ago for x86_64, but I lack a
64-bit machine I can use to test at the moment, so I decided
to make a start on i386 instead.

This series takes on the SAVE_ALL macro, which expanded to a
pretty large number of instructions in every interrupt dispatcher
in entry_32.S. Instead, it now expands to a call to a function
(save_entry) that does the register saving and the preparation
needed to call C functions.

This also gets rid of the indirect call used in the interrupt
dispatcher. The old code does some interesting shuffle on the
stack to pass the address of the C handler to a common piece
of code. The new version creates a stub that for each interrupt,
where each stub calls save_entry, does a direct call to the
C handler and the jumps to a common return path.

I did some latency measurements and this code does not perform
significantly better or worse than the old code on a "Sempron
2400+". The original aim was to shrink entry_32.o, but this
goal was not reached. The size has not changes significantly,
mostly due to the due to the check for %ss==__ESPFIX_SS in the
exception stubs and the fact that the SAVE_ALL macro expanded
to a lot of small instructions. On the other hand, entry_32.S
shrunk by more than 10%:

arch/x86/kernel/cpu/mcheck/mce_32.c | 6 +
arch/x86/kernel/entry_32.S | 513 +++++++++++------------------------
2 files changed, 171 insertions(+), 348 deletions(-)

I'ld very much appreciate some more testing in the -x86 pool.

Greetings,
Alexander


\
 
 \ /
  Last update: 2009-05-21 01:21    [W:0.053 / U:0.256 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site