Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 21 May 2016 14:06:06 +0300
From:      Chagin Dmitry <dchagin@freebsd.org>
To:        "K. Macy" <kmacy@freebsd.org>
Cc:        Johan Hendriks <joh.hendriks@gmail.com>, "O. Hartmann" <ohartman@zedat.fu-berlin.de>, "current@freebsd.org" <current@freebsd.org>, "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>
Subject:   Re: em(4) broken in HEAD?
Message-ID:  <20160521110606.GA2611@chd.heemeyer.club>
In-Reply-To: <CAHM0Q_O2JOQop-7C4prfQWOaKoPV%2BxTbnnn3L%2BQYO7LLM=7xFA@mail.gmail.com>
References:  <20160520115550.GA56197@ymer.vnode.se> <20160520135946.674eb7ac@hermann> <20160520140528.GA56478@ymer.vnode.se> <CAOaKuAWj9ON8ANpZK42xhw-1PnUuCm9dn7j%2BP9P-DAbDKJZ-Nw@mail.gmail.com> <CAHM0Q_NbPPPBUmuF988Ny_7QcCmU5-9WbtX7jHWhps=Chm96SQ@mail.gmail.com> <CAHM0Q_OOXsoA7=sh9oS9cOsmYShFxEGBKZFTK8K=ih5Vntyn7Q@mail.gmail.com> <20160521062847.GA58736@ymer.vnode.se> <CAHM0Q_O2JOQop-7C4prfQWOaKoPV%2BxTbnnn3L%2BQYO7LLM=7xFA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, May 21, 2016 at 02:00:09AM -0700, K. Macy wrote:
> Much to my chagrin, this too is my fault. Please apply the attached
> patch if it hasn't yet been committed to -CURRENT.
> 

thanks, it fixes em for me.





> On Fri, May 20, 2016 at 11:28 PM, Joel Dahl <joel@vnode.se> wrote:
> > On Fri, May 20, 2016 at 07:32:30PM -0700, K. Macy wrote:
> >> I'm seeing watchdog resets on em(4) in my VMWare as of the last day or two.
> >>
> >> >
> >> >
> >> > I don't use ipfw, aliases or anything other than stock networking. I
> >> > was unable to copy a large image off the VM without getting an
> >> > unending stream of watchdog resets which could only be fixed by a
> >> > reboot. Fortunately a subsequent IFC fixed it  as of ~15 hours ago.
> >> >
> >>
> >> I take that back. It's still happening.
> >
> > OK - good to know. I'm going to be travelling for a few days so I won't have
> > time to do a binary search to find the commit that broke it.
> >
> > --
> > Joel

