From owner-freebsd-net@freebsd.org Sat May 21 09:38:41 2016 Return-Path: Delivered-To: freebsd-net@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F3153B44B4A; Sat, 21 May 2016 09:38:40 +0000 (UTC) (envelope-from dchagin@chd.heemeyer.club) Received: from heemeyer.club (heemeyer.club [108.61.204.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "heemeyer.club", Issuer "heemeyer.club" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id C67281FC6; Sat, 21 May 2016 09:38:39 +0000 (UTC) (envelope-from dchagin@chd.heemeyer.club) Received: from chd.heemeyer.club (dchagin.static.corbina.ru [78.107.232.239]) by heemeyer.club (8.15.2/8.15.1) with ESMTPS id u4L9H5fC000865 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sat, 21 May 2016 09:17:06 GMT (envelope-from dchagin@chd.heemeyer.club) X-Authentication-Warning: heemeyer.club: Host dchagin.static.corbina.ru [78.107.232.239] claimed to be chd.heemeyer.club Received: from chd.heemeyer.club (localhost [127.0.0.1]) by chd.heemeyer.club (8.15.2/8.15.1) with ESMTPS id u4LB67op002619 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sat, 21 May 2016 14:06:07 +0300 (MSK) (envelope-from dchagin@chd.heemeyer.club) Received: (from dchagin@localhost) by chd.heemeyer.club (8.15.2/8.15.2/Submit) id u4LB66Zi002618; Sat, 21 May 2016 14:06:06 +0300 (MSK) (envelope-from dchagin) Date: Sat, 21 May 2016 14:06:06 +0300 From: Chagin Dmitry To: "K. Macy" Cc: Johan Hendriks , "O. Hartmann" , "current@freebsd.org" , "freebsd-net@freebsd.org" Subject: Re: em(4) broken in HEAD? Message-ID: <20160521110606.GA2611@chd.heemeyer.club> References: <20160520115550.GA56197@ymer.vnode.se> <20160520135946.674eb7ac@hermann> <20160520140528.GA56478@ymer.vnode.se> <20160521062847.GA58736@ymer.vnode.se> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.6.0 (2016-04-01) X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 May 2016 09:38:41 -0000 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 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