Unverified Commit 901db475 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!4108 PCI/AER: increments pci bus reference count in aer-inject process

parents 3d2e71f1 a0835a9e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -441,9 +441,11 @@ struct pci_bus *pci_bus_get(struct pci_bus *bus)
		get_device(&bus->dev);
	return bus;
}
EXPORT_SYMBOL(pci_bus_get);

void pci_bus_put(struct pci_bus *bus)
{
	if (bus)
		put_device(&bus->dev);
}
EXPORT_SYMBOL(pci_bus_put);
+9 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <linux/device.h>

#include "portdrv.h"
#include "../pci.h"

/* Override the existing corrected and uncorrected error masks */
static bool aer_mask_override;
@@ -307,6 +308,13 @@ static int pci_bus_set_aer_ops(struct pci_bus *bus)
	spin_lock_irqsave(&inject_lock, flags);
	if (ops == &aer_inj_pci_ops)
		goto out;
	/*
	 * increments the reference count of the pci bus. Otherwise, when we
	 * restore the 'pci_ops' in 'aer_inject_exit', the 'pci_bus' may have
	 * been freed.
	 */
	pci_bus_get(bus);

	pci_bus_ops_init(bus_ops, bus, ops);
	list_add(&bus_ops->list, &pci_bus_ops_list);
	bus_ops = NULL;
@@ -530,6 +538,7 @@ static void __exit aer_inject_exit(void)

	while ((bus_ops = pci_bus_ops_pop())) {
		pci_bus_set_ops(bus_ops->bus, bus_ops->ops);
		pci_bus_put(bus_ops->bus);
		kfree(bus_ops);
	}