* [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile @ 2014-10-27 17:34 Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init Marcel Apfelbaum ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Marcel Apfelbaum @ 2014-10-27 17:34 UTC (permalink / raw) To: qemu-devel; +Cc: mst, armbru, alex.williamson, marcel, pbonzini Hot-plugging a device that has a romfile (either supplied by user or built-in) using rombar=0 option is a user error, do not allow the device to be hot-plugged. v3 -> v4: - Fixed a typo in the commit (Eric Blake) v2 -> v3: - Reverse the decision to forbid the hotplug on user error (Michael S. Tsirkin) - Split the patch in two, first part being a separate fix (Markus Armbruster) v1 -> v2: After a discussion with Michael, Paolo and Alex, this patch silent drops the romfile instead of not allowing the hotplug. Marcel Apfelbaum (2): hw/pci: fixed error flow in pci_qdev_init hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile hw/pci/pci.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init 2014-10-27 17:34 [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum @ 2014-10-27 17:34 ` Marcel Apfelbaum 2014-10-30 13:33 ` Markus Armbruster 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum 2014-11-24 15:22 ` [Qemu-devel] [PATCH v4 0/2] " Marcel Apfelbaum 2 siblings, 1 reply; 14+ messages in thread From: Marcel Apfelbaum @ 2014-10-27 17:34 UTC (permalink / raw) To: qemu-devel; +Cc: mst, armbru, alex.williamson, marcel, pbonzini Verify return code for pci_add_option_rom. Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> --- hw/pci/pci.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 6ce75aa..36226eb 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1776,7 +1776,12 @@ static int pci_qdev_init(DeviceState *qdev) pci_dev->romfile = g_strdup(pc->romfile); is_default_rom = true; } - pci_add_option_rom(pci_dev, is_default_rom); + + rc = pci_add_option_rom(pci_dev, is_default_rom); + if (rc != 0) { + pci_unregister_device(DEVICE(pci_dev)); + return rc; + } return 0; } -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init Marcel Apfelbaum @ 2014-10-30 13:33 ` Markus Armbruster 2014-10-30 17:25 ` Marcel Apfelbaum 0 siblings, 1 reply; 14+ messages in thread From: Markus Armbruster @ 2014-10-30 13:33 UTC (permalink / raw) To: Marcel Apfelbaum; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst Marcel Apfelbaum <marcel.a@redhat.com> writes: > Verify return code for pci_add_option_rom. > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > --- > hw/pci/pci.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 6ce75aa..36226eb 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -1776,7 +1776,12 @@ static int pci_qdev_init(DeviceState *qdev) > pci_dev->romfile = g_strdup(pc->romfile); > is_default_rom = true; > } > - pci_add_option_rom(pci_dev, is_default_rom); > + > + rc = pci_add_option_rom(pci_dev, is_default_rom); > + if (rc != 0) { > + pci_unregister_device(DEVICE(pci_dev)); > + return rc; > + } > > return 0; > } Safe, because pci_add_option_rom() sets pci_dev->has_rom only on success, and pci_unregister_device() cleans up the ROM only when pci_has_rom is set. Reviewed-by: Markus Armbruster <armbru@redhat.com> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init 2014-10-30 13:33 ` Markus Armbruster @ 2014-10-30 17:25 ` Marcel Apfelbaum 0 siblings, 0 replies; 14+ messages in thread From: Marcel Apfelbaum @ 2014-10-30 17:25 UTC (permalink / raw) To: mst; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, Markus Armbruster On Thu, 2014-10-30 at 14:33 +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > Verify return code for pci_add_option_rom. > > > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > > --- > > hw/pci/pci.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > index 6ce75aa..36226eb 100644 > > --- a/hw/pci/pci.c > > +++ b/hw/pci/pci.c > > @@ -1776,7 +1776,12 @@ static int pci_qdev_init(DeviceState *qdev) > > pci_dev->romfile = g_strdup(pc->romfile); > > is_default_rom = true; > > } > > - pci_add_option_rom(pci_dev, is_default_rom); > > + > > + rc = pci_add_option_rom(pci_dev, is_default_rom); > > + if (rc != 0) { > > + pci_unregister_device(DEVICE(pci_dev)); > > + return rc; > > + } > > > > return 0; > > } > > Safe, because pci_add_option_rom() sets pci_dev->has_rom only on > success, and pci_unregister_device() cleans up the ROM only when > pci_has_rom is set. > > Reviewed-by: Markus Armbruster <armbru@redhat.com> Hi Michael, The series has been reviewed, can you please add it to your next pull request? Thanks, Marcel ^ permalink raw reply [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-10-27 17:34 [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init Marcel Apfelbaum @ 2014-10-27 17:34 ` Marcel Apfelbaum 2014-11-03 12:03 ` Markus Armbruster 2014-11-24 15:22 ` [Qemu-devel] [PATCH v4 0/2] " Marcel Apfelbaum 2 siblings, 1 reply; 14+ messages in thread From: Marcel Apfelbaum @ 2014-10-27 17:34 UTC (permalink / raw) To: qemu-devel; +Cc: mst, armbru, alex.williamson, marcel, pbonzini Hot-plugging a device that has a romfile (either supplied by user or built-in) using rombar=0 option is a user error, do not allow the device to be hot-plugged. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> --- hw/pci/pci.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 36226eb..371699c 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) * for 0.11 compatibility. */ int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); + + /* + * Hot-plugged devices can't use the option ROM + * if the rom bar is disabled. + */ + if (DEVICE(pdev)->hotplugged) { + return -1; + } + if (class == 0x0300) { rom_add_vga(pdev->romfile); } else { -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum @ 2014-11-03 12:03 ` Markus Armbruster 2014-11-03 12:46 ` Michael S. Tsirkin 2014-11-03 12:52 ` Marcel Apfelbaum 0 siblings, 2 replies; 14+ messages in thread From: Markus Armbruster @ 2014-11-03 12:03 UTC (permalink / raw) To: Marcel Apfelbaum; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst Marcel Apfelbaum <marcel.a@redhat.com> writes: > Hot-plugging a device that has a romfile (either supplied by user > or built-in) using rombar=0 option is a user error, > do not allow the device to be hot-plugged. > > Reviewed-by: Eric Blake <eblake@redhat.com> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > --- > hw/pci/pci.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > index 36226eb..371699c 100644 > --- a/hw/pci/pci.c > +++ b/hw/pci/pci.c > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > * for 0.11 compatibility. > */ > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > + > + /* > + * Hot-plugged devices can't use the option ROM > + * if the rom bar is disabled. > + */ > + if (DEVICE(pdev)->hotplugged) { > + return -1; > + } > + > if (class == 0x0300) { > rom_add_vga(pdev->romfile); > } else { Unlike the function's other unsuccessful returns, this one is silent. Intentional? ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 12:03 ` Markus Armbruster @ 2014-11-03 12:46 ` Michael S. Tsirkin 2014-11-03 12:52 ` Marcel Apfelbaum 1 sibling, 0 replies; 14+ messages in thread From: Michael S. Tsirkin @ 2014-11-03 12:46 UTC (permalink / raw) To: Markus Armbruster Cc: marcel, pbonzini, alex.williamson, qemu-devel, Marcel Apfelbaum On Mon, Nov 03, 2014 at 01:03:30PM +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > Hot-plugging a device that has a romfile (either supplied by user > > or built-in) using rombar=0 option is a user error, > > do not allow the device to be hot-plugged. > > > > Reviewed-by: Eric Blake <eblake@redhat.com> > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > > --- > > hw/pci/pci.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > index 36226eb..371699c 100644 > > --- a/hw/pci/pci.c > > +++ b/hw/pci/pci.c > > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > > * for 0.11 compatibility. > > */ > > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > > + > > + /* > > + * Hot-plugged devices can't use the option ROM > > + * if the rom bar is disabled. > > + */ > > + if (DEVICE(pdev)->hotplugged) { > > + return -1; > > + } > > + > > if (class == 0x0300) { > > rom_add_vga(pdev->romfile); > > } else { > > Unlike the function's other unsuccessful returns, this one is silent. > Intentional? Marcel, Markus, as I applied the patch already, if you want to fix things up pls send a new patch on top. Thanks! ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 12:03 ` Markus Armbruster 2014-11-03 12:46 ` Michael S. Tsirkin @ 2014-11-03 12:52 ` Marcel Apfelbaum 2014-11-03 13:40 ` Markus Armbruster 1 sibling, 1 reply; 14+ messages in thread From: Marcel Apfelbaum @ 2014-11-03 12:52 UTC (permalink / raw) To: Markus Armbruster; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > Hot-plugging a device that has a romfile (either supplied by user > > or built-in) using rombar=0 option is a user error, > > do not allow the device to be hot-plugged. > > > > Reviewed-by: Eric Blake <eblake@redhat.com> > > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > > --- > > hw/pci/pci.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > index 36226eb..371699c 100644 > > --- a/hw/pci/pci.c > > +++ b/hw/pci/pci.c > > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > > * for 0.11 compatibility. > > */ > > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > > + > > + /* > > + * Hot-plugged devices can't use the option ROM > > + * if the rom bar is disabled. > > + */ > > + if (DEVICE(pdev)->hotplugged) { > > + return -1; > > + } > > + > > if (class == 0x0300) { > > rom_add_vga(pdev->romfile); > > } else { > > Unlike the function's other unsuccessful returns, this one is silent. > Intentional? Yes, the first version included an error message, but was not accepted as the reviewers preferred "silent drop" instead. The main reason was that a proper error propagation mechanism should be used. At the time of the patch there was not such an option, but now there is. I can add it on top of your series, preferably after is merged. Thanks, Marcel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 12:52 ` Marcel Apfelbaum @ 2014-11-03 13:40 ` Markus Armbruster 2014-11-03 13:49 ` Marcel Apfelbaum 0 siblings, 1 reply; 14+ messages in thread From: Markus Armbruster @ 2014-11-03 13:40 UTC (permalink / raw) To: Marcel Apfelbaum; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst Marcel Apfelbaum <marcel.a@redhat.com> writes: > On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: >> Marcel Apfelbaum <marcel.a@redhat.com> writes: >> >> > Hot-plugging a device that has a romfile (either supplied by user >> > or built-in) using rombar=0 option is a user error, >> > do not allow the device to be hot-plugged. >> > >> > Reviewed-by: Eric Blake <eblake@redhat.com> >> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> >> > --- >> > hw/pci/pci.c | 9 +++++++++ >> > 1 file changed, 9 insertions(+) >> > >> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c >> > index 36226eb..371699c 100644 >> > --- a/hw/pci/pci.c >> > +++ b/hw/pci/pci.c >> > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) >> > * for 0.11 compatibility. >> > */ >> > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); >> > + >> > + /* >> > + * Hot-plugged devices can't use the option ROM >> > + * if the rom bar is disabled. >> > + */ >> > + if (DEVICE(pdev)->hotplugged) { >> > + return -1; >> > + } >> > + >> > if (class == 0x0300) { >> > rom_add_vga(pdev->romfile); >> > } else { >> >> Unlike the function's other unsuccessful returns, this one is silent. >> Intentional? > Yes, the first version included an error message, but was not accepted > as the reviewers preferred "silent drop" instead. > The main reason was that a proper error propagation mechanism > should be used. > At the time of the patch there was not such an option, but now there is. > I can add it on top of your series, preferably after is merged. My rebased "pci: Convert core to realize" has this hunk: @@ -1948,7 +1955,9 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) * if the rom bar is disabled. */ if (DEVICE(pdev)->hotplugged) { - return -1; + error_setg(errp, "Hot-plugged device without ROM bar" + " can't have an option ROM"); + return; } if (class == 0x0300) { Bad, because the patch does two separate things: fix a failure not to be silent, and convert to realize. Needs to be split. Begs the question how to order the parts. I'd prefer to put the fix first, and get it into 2.2. What do you think? ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 13:40 ` Markus Armbruster @ 2014-11-03 13:49 ` Marcel Apfelbaum 2014-11-03 15:54 ` Markus Armbruster 0 siblings, 1 reply; 14+ messages in thread From: Marcel Apfelbaum @ 2014-11-03 13:49 UTC (permalink / raw) To: Markus Armbruster; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst On Mon, 2014-11-03 at 14:40 +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: > >> Marcel Apfelbaum <marcel.a@redhat.com> writes: > >> > >> > Hot-plugging a device that has a romfile (either supplied by user > >> > or built-in) using rombar=0 option is a user error, > >> > do not allow the device to be hot-plugged. > >> > > >> > Reviewed-by: Eric Blake <eblake@redhat.com> > >> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > >> > --- > >> > hw/pci/pci.c | 9 +++++++++ > >> > 1 file changed, 9 insertions(+) > >> > > >> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > >> > index 36226eb..371699c 100644 > >> > --- a/hw/pci/pci.c > >> > +++ b/hw/pci/pci.c > >> > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > >> > * for 0.11 compatibility. > >> > */ > >> > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > >> > + > >> > + /* > >> > + * Hot-plugged devices can't use the option ROM > >> > + * if the rom bar is disabled. > >> > + */ > >> > + if (DEVICE(pdev)->hotplugged) { > >> > + return -1; > >> > + } > >> > + > >> > if (class == 0x0300) { > >> > rom_add_vga(pdev->romfile); > >> > } else { > >> > >> Unlike the function's other unsuccessful returns, this one is silent. > >> Intentional? > > Yes, the first version included an error message, but was not accepted > > as the reviewers preferred "silent drop" instead. > > The main reason was that a proper error propagation mechanism > > should be used. > > At the time of the patch there was not such an option, but now there is. > > I can add it on top of your series, preferably after is merged. > > My rebased "pci: Convert core to realize" has this hunk: > > @@ -1948,7 +1955,9 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > * if the rom bar is disabled. > */ > if (DEVICE(pdev)->hotplugged) { > - return -1; > + error_setg(errp, "Hot-plugged device without ROM bar" > + " can't have an option ROM"); > + return; > } > > if (class == 0x0300) { > > Bad, because the patch does two separate things: fix a failure not to be > silent, and convert to realize. Needs to be split. Begs the question > how to order the parts. I'd prefer to put the fix first, and get it > into 2.2. What do you think? If I understand your question correctly: I would first convert to realize, then add the fix. The reason for it is pretty simple: Conversion to realize gives us the error flow propagation we need. Thanks, Marcel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 13:49 ` Marcel Apfelbaum @ 2014-11-03 15:54 ` Markus Armbruster 2014-11-03 16:07 ` Marcel Apfelbaum 2014-11-03 16:10 ` Michael S. Tsirkin 0 siblings, 2 replies; 14+ messages in thread From: Markus Armbruster @ 2014-11-03 15:54 UTC (permalink / raw) To: Marcel Apfelbaum; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst Marcel Apfelbaum <marcel.a@redhat.com> writes: > On Mon, 2014-11-03 at 14:40 +0100, Markus Armbruster wrote: >> Marcel Apfelbaum <marcel.a@redhat.com> writes: >> >> > On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: >> >> Marcel Apfelbaum <marcel.a@redhat.com> writes: >> >> >> >> > Hot-plugging a device that has a romfile (either supplied by user >> >> > or built-in) using rombar=0 option is a user error, >> >> > do not allow the device to be hot-plugged. >> >> > >> >> > Reviewed-by: Eric Blake <eblake@redhat.com> >> >> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> >> >> > --- >> >> > hw/pci/pci.c | 9 +++++++++ >> >> > 1 file changed, 9 insertions(+) >> >> > >> >> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c >> >> > index 36226eb..371699c 100644 >> >> > --- a/hw/pci/pci.c >> >> > +++ b/hw/pci/pci.c >> >> > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) >> >> > * for 0.11 compatibility. >> >> > */ >> >> > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); >> >> > + >> >> > + /* >> >> > + * Hot-plugged devices can't use the option ROM >> >> > + * if the rom bar is disabled. >> >> > + */ >> >> > + if (DEVICE(pdev)->hotplugged) { >> >> > + return -1; >> >> > + } >> >> > + >> >> > if (class == 0x0300) { >> >> > rom_add_vga(pdev->romfile); >> >> > } else { >> >> >> >> Unlike the function's other unsuccessful returns, this one is silent. >> >> Intentional? >> > Yes, the first version included an error message, but was not accepted >> > as the reviewers preferred "silent drop" instead. >> > The main reason was that a proper error propagation mechanism >> > should be used. >> > At the time of the patch there was not such an option, but now there is. >> > I can add it on top of your series, preferably after is merged. >> >> My rebased "pci: Convert core to realize" has this hunk: >> >> @@ -1948,7 +1955,9 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) >> * if the rom bar is disabled. >> */ >> if (DEVICE(pdev)->hotplugged) { >> - return -1; >> + error_setg(errp, "Hot-plugged device without ROM bar" >> + " can't have an option ROM"); >> + return; >> } >> >> if (class == 0x0300) { >> >> Bad, because the patch does two separate things: fix a failure not to be >> silent, and convert to realize. Needs to be split. Begs the question >> how to order the parts. I'd prefer to put the fix first, and get it >> into 2.2. What do you think? > > If I understand your question correctly: > I would first convert to realize, then add the fix. > The reason for it is pretty simple: Conversion to realize > gives us the error flow propagation we need. I'd do it the other way round, because 1. Before your series, pci_add_option_rom() can already fail. It always reports an error when it fails. Good, except the caller ignores failure. 2. Your PATCH 1/2 fixes the caller. Good. 3. Your PATCH 2/2 adds a failure that doesn't report an error. Bad, because it leaves the user guessing what went wrong. I view that as a bug. I'd like this bug to be fixed for 2.2. Since Michael wants to delay my "pci: Partial conversion to 2.3, that means fixing it before conversion to realize. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 15:54 ` Markus Armbruster @ 2014-11-03 16:07 ` Marcel Apfelbaum 2014-11-03 16:10 ` Michael S. Tsirkin 1 sibling, 0 replies; 14+ messages in thread From: Marcel Apfelbaum @ 2014-11-03 16:07 UTC (permalink / raw) To: Markus Armbruster; +Cc: marcel, pbonzini, alex.williamson, qemu-devel, mst On Mon, 2014-11-03 at 16:54 +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > On Mon, 2014-11-03 at 14:40 +0100, Markus Armbruster wrote: > >> Marcel Apfelbaum <marcel.a@redhat.com> writes: > >> > >> > On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: > >> >> Marcel Apfelbaum <marcel.a@redhat.com> writes: > >> >> > >> >> > Hot-plugging a device that has a romfile (either supplied by user > >> >> > or built-in) using rombar=0 option is a user error, > >> >> > do not allow the device to be hot-plugged. > >> >> > > >> >> > Reviewed-by: Eric Blake <eblake@redhat.com> > >> >> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > >> >> > --- > >> >> > hw/pci/pci.c | 9 +++++++++ > >> >> > 1 file changed, 9 insertions(+) > >> >> > > >> >> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > >> >> > index 36226eb..371699c 100644 > >> >> > --- a/hw/pci/pci.c > >> >> > +++ b/hw/pci/pci.c > >> >> > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > >> >> > * for 0.11 compatibility. > >> >> > */ > >> >> > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > >> >> > + > >> >> > + /* > >> >> > + * Hot-plugged devices can't use the option ROM > >> >> > + * if the rom bar is disabled. > >> >> > + */ > >> >> > + if (DEVICE(pdev)->hotplugged) { > >> >> > + return -1; > >> >> > + } > >> >> > + > >> >> > if (class == 0x0300) { > >> >> > rom_add_vga(pdev->romfile); > >> >> > } else { > >> >> > >> >> Unlike the function's other unsuccessful returns, this one is silent. > >> >> Intentional? > >> > Yes, the first version included an error message, but was not accepted > >> > as the reviewers preferred "silent drop" instead. > >> > The main reason was that a proper error propagation mechanism > >> > should be used. > >> > At the time of the patch there was not such an option, but now there is. > >> > I can add it on top of your series, preferably after is merged. > >> > >> My rebased "pci: Convert core to realize" has this hunk: > >> > >> @@ -1948,7 +1955,9 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > >> * if the rom bar is disabled. > >> */ > >> if (DEVICE(pdev)->hotplugged) { > >> - return -1; > >> + error_setg(errp, "Hot-plugged device without ROM bar" > >> + " can't have an option ROM"); > >> + return; > >> } > >> > >> if (class == 0x0300) { > >> > >> Bad, because the patch does two separate things: fix a failure not to be > >> silent, and convert to realize. Needs to be split. Begs the question > >> how to order the parts. I'd prefer to put the fix first, and get it > >> into 2.2. What do you think? > > > > If I understand your question correctly: > > I would first convert to realize, then add the fix. > > The reason for it is pretty simple: Conversion to realize > > gives us the error flow propagation we need. > > I'd do it the other way round, because > > 1. Before your series, pci_add_option_rom() can already fail. It always > reports an error when it fails. Good, except the caller ignores > failure. > > 2. Your PATCH 1/2 fixes the caller. Good. > > 3. Your PATCH 2/2 adds a failure that doesn't report an error. Bad, > because it leaves the user guessing what went wrong. I view that as a > bug. > > I'd like this bug to be fixed for 2.2. Since Michael wants to delay my > "pci: Partial conversion to 2.3, that means fixing it before conversion > to realize. I thought your patches will be part of 2.2. I have nothing against it. Thanks, Marcel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-11-03 15:54 ` Markus Armbruster 2014-11-03 16:07 ` Marcel Apfelbaum @ 2014-11-03 16:10 ` Michael S. Tsirkin 1 sibling, 0 replies; 14+ messages in thread From: Michael S. Tsirkin @ 2014-11-03 16:10 UTC (permalink / raw) To: Markus Armbruster Cc: marcel, pbonzini, alex.williamson, qemu-devel, Marcel Apfelbaum On Mon, Nov 03, 2014 at 04:54:25PM +0100, Markus Armbruster wrote: > Marcel Apfelbaum <marcel.a@redhat.com> writes: > > > On Mon, 2014-11-03 at 14:40 +0100, Markus Armbruster wrote: > >> Marcel Apfelbaum <marcel.a@redhat.com> writes: > >> > >> > On Mon, 2014-11-03 at 13:03 +0100, Markus Armbruster wrote: > >> >> Marcel Apfelbaum <marcel.a@redhat.com> writes: > >> >> > >> >> > Hot-plugging a device that has a romfile (either supplied by user > >> >> > or built-in) using rombar=0 option is a user error, > >> >> > do not allow the device to be hot-plugged. > >> >> > > >> >> > Reviewed-by: Eric Blake <eblake@redhat.com> > >> >> > Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> > >> >> > --- > >> >> > hw/pci/pci.c | 9 +++++++++ > >> >> > 1 file changed, 9 insertions(+) > >> >> > > >> >> > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > >> >> > index 36226eb..371699c 100644 > >> >> > --- a/hw/pci/pci.c > >> >> > +++ b/hw/pci/pci.c > >> >> > @@ -1942,6 +1942,15 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > >> >> > * for 0.11 compatibility. > >> >> > */ > >> >> > int class = pci_get_word(pdev->config + PCI_CLASS_DEVICE); > >> >> > + > >> >> > + /* > >> >> > + * Hot-plugged devices can't use the option ROM > >> >> > + * if the rom bar is disabled. > >> >> > + */ > >> >> > + if (DEVICE(pdev)->hotplugged) { > >> >> > + return -1; > >> >> > + } > >> >> > + > >> >> > if (class == 0x0300) { > >> >> > rom_add_vga(pdev->romfile); > >> >> > } else { > >> >> > >> >> Unlike the function's other unsuccessful returns, this one is silent. > >> >> Intentional? > >> > Yes, the first version included an error message, but was not accepted > >> > as the reviewers preferred "silent drop" instead. > >> > The main reason was that a proper error propagation mechanism > >> > should be used. > >> > At the time of the patch there was not such an option, but now there is. > >> > I can add it on top of your series, preferably after is merged. > >> > >> My rebased "pci: Convert core to realize" has this hunk: > >> > >> @@ -1948,7 +1955,9 @@ static int pci_add_option_rom(PCIDevice *pdev, bool is_default_rom) > >> * if the rom bar is disabled. > >> */ > >> if (DEVICE(pdev)->hotplugged) { > >> - return -1; > >> + error_setg(errp, "Hot-plugged device without ROM bar" > >> + " can't have an option ROM"); > >> + return; > >> } > >> > >> if (class == 0x0300) { > >> > >> Bad, because the patch does two separate things: fix a failure not to be > >> silent, and convert to realize. Needs to be split. Begs the question > >> how to order the parts. I'd prefer to put the fix first, and get it > >> into 2.2. What do you think? > > > > If I understand your question correctly: > > I would first convert to realize, then add the fix. > > The reason for it is pretty simple: Conversion to realize > > gives us the error flow propagation we need. > > I'd do it the other way round, because > > 1. Before your series, pci_add_option_rom() can already fail. It always > reports an error when it fails. Good, except the caller ignores > failure. > > 2. Your PATCH 1/2 fixes the caller. Good. > > 3. Your PATCH 2/2 adds a failure that doesn't report an error. Bad, > because it leaves the user guessing what went wrong. I view that as a > bug. > > I'd like this bug to be fixed for 2.2. Since Michael wants to delay my > "pci: Partial conversion to 2.3, that means fixing it before conversion > to realize. I didn't look at this deeply yes, so I don't know how hard would it be to fix without pulling in realize. If easy, go for it. If hard, we can pull in realize for 2.2. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile 2014-10-27 17:34 [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum @ 2014-11-24 15:22 ` Marcel Apfelbaum 2 siblings, 0 replies; 14+ messages in thread From: Marcel Apfelbaum @ 2014-11-24 15:22 UTC (permalink / raw) To: mst; +Cc: qemu-devel On Mon, 2014-10-27 at 19:34 +0200, Marcel Apfelbaum wrote: > Hot-plugging a device that has a romfile (either supplied by user > or built-in) using rombar=0 option is a user error, > do not allow the device to be hot-plugged. Hi Michael, The series has been reviewed, can you please add it to your next PULL request? Thanks, Marcel > > v3 -> v4: > - Fixed a typo in the commit (Eric Blake) > > v2 -> v3: > - Reverse the decision to forbid the hotplug on user error (Michael S. Tsirkin) > - Split the patch in two, first part being a separate fix (Markus Armbruster) > > v1 -> v2: > After a discussion with Michael, Paolo and Alex, this > patch silent drops the romfile instead of not allowing > the hotplug. > > Marcel Apfelbaum (2): > hw/pci: fixed error flow in pci_qdev_init > hw/pci: fixed hotplug crash when using rombar=0 with devices having > romfile > > hw/pci/pci.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-11-24 15:22 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-10-27 17:34 [Qemu-devel] [PATCH v4 0/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 1/2] hw/pci: fixed error flow in pci_qdev_init Marcel Apfelbaum 2014-10-30 13:33 ` Markus Armbruster 2014-10-30 17:25 ` Marcel Apfelbaum 2014-10-27 17:34 ` [Qemu-devel] [PATCH v4 2/2] hw/pci: fixed hotplug crash when using rombar=0 with devices having romfile Marcel Apfelbaum 2014-11-03 12:03 ` Markus Armbruster 2014-11-03 12:46 ` Michael S. Tsirkin 2014-11-03 12:52 ` Marcel Apfelbaum 2014-11-03 13:40 ` Markus Armbruster 2014-11-03 13:49 ` Marcel Apfelbaum 2014-11-03 15:54 ` Markus Armbruster 2014-11-03 16:07 ` Marcel Apfelbaum 2014-11-03 16:10 ` Michael S. Tsirkin 2014-11-24 15:22 ` [Qemu-devel] [PATCH v4 0/2] " Marcel Apfelbaum
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).