drivers - modules versus compiled in?
Kevin B. Hendricks
khendricks at ivey.uwo.ca
Fri Nov 2 05:01:53 EST 2001
The driver in question is the tulip nic driver with my modifications to
support the PNIC_II chip (but most of the driver is common acrosss other
chips that tulip supports including transmit and receive buffer code,
which I have not touched)
The funny thing is that when compiled as a module, it works flawlessly.
But when I compile it into the kernel, it seems a bit flakey and some
received packets get lost somehow (I can see the transmitted packets
generating link activity on the switch, but nothing seems to come the
other way). The driver debug messages all look sane and it looks like the
driver is working but not data is ever returned from the card.
This driver does use DMA and does allocate buffer space for it.
Given the "virt_to_bus()' issue you describe, I would expect the compiled
in kernel to be the working one and not the one built as a module.
Are there any mechanisms that would help isolate a module's memory from
corruption that don't exist when compiled into a kernel?
On November 1, 2001 12:48, you wrote:
> Kevin B. Hendricks wrote:
> > Are the allocated memory areas differnt?
> Yes, this is usually why you may see different behavior. First,
> the module itself is allocated from kernel memory that other errant
> pointers could access that wouldn't otherwise. Usually, the problem
> is related to buffers or data structures the driver allocates that
> are further used for DMA operations. Things like 'virt_to_bus()'
> won't work on static objects in a module, while it will in a
> compiled driver.
> > Any hints as to what might have changed?
> Provide some hints to us :-). What type of system, what
> kernel, what driver?
> -- Dan
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc-dev