public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ioc4: automatically load sgiioc4 subordinate module
@ 2008-12-05 22:04 Brent Casavant
  2008-12-08 22:55 ` Andrew Morton
  0 siblings, 1 reply; 8+ messages in thread
From: Brent Casavant @ 2008-12-05 22:04 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton, Michael Reed, rw, kasievers

The main ioc4 driver which manages ownership of the SGI IOC4 PCI device
does not automatically load any of the ioc4 submodules (the sgiioc4 IDE
and ioc4_serial serial drivers) during PCI device probing.  This causes
problems when the root device is a DVD-ROM attached to the IOC4 IDE
interface (e.g. during system installation) as the sgiioc4 module
will not be loaded and thus the DVD-ROM device will not be available.

Modify ioc4 to always load the sgiioc4 IDE module if the board carrying
the IOC4 hardware actually implements the IDE interface (not all boards
bring this functionality off the IOC4 chip).

The use of a work procedure is necessary as request_module() cannot be
called from the device probe path as it eventually calls out to userspace.

Signed-off-by: Michael Reed <mdr@sgi.com>
Signed-off-by: Brent Casavant <bcasavan@sgi.com>
---
 ioc4.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/misc/ioc4.c b/drivers/misc/ioc4.c
index 6f76573..36320bd 100644
--- a/drivers/misc/ioc4.c
+++ b/drivers/misc/ioc4.c
@@ -269,6 +269,16 @@ ioc4_variant(struct ioc4_driver_data *idd)
 	return IOC4_VARIANT_PCI_RT;
 }
 
+static void
+ioc4_load_modules(struct work_struct *work)
+{
+	/* arg just has to be freed */
+
+	request_module("sgiioc4");
+
+	kfree(work);
+}
+
 /* Adds a new instance of an IOC4 card */
 static int
 ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
@@ -378,6 +388,22 @@ ioc4_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
 	}
 	mutex_unlock(&ioc4_mutex);
 
+	if (idd->idd_variant != IOC4_VARIANT_PCI_RT) {
+		struct work_struct *work;
+		work = kzalloc(sizeof(struct work_struct), GFP_KERNEL);
+		if (!work) {
+			printk(KERN_WARNING
+			       "%s: IOC4 unable to allocate memory for "
+			       "load of sub-modules.\n",
+			       __FUNCTION__);
+		}
+		else {
+			printk(KERN_INFO "IOC4 loading ioc4 submodule\n");
+			INIT_WORK(work, ioc4_load_modules);
+			schedule_work(work);
+		}
+	}
+
 	return 0;
 
 out_misc_region:

-- 
Brent Casavant                          All music is folk music.  I ain't
bcasavan@sgi.com                        never heard a horse sing a song.
Silicon Graphics, Inc.                    -- Louis Armstrong

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2008-12-10 21:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-05 22:04 [PATCH] ioc4: automatically load sgiioc4 subordinate module Brent Casavant
2008-12-08 22:55 ` Andrew Morton
2008-12-08 23:09   ` Brent Casavant
2008-12-08 23:36   ` Kay Sievers
2008-12-08 23:41     ` Andrew Morton
2008-12-10 21:00       ` Brent Casavant
2008-12-09  2:01   ` Brent Casavant
2008-12-09  2:32     ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox