[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1309883430.2271.27.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC>
Date: Tue, 05 Jul 2011 18:30:30 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: Dan Magenheimer <dan.magenheimer@...cle.com>
Cc: netdev@...r.kernel.org, Konrad Wilk <konrad.wilk@...cle.com>,
linux-mm <linux-mm@...ck.org>
Subject: Re: [RFC] non-preemptible kernel socket for RAMster
Le mardi 05 juillet 2011 à 08:54 -0700, Dan Magenheimer a écrit :
> In working on a kernel project called RAMster* (where RAM on a
> remote system may be used for clean page cache pages and for swap
> pages), I found I have need for a kernel socket to be used when
> in non-preemptible state. I admit to being a networking idiot,
> but I have been successfully using the following small patch.
> I'm not sure whether I am lucky so far... perhaps more
> sockets or larger/different loads will require a lot more
> changes (or maybe even make my objective impossible).
> So I thought I'd post it for comment. I'd appreciate
> any thoughts or suggestions.
>
> Thanks,
> Dan
>
> * http://events.linuxfoundation.org/events/linuxcon/magenheimer
>
> diff -Napur linux-2.6.37/net/core/sock.c linux-2.6.37-ramster/net/core/sock.c
> --- linux-2.6.37/net/core/sock.c 2011-07-03 19:14:52.267853088 -0600
> +++ linux-2.6.37-ramster/net/core/sock.c 2011-07-03 19:10:04.340980799 -0600
> @@ -1587,6 +1587,14 @@ static void __lock_sock(struct sock *sk)
> __acquires(&sk->sk_lock.slock)
> {
> DEFINE_WAIT(wait);
> + if (!preemptible()) {
> + while (sock_owned_by_user(sk)) {
> + spin_unlock_bh(&sk->sk_lock.slock);
> + cpu_relax();
> + spin_lock_bh(&sk->sk_lock.slock);
> + }
> + return;
> + }
Hmm, was this tested on UP machine ?
>
> for (;;) {
> prepare_to_wait_exclusive(&sk->sk_lock.wq, &wait,
> @@ -1623,7 +1631,8 @@ static void __release_sock(struct sock *
> * This is safe to do because we've taken the backlog
> * queue private:
> */
> - cond_resched_softirq();
> + if (preemptible())
> + cond_resched_softirq();
> skb = next;
> } while (skb != NULL);
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists