Messages in this thread | | | Date | Sat, 12 Aug 2006 20:32:12 +0200 (CEST) | Subject | Re: [RFC][PATCH 3/4] deadlock prevention core | From | "Indan Zupancic" <> |
| |
On Sat, August 12, 2006 20:08, Peter Zijlstra said: > On Sat, 2006-08-12 at 19:54 +0200, Indan Zupancic wrote: >> True, but currently memalloc_reserve isn't used in a sensible way, >> or I'm missing something. > > Well, I'm somewhat reluctant to stick network related code into mm/, it > seems well separated now.
What I had in mind was something like:
+static DEFINE_SPINLOCK(memalloc_lock); +static int memalloc_socks; + +atomic_t memalloc_skbs_used; +EXPORT_SYMBOL_GPL(memalloc_skbs_used); + +int sk_adjust_memalloc(int nr_socks) +{ + unsigned long flags; + unsigned int reserve; + int err; + + spin_lock_irqsave(&memalloc_lock, flags); + + memalloc_socks += nr_socks; + BUG_ON(memalloc_socks < 0); + + reserve = nr_socks * (2 * MAX_PHYS_SEGMENTS + /* outbound */ + 5 * MAX_CONCURRENT_SKBS); /* inbound */ + + err = adjust_memalloc_reserve(reserve); + spin_unlock_irqrestore(&memalloc_lock, flags); + if (err) { + printk(KERN_WARNING + "Unable to change RX reserve to: %lu, error: %d\n", + reserve, err); + } + return err; +}
The original code missed the brackets, so 5 * MAX_CONCURRENT_SKBS wasn't done per socket. But the comment said it was per socket, so I added in this version.
Greetings,
Indan
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |