Thread (19 messages) flat view 19 messages, 7 authors, 2006-12-07

Re: network devices don't handle pci_dma_mapping_error()'s

From: Amit S. Kale <hidden>
Date: 2006-12-07 06:55:24

On Thursday 07 December 2006 12:16, Stephen Hemminger wrote:
Amit S. Kale wrote:
quoted
We can let a driver handle dma mapping errors using these->

1.Reduce the size of a receive ring. This will free some possibly
remapped memory, reducing pressure on iommu. We also need to printk a
message so that a user knows the reason why receive ring was shrunk.
Growing it when iommu pressure goes down will result in a ping-pong.
2. Force processing of receive and transmit ring. This will ensure that
the buffers processed by hardware are freed, reducing iommu pressure.

3. If we need to do (1) and (2) a predefined number of times (say 20),
stop the queue. Stopping the queue in general will cause a ping-pong, so
it should be avoided as far as possible.
But what if it isn't the network device that is using all the IOMMU
resources.
Linux is already crap at handling out of memory, lets not add another
starvation
path.

In this case, the device does have some idea about "worst case" i/o's in
flight,
couldn't we have some sort of reservation/management system to avoid
overcommitting?
Worst case map usage for a network device can be fairly high because of
the possiblity
of on transmit with a high number of pages when using TSO. Perhaps the
transmit
ring needs to be accounted for in maps used rather than packets pending.
I am afraid I don't have a good answer for that. Any kind of reservation may 
result in underutilization and transparently shared resources may result in 
starvation.

Designing heuristics for handling these cases may be the only possible wayout, 
though these heuristics need to be validated frequently to ensure that they 
aren't out of date.
-Amit
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help