> diff --git a/sys/kern/subr_taskqueue.c b/sys/kern/subr_taskqueue.c
> index 2ef5a3c..00cb46f 100644
> --- a/sys/kern/subr_taskqueue.c
> +++ b/sys/kern/subr_taskqueue.c
> @@ -68,7 +68,6 @@ struct taskqueue {
>  	TAILQ_HEAD(, taskqueue_busy) tq_active;
>  	struct mtx		tq_mutex;
>  	struct thread		**tq_threads;
> -	struct thread		*tq_curthread;
>  	int			tq_tcount;
>  	int			tq_spin;
>  	int			tq_flags;
> @@ -222,7 +221,7 @@ taskqueue_enqueue_locked(struct taskqueue *queue, struct task *task)
>  	 * Count multiple enqueues.
>  	 */
>  	if (task->ta_pending) {
> -		if (task->ta_pending < UCHAR_MAX)
> +		if (task->ta_pending < USHRT_MAX)
>  			task->ta_pending++;
>  		TQ_UNLOCK(queue);
>  		return (0);
> @@ -465,8 +464,7 @@ taskqueue_run_locked(struct taskqueue *queue)
>  
>  		TQ_LOCK(queue);
>  		tb.tb_running = NULL;
> -		if ((task->ta_flags & TASK_SKIP_WAKEUP) == 0)
> -			wakeup(task);
> +		wakeup(task);
>  
>  		TAILQ_REMOVE(&queue->tq_active, &tb, tb_link);
>  		tb_first = TAILQ_FIRST(&queue->tq_active);
> @@ -481,9 +479,7 @@ taskqueue_run(struct taskqueue *queue)
>  {
>  
>  	TQ_LOCK(queue);
> -	queue->tq_curthread = curthread;
>  	taskqueue_run_locked(queue);
> -	queue->tq_curthread = NULL;
>  	TQ_UNLOCK(queue);
>  }
>  
> @@ -716,7 +712,6 @@ taskqueue_thread_loop(void *arg)
>  	tq = *tqp;
>  	taskqueue_run_callback(tq, TASKQUEUE_CALLBACK_TYPE_INIT);
>  	TQ_LOCK(tq);
> -	tq->tq_curthread = curthread;
>  	while ((tq->tq_flags & TQ_FLAGS_ACTIVE) != 0) {
>  		/* XXX ? */
>  		taskqueue_run_locked(tq);
> @@ -730,7 +725,6 @@ taskqueue_thread_loop(void *arg)
>  		TQ_SLEEP(tq, tq, &tq->tq_mutex, 0, "-", 0);
>  	}
>  	taskqueue_run_locked(tq);
> -	tq->tq_curthread = NULL;
>  	/*
>  	 * This thread is on its way out, so just drop the lock temporarily
>  	 * in order to call the shutdown callback.  This allows the callback
> @@ -754,8 +748,7 @@ taskqueue_thread_enqueue(void *context)
>  
>  	tqp = context;
>  	tq = *tqp;
> -	if (tq->tq_curthread != curthread)
> -		wakeup_one(tq);
> +	wakeup_one(tq);
>  }
>  
>  TASKQUEUE_DEFINE(swi, taskqueue_swi_enqueue, NULL,
> diff --git a/sys/sys/_task.h b/sys/sys/_task.h
> index 4cfa171..ce89781 100644
> --- a/sys/sys/_task.h
> +++ b/sys/sys/_task.h
> @@ -45,8 +45,7 @@ typedef void task_fn_t(void *context, int pending);
>  
>  struct task {
>  	STAILQ_ENTRY(task) ta_link;	/* (q) link for queue */
> -	uint8_t	ta_pending;		/* (q) count times queued */
> -	uint8_t	ta_flags;		/* (q) flags */
> +	uint16_t ta_pending;		/* (q) count times queued */
>  	u_short	ta_priority;		/* (c) Priority */
>  	task_fn_t *ta_func;		/* (c) task handler */
>  	void	*ta_context;		/* (c) argument for handler */
> diff --git a/sys/sys/taskqueue.h b/sys/sys/taskqueue.h
> index bc01088..4c4044f 100644
> --- a/sys/sys/taskqueue.h
> +++ b/sys/sys/taskqueue.h
> @@ -98,7 +98,6 @@ void	taskqueue_set_callback(struct taskqueue *queue,
>  
>  #define TASK_INITIALIZER(priority, func, context)	\
>  	{ .ta_pending = 0,				\
> -	  .ta_flags = 0,				\
>  	  .ta_priority = (priority),			\
>  	  .ta_func = (func),				\
>  	  .ta_context = (context) }
> @@ -114,7 +113,6 @@ void	taskqueue_thread_enqueue(void *context);
>   */
>  #define TASK_INIT(task, priority, func, context) do {	\
>  	(task)->ta_pending = 0;				\
> -	(task)->ta_flags = 0;				\
>  	(task)->ta_priority = (priority);		\
>  	(task)->ta_func = (func);			\
>  	(task)->ta_context = (context);			\
> @@ -224,7 +222,6 @@ int	taskqgroup_adjust(struct taskqgroup *qgroup, int cnt, int stride);
>  
>  #define GTASK_INIT(task, priority, func, context) do {	\
>  	(task)->ta_pending = 0;				\
> -	(task)->ta_flags = TASK_SKIP_WAKEUP;		\
>  	(task)->ta_priority = (priority);		\
>  	(task)->ta_func = (func);			\
>  	(task)->ta_context = (context);			\

> _______________________________________________
> freebsd-current@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"


-- 
Have fun!
chd



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160521110606.GA2611>