A set of fixes for PCI/MSI and x86 interrupt startup:

 - Mask all MSI-X entries when enabling MSI-X otherwise stale unmasked
   entries stay around e.g. when a crashkernel is booted.

 - Enforce masking of a MSI-X table entry when updating it, which mandatory
   according to speification

 - Ensure that writes to MSI[-X} tables are flushed.

 - Prevent invalid bits being set in the MSI mask register

 - Properly serialize modifications to the mask cache and the mask register
   for multi-MSI.

 - Cure the violation of the affinity setting rules on X86 during interrupt
   startup which can cause lost and stale interrupts. Move the initial
   affinity setting ahead of actualy enabling the interrupt.

 - Ensure that MSI interrupts are completely torn down before freeing them
   in the error handling case.

 - Prevent an array out of bounds access in the irq timings code.