* g_NCR5380 - 2.6.0 - problem with reloading module
@ 2004-01-05 22:42 Kevin Tappe
2004-01-09 19:26 ` Randy.Dunlap
0 siblings, 1 reply; 3+ messages in thread
From: Kevin Tappe @ 2004-01-05 22:42 UTC (permalink / raw)
To: linux-scsi
Hi,
i hope this is the right emailadress for my problem...
The first time I load the module g_NCR5380 everything works fine:
scsi0 : interrupts not enabled. for better interactive performance,
scsi0 : please jumper the board for a free IRQ.
scsi0 : at port 0x280 interrupts disabled options CAN_QUEUE=16
CMD_PER_LUN=2 release=1 generic options
AUTOPROBE_IRQ AUTOSENSE USLEEP, USLEEP_POLL=1 USLEEP_SLEEP=20
generic release=7
scsi0 : Generic NCR5380/53C400 Driver
Vendor: UMAX Model: Astra 1200S
Rev: V2.9 Type: Scanner ANSI SCSI revision: 02
Attached scsi generic sg0 at scsi0, channel 0, id 5, lun 0, type 6
I can't reload the module g_NCR5380 after an rmmod:
nihil:~# modprobe -v g_NCR5380
insmod /lib/modules/2.6.0/kernel/drivers/scsi/g_NCR5380.ko ncr_irq=255
ncr_addr=0x280 dtc_3181e=1
FATAL: Error inserting g_NCR5380
(/lib/modules/2.6.0/kernel/drivers/scsi/g_NCR53
80.ko): No such device
After a reboot everything is just fine again.
I use a vanilla 2.6.0 kernel. Please let me know if you need any further
information.
-Kevin
--
Think how much fear is going to be required to stop people from passing
along copies of things on their computers. I hope you don't want to live
in a world with that much fear. - Richard M. Stallman
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: g_NCR5380 - 2.6.0 - problem with reloading module
2004-01-05 22:42 g_NCR5380 - 2.6.0 - problem with reloading module Kevin Tappe
@ 2004-01-09 19:26 ` Randy.Dunlap
[not found] ` <20040110193814.GA371@nihil.tappe.netz>
0 siblings, 1 reply; 3+ messages in thread
From: Randy.Dunlap @ 2004-01-09 19:26 UTC (permalink / raw)
To: Kevin Tappe; +Cc: linux-scsi
On Mon, 5 Jan 2004 23:42:20 +0100 Kevin Tappe <kevin@zerodivide.de> wrote:
| Hi,
|
| i hope this is the right emailadress for my problem...
|
| The first time I load the module g_NCR5380 everything works fine:
| scsi0 : interrupts not enabled. for better interactive performance,
| scsi0 : please jumper the board for a free IRQ.
| scsi0 : at port 0x280 interrupts disabled options CAN_QUEUE=16
| CMD_PER_LUN=2 release=1 generic options
| AUTOPROBE_IRQ AUTOSENSE USLEEP, USLEEP_POLL=1 USLEEP_SLEEP=20
| generic release=7
| scsi0 : Generic NCR5380/53C400 Driver
| Vendor: UMAX Model: Astra 1200S
| Rev: V2.9 Type: Scanner ANSI SCSI revision: 02
| Attached scsi generic sg0 at scsi0, channel 0, id 5, lun 0, type 6
|
| I can't reload the module g_NCR5380 after an rmmod:
|
| nihil:~# modprobe -v g_NCR5380
| insmod /lib/modules/2.6.0/kernel/drivers/scsi/g_NCR5380.ko ncr_irq=255
| ncr_addr=0x280 dtc_3181e=1
| FATAL: Error inserting g_NCR5380
| (/lib/modules/2.6.0/kernel/drivers/scsi/g_NCR53
| 80.ko): No such device
|
| After a reboot everything is just fine again.
| I use a vanilla 2.6.0 kernel. Please let me know if you need any further
| information.
Hi,
Can you show that 'modprobe -v g_NCR5380' output for the first time
that the driver is loaded also?
What's in /proc/scsi/g_NCR5380 while the driver is loaded the first time?
and in /proc/ioports and /proc/iomem?
Also, the latter 2 files after the driver is removed.
and in /proc/scsi after the driver is removed.
--
~Randy
MOTD: Always include version info.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] g_NCR5380 - 2.6.0 - problem with reloading module
[not found] ` <20040110193814.GA371@nihil.tappe.netz>
@ 2004-01-11 23:30 ` Randy.Dunlap
0 siblings, 0 replies; 3+ messages in thread
From: Randy.Dunlap @ 2004-01-11 23:30 UTC (permalink / raw)
To: Kevin Tappe; +Cc: linux-scsi, jejb
[-- Attachment #1: Type: text/plain, Size: 2732 bytes --]
On Sat, 10 Jan 2004 20:38:15 +0100 Kevin Tappe <kevin@zerodivide.de> wrote:
| Hi,
|
| On Fri, Jan 09, 2004 at 11:26:56AM -0800, Randy.Dunlap wrote:
| > Can you show that 'modprobe -v g_NCR5380' output for the first time
| > that the driver is loaded also?
|
| nihil:~# modprobe -v g_NCR5380
| insmod /lib/modules/2.6.0/kernel/drivers/scsi/g_NCR5380.ko ncr_irq=255
| ncr_addr=0x280 dtc_3181e=1
no output from the driver??
That's OK though, I found the problem.
| > What's in /proc/scsi/g_NCR5380 while the driver is loaded the first time?
| > and in /proc/ioports and /proc/iomem?
|
| nihil:~# cat /proc/scsi/g_NCR5380/0
| SCSI host number 0 : Generic NCR5380/NCR53C400 Scsi Driver
| Generic NCR5380 driver version 1
| NCR5380 core version 7
| NO NCR53C400 driver extensions
| Using port mapping at port 0x280, no interrupt
| REQ not asserted, phase unknown.
| No currently connected command
| issue_queue
| disconnected_queue
|
| nihil:~# cat /proc/ioports
...
| 0213-0213 : ISAPnP
| 0220-022f : SoundBlaster
| 0260-0261 : pnp 00:11
| 0280-028f : ncr53c80
| 02f8-02ff : serial
...
| 0a79-0a79 : isapnp write
...
| f800-f81f : pnp 00:12
| f820-f83f : pnp 00:12
| fc00-fc0f : pnp 00:12
|
| nihil:~# cat /proc/iomem
...
|
| > Also, the latter 2 files after the driver is removed.
| > and in /proc/scsi after the driver is removed.
|
| nihil:~# cat /proc/ioports
| Segmentation fault
Yes, I see that one also.
The problem is that the detect function requests an IO region
of 16 bytes (at least when a command line override parameter is
used) but the release function only tries to release 8 bytes,
and this request isn't done because it doesn't match any allocated
IO region. [NCR53C400 extensions are not enabled, so
NCR5380_region_size is 8, not 16, but the request uses
NCR5380_region_size regardless.]
If enough kernel messages are enabled (like 'echo 9 > /proc/sysrq-trigger'),
you should have seen this message when the driver module was unloaded:
Trying to free nonexistent resource <280-287>
because 280-28f was allocated.
Options to fix this:
1/ if the release_region() in the release function fails, have it try
a second time with a different region size; (easy, sorta sloppy);
2/ save the allocated region size in instance->n_io_ports and release
that size only; <<<<< PATCH ATTACHED <<<<<
3/ if an override was used, release a region size of 16 in the
release function; (this only looks clean for one adapter, not
multiple)
Kevin, please test and report the results. I think that the
module will be reloadable now.
Patch comments? If no problems, James, please apply.
| nihil:~# cat /proc/iomem
...
|
| The files in /proc/scsi are attached. Hope that helps...
| -Kevin
| --
--
~Randy
[-- Attachment #2: gNCR_regions.patch --]
[-- Type: application/octet-stream, Size: 2183 bytes --]
description: release region of allocated (requested) size
product_versions: Linux 2.6.1
diffstat:=
drivers/scsi/g_NCR5380.c | 9 +++++++--
1 files changed, 7 insertions(+), 2 deletions(-)
diff -Naurp ./drivers/scsi/g_NCR5380.c~fakehw ./drivers/scsi/g_NCR5380.c
--- ./drivers/scsi/g_NCR5380.c~fakehw 2004-01-08 22:59:10.000000000 -0800
+++ ./drivers/scsi/g_NCR5380.c 2004-01-11 15:21:00.000000000 -0800
@@ -290,6 +290,7 @@ int __init generic_NCR5380_detect(Scsi_H
static int current_override = 0;
int count, i;
unsigned int *ports;
+ unsigned long region_size = 16;
static unsigned int __initdata ncr_53c400a_ports[] = {
0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
};
@@ -420,6 +421,7 @@ int __init generic_NCR5380_detect(Scsi_H
/* Not a 53C400A style setup - just grab */
if(!(request_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size, "ncr5380")))
continue;
+ region_size = NCR5380_region_size;
}
#else
if(!request_mem_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size, "ncr5380"))
@@ -428,7 +430,7 @@ int __init generic_NCR5380_detect(Scsi_H
instance = scsi_register(tpnt, sizeof(struct NCR5380_hostdata));
if (instance == NULL) {
#ifndef CONFIG_SCSI_G_NCR5380_MEM
- release_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size);
+ release_region(overrides[current_override].NCR5380_map_name, region_size);
#else
release_mem_region(overrides[current_override].NCR5380_map_name, NCR5380_region_size);
#endif
@@ -436,6 +438,9 @@ int __init generic_NCR5380_detect(Scsi_H
}
instance->NCR5380_instance_name = overrides[current_override].NCR5380_map_name;
+#ifndef CONFIG_SCSI_G_NCR5380_MEM
+ instance->n_io_port = region_size;
+#endif
NCR5380_init(instance, flags);
@@ -498,7 +503,7 @@ int generic_NCR5380_release_resources(st
NCR5380_setup(instance);
#ifndef CONFIG_SCSI_G_NCR5380_MEM
- release_region(instance->NCR5380_instance_name, NCR5380_region_size);
+ release_region(instance->NCR5380_instance_name, instance->n_io_port);
#else
release_mem_region(instance->NCR5380_instance_name, NCR5380_region_size);
#endif
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-01-11 23:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-05 22:42 g_NCR5380 - 2.6.0 - problem with reloading module Kevin Tappe
2004-01-09 19:26 ` Randy.Dunlap
[not found] ` <20040110193814.GA371@nihil.tappe.netz>
2004-01-11 23:30 ` [PATCH] " Randy.Dunlap
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox