pcie: don't skip multi-mask events
If we are trying to set multiple bits at once, testing that just one of them is already set gives a false positive. As a result we won't interrupt guest if e.g. presence detection change and attention button press are both set. This happens with multi-function device removal. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
This commit is contained in:
parent
7fec76a022
commit
861dc73518
@ -383,7 +383,7 @@ static void pcie_cap_slot_event(PCIDevice *dev, PCIExpressHotPlugEvent event)
|
|||||||
{
|
{
|
||||||
/* Minor optimization: if nothing changed - no event is needed. */
|
/* Minor optimization: if nothing changed - no event is needed. */
|
||||||
if (pci_word_test_and_set_mask(dev->config + dev->exp.exp_cap +
|
if (pci_word_test_and_set_mask(dev->config + dev->exp.exp_cap +
|
||||||
PCI_EXP_SLTSTA, event)) {
|
PCI_EXP_SLTSTA, event) == event) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hotplug_event_notify(dev);
|
hotplug_event_notify(dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user