From a9e5ca2b2ad4fb4dd04dd121dd2515e91deb4aff Mon Sep 17 00:00:00 2001 From: tb Date: Thu, 4 Jan 2018 11:02:57 +0000 Subject: [PATCH] Back out tx mitigation again because it breaks suspend and resume at least on x230 and x240. Problem noted by claudio on icb. ok dlg --- sys/net/ifq.c | 43 +------------------------------------------ sys/net/ifq.h | 11 +++++++---- 2 files changed, 8 insertions(+), 46 deletions(-) diff --git a/sys/net/ifq.c b/sys/net/ifq.c index 6b71376a1b4..99b4704f8d0 100644 --- a/sys/net/ifq.c +++ b/sys/net/ifq.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ifq.c,v 1.20 2018/01/02 07:08:10 dlg Exp $ */ +/* $OpenBSD: ifq.c,v 1.21 2018/01/04 11:02:57 tb Exp $ */ /* * Copyright (c) 2015 David Gwynne @@ -70,16 +70,9 @@ struct priq { void ifq_start_task(void *); void ifq_restart_task(void *); void ifq_barrier_task(void *); -void ifq_bundle_task(void *); #define TASK_ONQUEUE 0x1 -static inline void -ifq_run_start(struct ifqueue *ifq) -{ - ifq_serialize(ifq, &ifq->ifq_start); -} - void ifq_serialize(struct ifqueue *ifq, struct task *t) { @@ -120,16 +113,6 @@ ifq_is_serialized(struct ifqueue *ifq) return (ifq->ifq_serializer == curcpu()); } -void -ifq_start(struct ifqueue *ifq) -{ - if (ifq_len(ifq) >= min(4, ifq->ifq_maxlen)) { - task_del(ifq->ifq_softnet, &ifq->ifq_bundle); - ifq_run_start(ifq); - } else - task_add(ifq->ifq_softnet, &ifq->ifq_bundle); -} - void ifq_start_task(void *p) { @@ -153,32 +136,12 @@ ifq_restart_task(void *p) ifp->if_qstart(ifq); } -void -ifq_bundle_task(void *p) -{ - struct ifqueue *ifq = p; - - ifq_run_start(ifq); -} - void ifq_barrier(struct ifqueue *ifq) { struct cond c = COND_INITIALIZER(); struct task t = TASK_INITIALIZER(ifq_barrier_task, &c); - if (!task_del(ifq->ifq_softnet, &ifq->ifq_bundle)) { - int netlocked = (rw_status(&netlock) == RW_WRITE); - - if (netlocked) /* XXXSMP breaks atomicity */ - NET_UNLOCK(); - - taskq_barrier(ifq->ifq_softnet); - - if (netlocked) - NET_LOCK(); - } - if (ifq->ifq_serializer == NULL) return; @@ -203,7 +166,6 @@ void ifq_init(struct ifqueue *ifq, struct ifnet *ifp, unsigned int idx) { ifq->ifq_if = ifp; - ifq->ifq_softnet = net_tq(ifp->if_index); ifq->ifq_softc = NULL; mtx_init(&ifq->ifq_mtx, IPL_NET); @@ -225,7 +187,6 @@ ifq_init(struct ifqueue *ifq, struct ifnet *ifp, unsigned int idx) mtx_init(&ifq->ifq_task_mtx, IPL_NET); TAILQ_INIT(&ifq->ifq_task_list); ifq->ifq_serializer = NULL; - task_set(&ifq->ifq_bundle, ifq_bundle_task, ifq); task_set(&ifq->ifq_start, ifq_start_task, ifq); task_set(&ifq->ifq_restart, ifq_restart_task, ifq); @@ -277,8 +238,6 @@ ifq_destroy(struct ifqueue *ifq) { struct mbuf_list ml = MBUF_LIST_INITIALIZER(); - ifq_barrier(ifq); /* ensure nothing is running with the ifq */ - /* don't need to lock because this is the last use of the ifq */ ifq->ifq_ops->ifqop_purge(ifq, &ml); diff --git a/sys/net/ifq.h b/sys/net/ifq.h index 345d1068594..3ce402b34c1 100644 --- a/sys/net/ifq.h +++ b/sys/net/ifq.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ifq.h,v 1.19 2018/01/02 07:08:10 dlg Exp $ */ +/* $OpenBSD: ifq.h,v 1.20 2018/01/04 11:02:57 tb Exp $ */ /* * Copyright (c) 2015 David Gwynne @@ -25,7 +25,6 @@ struct ifq_ops; struct ifqueue { struct ifnet *ifq_if; - struct taskq *ifq_softnet; union { void *_ifq_softc; /* @@ -58,7 +57,6 @@ struct ifqueue { struct mutex ifq_task_mtx; struct task_list ifq_task_list; void *ifq_serializer; - struct task ifq_bundle; /* work to be serialised */ struct task ifq_start; @@ -407,7 +405,6 @@ void ifq_attach(struct ifqueue *, const struct ifq_ops *, void *); void ifq_destroy(struct ifqueue *); void ifq_add_data(struct ifqueue *, struct if_data *); int ifq_enqueue(struct ifqueue *, struct mbuf *); -void ifq_start(struct ifqueue *); struct mbuf *ifq_deq_begin(struct ifqueue *); void ifq_deq_commit(struct ifqueue *, struct mbuf *); void ifq_deq_rollback(struct ifqueue *, struct mbuf *); @@ -443,6 +440,12 @@ ifq_is_oactive(struct ifqueue *ifq) return (ifq->ifq_oactive); } +static inline void +ifq_start(struct ifqueue *ifq) +{ + ifq_serialize(ifq, &ifq->ifq_start); +} + static inline void ifq_restart(struct ifqueue *ifq) { -- 2.20.1