diff mbox

[15/22] aerdrv: introduce get_err_handler()

Message ID 4BBC34DA.2050303@jp.fujitsu.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Hidetoshi Seto April 7, 2010, 7:31 a.m. UTC
None
diff mbox

Patch

diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index df735cd..4bd4b4f 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -248,6 +248,13 @@  static int find_source_device(struct pci_dev *parent,
 	return 1;
 }
 
+static struct pci_error_handlers *get_err_handler(struct pci_dev *dev)
+{
+	if (!dev || !dev->driver)
+		return NULL;
+	return dev->driver->err_handler;
+}
+
 static int report_error_detected(struct pci_dev *dev, void *data)
 {
 	pci_ers_result_t vote;
@@ -257,9 +264,8 @@  static int report_error_detected(struct pci_dev *dev, void *data)
 
 	dev->error_state = result_data->state;
 
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->error_detected) {
+	err_handler = get_err_handler(dev);
+	if (!err_handler || !err_handler->error_detected) {
 		if (result_data->state == pci_channel_io_frozen &&
 			!(dev->hdr_type & PCI_HEADER_TYPE_BRIDGE)) {
 			/*
@@ -276,9 +282,9 @@  static int report_error_detected(struct pci_dev *dev, void *data)
 		return 0;
 	}
 
-	err_handler = dev->driver->err_handler;
 	vote = err_handler->error_detected(dev, result_data->state);
 	result_data->result = merge_result(result_data->result, vote);
+
 	return 0;
 }
 
@@ -289,14 +295,13 @@  static int report_mmio_enabled(struct pci_dev *dev, void *data)
 	struct aer_broadcast_data *result_data;
 	result_data = (struct aer_broadcast_data *) data;
 
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->mmio_enabled)
+	err_handler = get_err_handler(dev);
+	if (!err_handler || !err_handler->mmio_enabled)
 		return 0;
 
-	err_handler = dev->driver->err_handler;
 	vote = err_handler->mmio_enabled(dev);
 	result_data->result = merge_result(result_data->result, vote);
+
 	return 0;
 }
 
@@ -307,14 +312,13 @@  static int report_slot_reset(struct pci_dev *dev, void *data)
 	struct aer_broadcast_data *result_data;
 	result_data = (struct aer_broadcast_data *) data;
 
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->slot_reset)
+	err_handler = get_err_handler(dev);
+	if (!err_handler || !err_handler->slot_reset)
 		return 0;
 
-	err_handler = dev->driver->err_handler;
 	vote = err_handler->slot_reset(dev);
 	result_data->result = merge_result(result_data->result, vote);
+
 	return 0;
 }
 
@@ -324,13 +328,12 @@  static int report_resume(struct pci_dev *dev, void *data)
 
 	dev->error_state = pci_channel_io_normal;
 
-	if (!dev->driver ||
-		!dev->driver->err_handler ||
-		!dev->driver->err_handler->resume)
+	err_handler = get_err_handler(dev);
+	if (!err_handler || !err_handler->resume)
 		return 0;
 
-	err_handler = dev->driver->err_handler;
 	err_handler->resume(dev);
+
 	return 0;
 }