• Thomas Gleixner's avatar
    x86: Hyperv: Cleanup the irq mess · 1aec1696
    Thomas Gleixner authored
    The vmbus/hyperv interrupt handling is another complete trainwreck and
    probably the worst of all currently in tree.
    
    If CONFIG_HYPERV=y then the interrupt delivery to the vmbus happens
    via the direct HYPERVISOR_CALLBACK_VECTOR. So far so good, but:
    
      The driver requests first a normal device interrupt. The only reason
      to do so is to increment the interrupt stats of that device
      interrupt. For no reason it also installs a private flow handler.
    
      We have proper accounting mechanisms for direct vectors, but of
      course it's too much effort to add that 5 lines of code.
    
      Aside of that the alloc_intr_gate() is not protected against
      reallocation which makes module reload impossible.
    
    Solution to the problem is simple to rip out the whole mess and
    implement it correctly.
    
    First of all move all that code to arch/x86/kernel/cpu/mshyperv.c and
    merily install the HYPERVISOR_CALLBACK_VECTOR with proper reallocation
    protection and use the proper direct vector accounting mechanism.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Acked-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: linuxdrivers <devel@linuxdriverproject.org>
    Cc: x86 <x86@kernel.org>
    Link: http://lkml.kernel.org/r/20140223212739.028307673@linutronix.deSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    1aec1696
mshyperv.c 3.89 KB