mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jean Tourrilhes <jt@bougret.hpl.hp.com>
To: Maksim Krasnyanskiy <maxk@qualcomm.com>
Cc: "Richard B. Johnson" <root@chaos.analogic.com>,
	Linux kernel mailing list <linux-kernel@vger.kernel.org>,
	Paul Mackerras <paulus@samba.org>
Subject: Re: Killing tasklet from interrupt
Date: Mon, 18 Mar 2002 15:33:47 -0800	[thread overview]
Message-ID: <20020318153347.A26715@bougret.hpl.hp.com> (raw)
In-Reply-To: <Pine.LNX.3.95.1020318153650.29558B-100000@chaos.analogic.com> <20020318115313.A26490@bougret.hpl.hp.com> <Pine.LNX.3.95.1020318153650.29558B-100000@chaos.analogic.com> <20020318125743.A26532@bougret.hpl.hp.com> <5.1.0.14.2.20020318151528.02ed4d70@mail1.qualcomm.com>

On Mon, Mar 18, 2002 at 03:20:50PM -0800, Maksim Krasnyanskiy wrote:
> 
> > > You have the tasklet kill itself the next time it executes. Set some
> > > flag so it knows it should give up its timer-slot and expire. The
> > > interrupt sets the flag. It doesn't do anything else.
> >
> >         I already have this flag and my code mostly work like this, so
> >that would be trivial to do.
> >         I looked at the code, and you are right, killing the tasklet
> >within itself is by far the safest way to do it.
> Sounds like what you need is tasklet_disable.
> tasklet_kill needs process context so you can't use it in timer.
> 
> >It's a shame that the code doesn't explitely allow for it (i.e. you will 
> >deadlock every time
> >in tasklet_unlock_wait(t);).
> Use tasklet_disable_nosync within the tasklet itself.
> 
> Max

	Well. I thought about that. Not possible.
	tasklet_disable is not the answer, because if the tasklet was
scheduled, it will stay forever in the tasklet queue. Also, I need to
forget forever about getting rid of the tasklet within the tasklet
itself, because it will just crash.
	Look below, comments by me (you've got to love uncommented
code). So, it's not today that I will use tasklets.

	Regards,

	Jean

P.S. : By the way, regarding flow control between TCP and netdevice
(our previous e-mail exchange with Paul), have you investigated the
effect of skb->destructor; (for example sock_wfree()).

-------------------------------------------------------------

static void tasklet_action(struct softirq_action *a)
{
	int cpu = smp_processor_id();
	struct tasklet_struct *list;

	local_irq_disable();
	list = tasklet_vec[cpu].list;
	tasklet_vec[cpu].list = NULL;
	local_irq_enable();

	while (list) {
		struct tasklet_struct *t = list;

		list = list->next;

		if (tasklet_trylock(t)) {
			if (!atomic_read(&t->count)) {
				if (!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state))
					BUG();
	// Call tasklet handler
				t->func(t->data);
	// If tasklet was killed/destroyed/kfree above, we will die
				tasklet_unlock(t);
				continue;
			}
			tasklet_unlock(t);
		}

	// Tasklet is disabled, put back in tasklet queue
		local_irq_disable();
		t->next = tasklet_vec[cpu].list;
		tasklet_vec[cpu].list = t;
		__cpu_raise_softirq(cpu, TASKLET_SOFTIRQ);
		local_irq_enable();
	}
}


  reply	other threads:[~2002-03-18 23:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-03-18 19:53 Jean Tourrilhes
2002-03-18 20:38 ` Richard B. Johnson
2002-03-18 20:57   ` Jean Tourrilhes
2002-03-18 23:20     ` Maksim Krasnyanskiy
2002-03-18 23:33       ` Jean Tourrilhes [this message]
2002-03-19 19:41         ` Maksim Krasnyanskiy
2002-03-22 17:56           ` Maksim Krasnyanskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20020318153347.A26715@bougret.hpl.hp.com \
    --to=jt@bougret.hpl.hp.com \
    --cc=jt@hpl.hp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxk@qualcomm.com \
    --cc=paulus@samba.org \
    --cc=root@chaos.analogic.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®