kexec: i8259-sysfs.x86_64
PATCH 2/14 kexec: i8259-sysfs.x86_64
The i8259 does not yet have sysfs support on x86_64 so here is the port from i386, including the shutdown code to disable it on reboot that kexec appreciates.
arch/x86_64/kernel/i8259.c +38 -0
@@ -343,6 +343,44 @@ } } +static int i8259A_resume (struct sys_device *dev) +{ +init_8259A (0 ); +return 0 ; +} + +static int i8259A_shutdown (struct sys_device *dev) +{ +/* Put the i8259A into a quiescent state that +* the kernel initialization code can get it +* out of. +*/ +outb (0xff ,0x21 );/* mask all of 8259A-1 */ +outb (0xff ,0xA1 );/* mask all of 8259A-1 */ +return 0 ; +} + +static struct sysdev_class i8259_sysdev_class = { +set_kset_name ("i8259" ), + .resume = i8259A_resume, + .shutdown = i8259A_shutdown, +}; + +static struct sys_device device_i8259A = { + .id =0 , + .cls = &i8259_sysdev_class, +}; + +static int __init i8259A_init_sysfs (void ) +{ +int error =sysdev_class_register (&i8259_sysdev_class); +if (!error) + error =sysdev_register (&device_i8259A); +return error; +} + +device_initcall (i8259A_init_sysfs); +void init_8259A (int auto_eoi) {unsigned long flags;
Quoted 2 lines · [email protected] (Eric W. Biederman) wrote:
The i8259 does not yet have sysfs support on
x86_64
umm, yes it does. It went into Linus's tree post 2.6.8.1.
I added the below make-it-compile patch. Please check it.
arch/x86_64/kernel/i8259.c renamed from arch/x86_64/kernel/i8259.c~kexec-x86_64-i8259-fixes +0 -38
@@ -343,44 +343,6 @@ spurious_8259A_irq: } } -static int i8259A_resume (struct sys_device *dev) -{ -init_8259A (0 ); -return 0 ; -} - -static int i8259A_shutdown (struct sys_device *dev) -{ -/* Put the i8259A into a quiescent state that -* the kernel initialization code can get it -* out of. -*/ -outb (0xff ,0x21 );/* mask all of 8259A-1 */ -outb (0xff ,0xA1 );/* mask all of 8259A-1 */ -return 0 ; -} - -static struct sysdev_class i8259_sysdev_class = { -set_kset_name ("i8259" ), - .resume = i8259A_resume, - .shutdown = i8259A_shutdown, -}; - -static struct sys_device device_i8259A = { - .id =0 , - .cls = &i8259_sysdev_class, -}; - -static int __init i8259A_init_sysfs (void ) -{ -int error =sysdev_class_register (&i8259_sysdev_class); -if (!error) - error =sysdev_register (&device_i8259A); -return error; -} - -device_initcall (i8259A_init_sysfs); -void init_8259A (int auto_eoi) {unsigned long flags;
_
Quoted 5 lines · Andrew Morton
Quoted 2 lines · [email protected] (Eric W. Biederman) wrote:
The i8259 does not yet have sysfs support on
x86_64umm, yes it does. It went into Linus's tree post 2.6.8.1.
Sorry I missed that one. I'm surprised I did not get a reject when I rebuilt that one against mm2. It appears I was in a bit of a rush.
Or why it would be nice for this code to be merged :)
Quoted 1 line
I added the below make-it-compile patch. Please check it.
Please just remove the previous patch and it's fix from your patchset, as together they are a noop.
The following patch simply adds a shutdown method to the x86_64 i8259 code. That is what I care about in the context of kexec.
While testing this I found a minor ide bug. I will have a patch for that in a second.
Eric
arch/x86_64/kernel/i8259.c +14 -0
@@ -416,10 +416,24 @@return 0 ; } + + +static int i8259A_shutdown (struct sys_device *dev) +{ +/* Put the i8259A into a quiescent state that +* the kernel initialization code can get it +* out of. +*/ +outb (0xff ,0x21 );/* mask all of 8259A-1 */ +outb (0xff ,0xA1 );/* mask all of 8259A-1 */ +return 0 ; +} +static struct sysdev_class i8259_sysdev_class = {set_kset_name ("i8259" ), .suspend = i8259A_suspend, .resume = i8259A_resume, + .shutdown = i8259A_shutdown, };static struct sys_device device_i8259A = {