Message ID | CALicx6sbypKc1x9Qu+J0rf6iKGmK7eDpTwUn14b51-QmdUfKhQ@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, 13 Feb 2017, Vijay Kilari wrote: > Hi Andre, > > I tried your patch series on HW. Dom0 boots but no LPIs are coming to Dom0. > So I made below patch to consider segment ID in generating devid, > I see below panic from _xmalloc(). > > Complete log is here > http://pastebin.com/btythn2V > > diff --git a/xen/arch/arm/physdev.c b/xen/arch/arm/physdev.c > index 6e02de4..72ffe9f 100644 > --- a/xen/arch/arm/physdev.c > +++ b/xen/arch/arm/physdev.c > @@ -17,6 +17,7 @@ > int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) > { > struct physdev_manage_pci manage; > + struct physdev_pci_device_add pci_add; > u32 devid; > int ret; > > @@ -33,6 +34,19 @@ int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) > cmd == PHYSDEVOP_manage_pci_add); > > return ret; > + case PHYSDEVOP_pci_device_add: > + if ( copy_from_guest(&pci_add, arg, 1) != 0 ) > + return -EFAULT; > + devid = pci_add.seg << 16 | pci_add.bus << 8 | pci_add.devfn; > + > + printk("In %s calling gicv3_its_map_device for S: %d B: > %d F:%d DEVID %u\n", > + __func__, pci_add.seg,pci_add.bus, pci_add.devfn, devid); > + /* Allocate an ITS device table with space for 32 MSIs */ > + ret = gicv3_its_map_guest_device(hardware_domain, devid, devid, 5, > + cmd == PHYSDEVOP_pci_device_add); > + > + return ret; > } Hi Vijay, thanks for testing the series. Instead of implementing PHYSDEVOP_pci_device_add here, could you call gicv3_its_map_guest_device for each device statically from a Cavium specific platform file under xen/arch/arm/platforms? Once we'll have a clearer idea about how to implement which hypercalls, we'll do this properly.
diff --git a/xen/arch/arm/physdev.c b/xen/arch/arm/physdev.c index 6e02de4..72ffe9f 100644 --- a/xen/arch/arm/physdev.c +++ b/xen/arch/arm/physdev.c @@ -17,6 +17,7 @@ int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { struct physdev_manage_pci manage; + struct physdev_pci_device_add pci_add; u32 devid; int ret; @@ -33,6 +34,19 @@ int do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) cmd == PHYSDEVOP_manage_pci_add); return ret; + case PHYSDEVOP_pci_device_add: + if ( copy_from_guest(&pci_add, arg, 1) != 0 ) + return -EFAULT; + devid = pci_add.seg << 16 | pci_add.bus << 8 | pci_add.devfn; + + printk("In %s calling gicv3_its_map_device for S: %d B: %d F:%d DEVID %u\n", + __func__, pci_add.seg,pci_add.bus, pci_add.devfn, devid); + /* Allocate an ITS device table with space for 32 MSIs */ + ret = gicv3_its_map_guest_device(hardware_domain, devid, devid, 5, + cmd == PHYSDEVOP_pci_device_add); + + return ret; }