* PCI Backend -- Configuration overlay for MSI capability
*/
#include <linux/pci.h>
+#include <linux/slab.h>
#include "conf_space.h"
#include "conf_space_capability.h"
#include <xen/interface/io/pciif.h>
int pciback_enable_msix(struct pciback_device *pdev,
struct pci_dev *dev, struct xen_pci_op *op)
{
- int i;
- int result;
- struct msix_entry entries[op->value];
+ int i, result;
+ struct msix_entry *entries;
if (op->value > SH_INFO_MAX_VEC)
return -EINVAL;
+ entries = kmalloc(op->value * sizeof(*entries));
+ if (entries == NULL)
+ return -ENOMEM;
+
for (i = 0; i < op->value; i++) {
entries[i].entry = op->msix_entries[i].entry;
entries[i].vector = op->msix_entries[i].vector;
op->msix_entries[i].vector = entries[i].vector;
}
+ kfree(entries);
+
op->value = result;
return result;