refactoring io_apic.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Martin J. Bligh wrote:

>OK, I need to do something like this to io_apic.c - split the hardware
>specific parts out under mach-default, so we can override them for other
>subarchitectures. It's not finished, needs header file and makefile
>work. Would you be willing to take this if I do it? I'm not going to
>bother if you're not, such refactorings are a pig to maintain out of
>tree.
>
>Frankly, io_apic.c needs a damned good scrubbing anyway, but this seems
>like a reasonable first step to me. (we also need to cross-link better
>with x86_64 code, but ...not all in one go ;-)).
>  
>

Is it actually necessary to use the ioapic for paravirtualized Linux?  I 
was thinking you might be able to abstract around the problem by 
defining a new hw_interrupt_type, and providing custom handler routines 
in the sub-architecture - Visual Workstation is one sub-arch that does 
this.  See arch/i386/mach-visws/visws_apic.c for an interrupt controller 
implementation that doesn't require hacking up apic / ioapic.  This 
approach could be used to wrap Xen event channels onto virtual IRQs in 
Linux.  For SMP support you need to send IPIs as well - but this is easy 
enough, include/asm-i386/mach-xxx/mach_ipi.h is already a standard way 
to hook IPIs for the sub-arch.

Are there other reasons for requiring the APIC code to be dissected?  It 
is really messy in there, and it might be simpler to wrap around the Xen 
event / irq model directly by using the sub-arch to its fullest.  Two 
possible reasons I can think of might be that privileged domains need to 
actually control the hardware interrupt system, or that it is just 
easier to emulate the APIC for all guests since non-paravirtualized 
guests will need it as well (and thus you have only one interrupt system 
to debug).  These are both highly debatable and highly dubious 
speculations on my part.

That said, I'm not adverse to hacking up the APIC code to encapsulate 
the hardware accessors, I'm just unsure if it is actually a requirement.

Zach

[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux