Skip to contentSkip to conversation

add platform check to a couple sn2-only drivers

PATCH In review Greg Edwards 2 participants 3 messages Jul 28, 2006

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 add platform check to a couple sn2-only drivers

Non-sn2 boxes occasionally run into problems when they execute module_init functions for sn2 drivers, if those drivers go off and try to read a register that doesn't exist, or maybe dereference a variable that isn't defined for the non-sn2 case.

This patch adds a platform check for the ioc4 and snsc driver init functions. It's a bit overkill for the ioc4 case, but erring on the conservative side doesn't hurt.

---
 drivers/char/snsc.c |    7 ++++++-
 drivers/sn/ioc4.c   |    3 +++
 2 files changed, 9 insertions(+), 1 deletion(-)

Index: git-linus/drivers/char/snsc.c
=================================--- git-linus.orig/drivers/char/snsc.c 2006-07-27 09:15:02.524672764 -0500
+++ git-linus/drivers/char/snsc.c 2006-07-27 09:15:13.630016184 -0500
@@ -374,7 +374,12 @@ scdrv_init(void)
struct sysctl_data_s *scd;
void *salbuf;
dev_t first_dev, dev;
- nasid_t event_nasid = ia64_sn_get_console_nasid();
+ nasid_t event_nasid;
+
+ if (!ia64_platform_is("sn2"))
+ return -ENODEV;
+
+ event_nasid = ia64_sn_get_console_nasid();

if (alloc_chrdev_region(&first_dev, 0, num_cnodes,
SYSCTL_BASENAME) < 0) {
Index: git-linus/drivers/sn/ioc4.c
=================================--- git-linus.orig/drivers/sn/ioc4.c 2006-07-27 09:29:41.000000000 -0500
+++ git-linus/drivers/sn/ioc4.c 2006-07-27 09:54:49.186272223 -0500
@@ -455,6 +455,9 @@ MODULE_DEVICE_TABLE(pci, ioc4_id_table);
static int __devinit
ioc4_init(void)
{
+ if (!ia64_platform_is("sn2"))
+ return -ENODEV;
+
return pci_register_driver(&ioc4_driver);
}

#1 lore raw

Review

Quoted 7 lines · Greg Edwards
(quoted diff) +6 -1
-	nasid_t event_nasid = ia64_sn_get_console_nasid();
+	nasid_t event_nasid;
+
+	if (!ia64_platform_is("sn2"))
+		return -ENODEV;
+
+	event_nasid = ia64_sn_get_console_nasid();

this one is okay and required.

Review

Quoted 6 lines

static int __devinit
ioc4_init(void)
{

(quoted diff) +3 -0
+	if (!ia64_platform_is("sn2"))
+		return -ENODEV;
+

this one not. The pci id matching will take care of things.

#2 lore raw
In reply to Greg Edwards

On Fri, Jul 28, 2006 at 03:50:22PM +0100, Christoph Hellwig wrote:

| On Fri, Jul 28, 2006 at 09:36:26AM -0500, Greg Edwards wrote:
| > -	nasid_t event_nasid = ia64_sn_get_console_nasid();
| > +	nasid_t event_nasid;
| > +
| > +	if (!ia64_platform_is("sn2"))
| > +		return -ENODEV;
| > +
| > +	event_nasid = ia64_sn_get_console_nasid();
| 
| this one is okay and required.
| 
| >  static int __devinit
| >  ioc4_init(void)
| >  {
| > +	if (!ia64_platform_is("sn2"))
| > +		return -ENODEV;
| > +
| 
| this one not.  The pci id matching will take care of things. 

Ok, thanks Christoph. Brent brought that up, too, but we had been burned by thinking we had it covered before on other drivers. Tony, revised patch below.

Add a platform check to the snsc driver init function, to prevent loading on non-sn2 systems.

---
 drivers/char/snsc.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Index: git-linus/drivers/char/snsc.c
=================================--- git-linus.orig/drivers/char/snsc.c 2006-07-28 09:58:08.167283230 -0500
+++ git-linus/drivers/char/snsc.c 2006-07-28 09:58:45.095703646 -0500
@@ -374,7 +374,12 @@ scdrv_init(void)
struct sysctl_data_s *scd;
void *salbuf;
dev_t first_dev, dev;
- nasid_t event_nasid = ia64_sn_get_console_nasid();
+ nasid_t event_nasid;
+
+ if (!ia64_platform_is("sn2"))
+ return -ENODEV;
+
+ event_nasid = ia64_sn_get_console_nasid();

if (alloc_chrdev_region(&first_dev, 0, num_cnodes,
SYSCTL_BASENAME) < 0) {