external modules: Fix pre-2.6.18 kernels
PATCH v2 1/1 external modules: Fix pre-2.6.18 kernels
pci_dev.msi_enabled was introduced in 2.6.18, thus building against older kernels now fails. Fix via a compat wrapper that reads directly from the PCI config space.
Signed-off-by Jan Kiszka <[email protected]>
---
kernel/external-module-compat-comm.h | 13 +++++++++++++ kernel/external-module-compat.c | 21 +++++++++++++++++++++ kernel/x86/hack-module.awk | 2 ++ 3 files changed, 36 insertions(+), 0 deletions(-)
kernel/external-module-compat-comm.h +13 -0
@@ -729,3 +729,16 @@ static inline void cpumask_clear_cpu(int cpu, cpumask_var_t mask)#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,28 )#define marker_synchronize_unregister () synchronize_sched()#endif + +/* pci_dev.msi_enable was introduced in 2.6.18 */ +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,18 ) + +struct pci_dev ; + +int kvm_pcidev_msi_enabled (struct pci_dev *dev); + +#else + +#define kvm_pcidev_msi_enabled (dev) (dev)->msi_enabled + +#endif
kernel/external-module-compat.c +21 -0
@@ -313,3 +313,24 @@ struct rchan *kvm_relay_open(const char *base_filename, }#endif + +#if LINUX_VERSION_CODE <KERNEL_VERSION (2 ,6 ,18 ) + +#include <linux/pci.h> + +int kvm_pcidev_msi_enabled (struct pci_dev *dev) +{ +int pos; +u16 control; + +if (!(pos =pci_find_capability (dev,PCI_CAP_ID_MSI ))) +return 0 ; + +pci_read_config_word (dev, pos +PCI_MSI_FLAGS , &control); +if (control &PCI_MSI_FLAGS_ENABLE ) +return 1 ; + +return 0 ; +} + +#endif
kernel/x86/hack-module.awk +2 -0
@@ -29,6 +29,8 @@ BEGIN { split("INIT_WORK tsc_khz desc_struct ldttss_desc64 desc_ptr " \ printf("MODULE_INFO(version, \"%s\");\n", version) } +{ sub(/match->dev->msi_enabled/, "kvm_pcidev_msi_enabled(match->dev)") } + /^static void __vmx_load_host_state/ { vmx_load_host_state = 1 }
Avi Kivity
AppliedQuoted 4 lines · Jan Kiszka
pci_dev.msi_enabled was introduced in 2.6.18, thus building against older kernels now fails. Fix via a compat wrapper that reads directly from the PCI config space.
Applied, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function