• H
    KVM: ppc: optimize irq delivery path · d4cf3892
    Hollis Blanchard 提交于
    In kvmppc_deliver_interrupt is just one case left in the switch and it is a
    rare one (less than 8%) when looking at the exit numbers. Therefore we can
    at least drop the switch/case and if an if. I inserted an unlikely too, but
    that's open for discussion.
    
    In kvmppc_can_deliver_interrupt all frequent cases are in the default case.
    I know compilers are smart but we can make it easier for them. By writing
    down all options and removing the default case combined with the fact that
    ithe values are constants 0..15 should allow the compiler to write an easy
    jump table.
    Modifying kvmppc_can_deliver_interrupt pointed me to the fact that gcc seems
    to be unable to reduce priority_exception[x] to a build time constant.
    Therefore I changed the usage of the translation arrays in the interrupt
    delivery path completely. It is now using priority without translation to irq
    on the full irq delivery path.
    To be able to do that ivpr regs are stored by their priority now.
    
    Additionally the decision made in kvmppc_can_deliver_interrupt is already
    sufficient to get the value of interrupt_msr_mask[x]. Therefore we can replace
    the 16x4byte array used here with a single 4byte variable (might still be one
    miss, but the chance to find this in cache should be better than the right
    entry of the whole array).
    Signed-off-by: NChristian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
    Signed-off-by: NHollis Blanchard <hollisb@us.ibm.com>
    Signed-off-by: NAvi Kivity <avi@redhat.com>
    d4cf3892
44x_emulate.c 9.1 KB