From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Jose Abreu <joabreu@synopsys.com>,
Florian Fainelli <f.fainelli@gmail.com>,
Neil Armstrong <narmstrong@baylibre.com>,
Jerome Brunet <jbrunet@baylibre.com>,
Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
"David S. Miller" <davem@davemloft.net>,
Joao Pinto <jpinto@synopsys.com>,
Giuseppe Cavallaro <peppe.cavallaro@st.com>,
Alexandre Torgue <alexandre.torgue@st.com>
Subject: [PATCH 4.18 041/135] net: stmmac: Rework coalesce timer and fix multi-queue races
Date: Tue, 16 Oct 2018 19:04:31 +0200 [thread overview]
Message-ID: <20181016170517.682135148@linuxfoundation.org> (raw)
In-Reply-To: <20181016170515.447235311@linuxfoundation.org>
4.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jose Abreu <Jose.Abreu@synopsys.com>
[ Upstream commit 8fce3331702316d4bcfeb0771c09ac75d2192bbc ]
This follows David Miller advice and tries to fix coalesce timer in
multi-queue scenarios.
We are now using per-queue coalesce values and per-queue TX timer.
Coalesce timer default values was changed to 1ms and the coalesce frames
to 25.
Tested in B2B setup between XGMAC2 and GMAC5.
Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Fixes: ce736788e8a ("net: stmmac: adding multiple buffers for TX")
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Jerome Brunet <jbrunet@baylibre.com>
Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joao Pinto <jpinto@synopsys.com>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/ethernet/stmicro/stmmac/common.h | 4
drivers/net/ethernet/stmicro/stmmac/stmmac.h | 14 +
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 234 ++++++++++++----------
include/linux/stmmac.h | 1
4 files changed, 146 insertions(+), 107 deletions(-)
--- a/drivers/net/ethernet/stmicro/stmmac/common.h
+++ b/drivers/net/ethernet/stmicro/stmmac/common.h
@@ -256,10 +256,10 @@ struct stmmac_safety_stats {
#define MAX_DMA_RIWT 0xff
#define MIN_DMA_RIWT 0x20
/* Tx coalesce parameters */
-#define STMMAC_COAL_TX_TIMER 40000
+#define STMMAC_COAL_TX_TIMER 1000
#define STMMAC_MAX_COAL_TX_TICK 100000
#define STMMAC_TX_MAX_FRAMES 256
-#define STMMAC_TX_FRAMES 64
+#define STMMAC_TX_FRAMES 25
/* Packets types */
enum packets_types {
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -48,6 +48,8 @@ struct stmmac_tx_info {
/* Frequently used values are kept adjacent for cache effect */
struct stmmac_tx_queue {
+ u32 tx_count_frames;
+ struct timer_list txtimer;
u32 queue_index;
struct stmmac_priv *priv_data;
struct dma_extended_desc *dma_etx ____cacheline_aligned_in_smp;
@@ -73,7 +75,14 @@ struct stmmac_rx_queue {
u32 rx_zeroc_thresh;
dma_addr_t dma_rx_phy;
u32 rx_tail_addr;
+};
+
+struct stmmac_channel {
struct napi_struct napi ____cacheline_aligned_in_smp;
+ struct stmmac_priv *priv_data;
+ u32 index;
+ int has_rx;
+ int has_tx;
};
struct stmmac_tc_entry {
@@ -109,14 +118,12 @@ struct stmmac_pps_cfg {
struct stmmac_priv {
/* Frequently used values are kept adjacent for cache effect */
- u32 tx_count_frames;
u32 tx_coal_frames;
u32 tx_coal_timer;
int tx_coalesce;
int hwts_tx_en;
bool tx_path_in_lpi_mode;
- struct timer_list txtimer;
bool tso;
unsigned int dma_buf_sz;
@@ -137,6 +144,9 @@ struct stmmac_priv {
/* TX Queue */
struct stmmac_tx_queue tx_queue[MTL_MAX_TX_QUEUES];
+ /* Generic channel for NAPI */
+ struct stmmac_channel channel[STMMAC_CH_MAX];
+
bool oldlink;
int speed;
int oldduplex;
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -147,12 +147,14 @@ static void stmmac_verify_args(void)
static void stmmac_disable_all_queues(struct stmmac_priv *priv)
{
u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
+ u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
+ u32 maxq = max(rx_queues_cnt, tx_queues_cnt);
u32 queue;
- for (queue = 0; queue < rx_queues_cnt; queue++) {
- struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+ for (queue = 0; queue < maxq; queue++) {
+ struct stmmac_channel *ch = &priv->channel[queue];
- napi_disable(&rx_q->napi);
+ napi_disable(&ch->napi);
}
}
@@ -163,12 +165,14 @@ static void stmmac_disable_all_queues(st
static void stmmac_enable_all_queues(struct stmmac_priv *priv)
{
u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
+ u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
+ u32 maxq = max(rx_queues_cnt, tx_queues_cnt);
u32 queue;
- for (queue = 0; queue < rx_queues_cnt; queue++) {
- struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+ for (queue = 0; queue < maxq; queue++) {
+ struct stmmac_channel *ch = &priv->channel[queue];
- napi_enable(&rx_q->napi);
+ napi_enable(&ch->napi);
}
}
@@ -1822,18 +1826,18 @@ static void stmmac_dma_operation_mode(st
* @queue: TX queue index
* Description: it reclaims the transmit resources after transmission completes.
*/
-static void stmmac_tx_clean(struct stmmac_priv *priv, u32 queue)
+static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue)
{
struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
unsigned int bytes_compl = 0, pkts_compl = 0;
- unsigned int entry;
+ unsigned int entry, count = 0;
- netif_tx_lock(priv->dev);
+ __netif_tx_lock_bh(netdev_get_tx_queue(priv->dev, queue));
priv->xstats.tx_clean++;
entry = tx_q->dirty_tx;
- while (entry != tx_q->cur_tx) {
+ while ((entry != tx_q->cur_tx) && (count < budget)) {
struct sk_buff *skb = tx_q->tx_skbuff[entry];
struct dma_desc *p;
int status;
@@ -1849,6 +1853,8 @@ static void stmmac_tx_clean(struct stmma
if (unlikely(status & tx_dma_own))
break;
+ count++;
+
/* Make sure descriptor fields are read after reading
* the own bit.
*/
@@ -1916,7 +1922,10 @@ static void stmmac_tx_clean(struct stmma
stmmac_enable_eee_mode(priv);
mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
}
- netif_tx_unlock(priv->dev);
+
+ __netif_tx_unlock_bh(netdev_get_tx_queue(priv->dev, queue));
+
+ return count;
}
/**
@@ -1999,6 +2008,33 @@ static bool stmmac_safety_feat_interrupt
return false;
}
+static int stmmac_napi_check(struct stmmac_priv *priv, u32 chan)
+{
+ int status = stmmac_dma_interrupt_status(priv, priv->ioaddr,
+ &priv->xstats, chan);
+ struct stmmac_channel *ch = &priv->channel[chan];
+ bool needs_work = false;
+
+ if ((status & handle_rx) && ch->has_rx) {
+ needs_work = true;
+ } else {
+ status &= ~handle_rx;
+ }
+
+ if ((status & handle_tx) && ch->has_tx) {
+ needs_work = true;
+ } else {
+ status &= ~handle_tx;
+ }
+
+ if (needs_work && napi_schedule_prep(&ch->napi)) {
+ stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
+ __napi_schedule(&ch->napi);
+ }
+
+ return status;
+}
+
/**
* stmmac_dma_interrupt - DMA ISR
* @priv: driver private structure
@@ -2013,57 +2049,14 @@ static void stmmac_dma_interrupt(struct
u32 channels_to_check = tx_channel_count > rx_channel_count ?
tx_channel_count : rx_channel_count;
u32 chan;
- bool poll_scheduled = false;
int status[max_t(u32, MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES)];
/* Make sure we never check beyond our status buffer. */
if (WARN_ON_ONCE(channels_to_check > ARRAY_SIZE(status)))
channels_to_check = ARRAY_SIZE(status);
- /* Each DMA channel can be used for rx and tx simultaneously, yet
- * napi_struct is embedded in struct stmmac_rx_queue rather than in a
- * stmmac_channel struct.
- * Because of this, stmmac_poll currently checks (and possibly wakes)
- * all tx queues rather than just a single tx queue.
- */
for (chan = 0; chan < channels_to_check; chan++)
- status[chan] = stmmac_dma_interrupt_status(priv, priv->ioaddr,
- &priv->xstats, chan);
-
- for (chan = 0; chan < rx_channel_count; chan++) {
- if (likely(status[chan] & handle_rx)) {
- struct stmmac_rx_queue *rx_q = &priv->rx_queue[chan];
-
- if (likely(napi_schedule_prep(&rx_q->napi))) {
- stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
- __napi_schedule(&rx_q->napi);
- poll_scheduled = true;
- }
- }
- }
-
- /* If we scheduled poll, we already know that tx queues will be checked.
- * If we didn't schedule poll, see if any DMA channel (used by tx) has a
- * completed transmission, if so, call stmmac_poll (once).
- */
- if (!poll_scheduled) {
- for (chan = 0; chan < tx_channel_count; chan++) {
- if (status[chan] & handle_tx) {
- /* It doesn't matter what rx queue we choose
- * here. We use 0 since it always exists.
- */
- struct stmmac_rx_queue *rx_q =
- &priv->rx_queue[0];
-
- if (likely(napi_schedule_prep(&rx_q->napi))) {
- stmmac_disable_dma_irq(priv,
- priv->ioaddr, chan);
- __napi_schedule(&rx_q->napi);
- }
- break;
- }
- }
- }
+ status[chan] = stmmac_napi_check(priv, chan);
for (chan = 0; chan < tx_channel_count; chan++) {
if (unlikely(status[chan] & tx_hard_error_bump_tc)) {
@@ -2211,6 +2204,13 @@ static int stmmac_init_dma_engine(struct
return ret;
}
+static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue)
+{
+ struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
+
+ mod_timer(&tx_q->txtimer, STMMAC_COAL_TIMER(priv->tx_coal_timer));
+}
+
/**
* stmmac_tx_timer - mitigation sw timer for tx.
* @data: data pointer
@@ -2219,13 +2219,14 @@ static int stmmac_init_dma_engine(struct
*/
static void stmmac_tx_timer(struct timer_list *t)
{
- struct stmmac_priv *priv = from_timer(priv, t, txtimer);
- u32 tx_queues_count = priv->plat->tx_queues_to_use;
- u32 queue;
+ struct stmmac_tx_queue *tx_q = from_timer(tx_q, t, txtimer);
+ struct stmmac_priv *priv = tx_q->priv_data;
+ struct stmmac_channel *ch;
- /* let's scan all the tx queues */
- for (queue = 0; queue < tx_queues_count; queue++)
- stmmac_tx_clean(priv, queue);
+ ch = &priv->channel[tx_q->queue_index];
+
+ if (likely(napi_schedule_prep(&ch->napi)))
+ __napi_schedule(&ch->napi);
}
/**
@@ -2238,11 +2239,17 @@ static void stmmac_tx_timer(struct timer
*/
static void stmmac_init_tx_coalesce(struct stmmac_priv *priv)
{
+ u32 tx_channel_count = priv->plat->tx_queues_to_use;
+ u32 chan;
+
priv->tx_coal_frames = STMMAC_TX_FRAMES;
priv->tx_coal_timer = STMMAC_COAL_TX_TIMER;
- timer_setup(&priv->txtimer, stmmac_tx_timer, 0);
- priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer);
- add_timer(&priv->txtimer);
+
+ for (chan = 0; chan < tx_channel_count; chan++) {
+ struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan];
+
+ timer_setup(&tx_q->txtimer, stmmac_tx_timer, 0);
+ }
}
static void stmmac_set_rings_length(struct stmmac_priv *priv)
@@ -2570,6 +2577,7 @@ static void stmmac_hw_teardown(struct ne
static int stmmac_open(struct net_device *dev)
{
struct stmmac_priv *priv = netdev_priv(dev);
+ u32 chan;
int ret;
stmmac_check_ether_addr(priv);
@@ -2666,7 +2674,9 @@ irq_error:
if (dev->phydev)
phy_stop(dev->phydev);
- del_timer_sync(&priv->txtimer);
+ for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
+ del_timer_sync(&priv->tx_queue[chan].txtimer);
+
stmmac_hw_teardown(dev);
init_error:
free_dma_desc_resources(priv);
@@ -2686,6 +2696,7 @@ dma_desc_error:
static int stmmac_release(struct net_device *dev)
{
struct stmmac_priv *priv = netdev_priv(dev);
+ u32 chan;
if (priv->eee_enabled)
del_timer_sync(&priv->eee_ctrl_timer);
@@ -2700,7 +2711,8 @@ static int stmmac_release(struct net_dev
stmmac_disable_all_queues(priv);
- del_timer_sync(&priv->txtimer);
+ for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
+ del_timer_sync(&priv->tx_queue[chan].txtimer);
/* Free the IRQ lines */
free_irq(dev->irq, dev);
@@ -2914,14 +2926,13 @@ static netdev_tx_t stmmac_tso_xmit(struc
priv->xstats.tx_tso_nfrags += nfrags;
/* Manage tx mitigation */
- priv->tx_count_frames += nfrags + 1;
- if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
- mod_timer(&priv->txtimer,
- STMMAC_COAL_TIMER(priv->tx_coal_timer));
- } else {
- priv->tx_count_frames = 0;
+ tx_q->tx_count_frames += nfrags + 1;
+ if (priv->tx_coal_frames <= tx_q->tx_count_frames) {
stmmac_set_tx_ic(priv, desc);
priv->xstats.tx_set_ic_bit++;
+ tx_q->tx_count_frames = 0;
+ } else {
+ stmmac_tx_timer_arm(priv, queue);
}
skb_tx_timestamp(skb);
@@ -3125,14 +3136,13 @@ static netdev_tx_t stmmac_xmit(struct sk
* This approach takes care about the fragments: desc is the first
* element in case of no SG.
*/
- priv->tx_count_frames += nfrags + 1;
- if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
- mod_timer(&priv->txtimer,
- STMMAC_COAL_TIMER(priv->tx_coal_timer));
- } else {
- priv->tx_count_frames = 0;
+ tx_q->tx_count_frames += nfrags + 1;
+ if (priv->tx_coal_frames <= tx_q->tx_count_frames) {
stmmac_set_tx_ic(priv, desc);
priv->xstats.tx_set_ic_bit++;
+ tx_q->tx_count_frames = 0;
+ } else {
+ stmmac_tx_timer_arm(priv, queue);
}
skb_tx_timestamp(skb);
@@ -3300,6 +3310,7 @@ static inline void stmmac_rx_refill(stru
static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
{
struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+ struct stmmac_channel *ch = &priv->channel[queue];
unsigned int entry = rx_q->cur_rx;
int coe = priv->hw->rx_csum;
unsigned int next_entry;
@@ -3469,7 +3480,7 @@ static int stmmac_rx(struct stmmac_priv
else
skb->ip_summed = CHECKSUM_UNNECESSARY;
- napi_gro_receive(&rx_q->napi, skb);
+ napi_gro_receive(&ch->napi, skb);
priv->dev->stats.rx_packets++;
priv->dev->stats.rx_bytes += frame_len;
@@ -3492,27 +3503,33 @@ static int stmmac_rx(struct stmmac_priv
* Description :
* To look at the incoming frames and clear the tx resources.
*/
-static int stmmac_poll(struct napi_struct *napi, int budget)
+static int stmmac_napi_poll(struct napi_struct *napi, int budget)
{
- struct stmmac_rx_queue *rx_q =
- container_of(napi, struct stmmac_rx_queue, napi);
- struct stmmac_priv *priv = rx_q->priv_data;
- u32 tx_count = priv->plat->tx_queues_to_use;
- u32 chan = rx_q->queue_index;
- int work_done = 0;
- u32 queue;
+ struct stmmac_channel *ch =
+ container_of(napi, struct stmmac_channel, napi);
+ struct stmmac_priv *priv = ch->priv_data;
+ int work_done = 0, work_rem = budget;
+ u32 chan = ch->index;
priv->xstats.napi_poll++;
- /* check all the queues */
- for (queue = 0; queue < tx_count; queue++)
- stmmac_tx_clean(priv, queue);
-
- work_done = stmmac_rx(priv, budget, rx_q->queue_index);
- if (work_done < budget) {
- napi_complete_done(napi, work_done);
- stmmac_enable_dma_irq(priv, priv->ioaddr, chan);
+ if (ch->has_tx) {
+ int done = stmmac_tx_clean(priv, work_rem, chan);
+
+ work_done += done;
+ work_rem -= done;
+ }
+
+ if (ch->has_rx) {
+ int done = stmmac_rx(priv, work_rem, chan);
+
+ work_done += done;
+ work_rem -= done;
}
+
+ if (work_done < budget && napi_complete_done(napi, work_done))
+ stmmac_enable_dma_irq(priv, priv->ioaddr, chan);
+
return work_done;
}
@@ -4172,8 +4189,8 @@ int stmmac_dvr_probe(struct device *devi
{
struct net_device *ndev = NULL;
struct stmmac_priv *priv;
+ u32 queue, maxq;
int ret = 0;
- u32 queue;
ndev = alloc_etherdev_mqs(sizeof(struct stmmac_priv),
MTL_MAX_TX_QUEUES,
@@ -4293,11 +4310,22 @@ int stmmac_dvr_probe(struct device *devi
"Enable RX Mitigation via HW Watchdog Timer\n");
}
- for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
- struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+ /* Setup channels NAPI */
+ maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);
- netif_napi_add(ndev, &rx_q->napi, stmmac_poll,
- (8 * priv->plat->rx_queues_to_use));
+ for (queue = 0; queue < maxq; queue++) {
+ struct stmmac_channel *ch = &priv->channel[queue];
+
+ ch->priv_data = priv;
+ ch->index = queue;
+
+ if (queue < priv->plat->rx_queues_to_use)
+ ch->has_rx = true;
+ if (queue < priv->plat->tx_queues_to_use)
+ ch->has_tx = true;
+
+ netif_napi_add(ndev, &ch->napi, stmmac_napi_poll,
+ NAPI_POLL_WEIGHT);
}
mutex_init(&priv->lock);
@@ -4343,10 +4371,10 @@ error_netdev_register:
priv->hw->pcs != STMMAC_PCS_RTBI)
stmmac_mdio_unregister(ndev);
error_mdio_register:
- for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
- struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
+ for (queue = 0; queue < maxq; queue++) {
+ struct stmmac_channel *ch = &priv->channel[queue];
- netif_napi_del(&rx_q->napi);
+ netif_napi_del(&ch->napi);
}
error_hw_init:
destroy_workqueue(priv->wq);
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -30,6 +30,7 @@
#define MTL_MAX_RX_QUEUES 8
#define MTL_MAX_TX_QUEUES 8
+#define STMMAC_CH_MAX 8
#define STMMAC_RX_COE_NONE 0
#define STMMAC_RX_COE_TYPE1 1
next prev parent reply other threads:[~2018-10-17 1:04 UTC|newest]
Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-16 17:03 [PATCH 4.18 000/135] 4.18.15-stable review Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 001/135] bnxt_en: Fix TX timeout during netpoll Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 002/135] bnxt_en: free hwrm resources, if driver probe fails Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 003/135] bonding: avoid possible dead-lock Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 004/135] ip6_tunnel: be careful when accessing the inner header Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 005/135] ip_tunnel: " Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 006/135] ipv4: fix use-after-free in ip_cmsg_recv_dstaddr() Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 007/135] ipv6: take rcu lock in rawv6_send_hdrinc() Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 008/135] net: dsa: bcm_sf2: Call setup during switch resume Greg Kroah-Hartman
2018-10-16 17:03 ` [PATCH 4.18 009/135] net: hns: fix for unmapping problem when SMMU is on Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 010/135] net: ipv4: update fnhe_pmtu when first hops MTU changes Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 011/135] net/ipv6: Display all addresses in output of /proc/net/if_inet6 Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 012/135] netlabel: check for IPV4MASK in addrinfo_get Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 013/135] net: mvpp2: Extract the correct ethtype from the skb for tx csum offload Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 014/135] net: mvpp2: fix a txq_done race condition Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 015/135] net: sched: Add policy validation for tc attributes Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 016/135] net: sched: cls_u32: fix hnode refcounting Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 017/135] net: systemport: Fix wake-up interrupt race during resume Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 018/135] net/usb: cancel pending work when unbinding smsc75xx Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 019/135] qlcnic: fix Tx descriptor corruption on 82xx devices Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 020/135] qmi_wwan: Added support for Gemaltos Cinterion ALASxx WWAN interface Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 021/135] rtnetlink: fix rtnl_fdb_dump() for ndmsg header Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 022/135] rtnl: limit IFLA_NUM_TX_QUEUES and IFLA_NUM_RX_QUEUES to 4096 Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 023/135] sctp: update dst pmtu with the correct daddr Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 024/135] team: Forbid enslaving team device to itself Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 025/135] tipc: fix flow control accounting for implicit connect Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 026/135] udp: Unbreak modules that rely on external __skb_recv_udp() availability Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 027/135] net: qualcomm: rmnet: Skip processing loopback packets Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 028/135] net: qualcomm: rmnet: Fix incorrect allocation flag in transmit Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 029/135] net: qualcomm: rmnet: Fix incorrect allocation flag in receive path Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 030/135] tun: remove unused parameters Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 031/135] tun: initialize napi_mutex unconditionally Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 032/135] tun: napi flags belong to tfile Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 033/135] net: stmmac: Fixup the tail addr setting in xmit path Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 034/135] net/packet: fix packet drop as of virtio gso Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 035/135] net: dsa: bcm_sf2: Fix unbind ordering Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 036/135] net/mlx5e: Set vlan masks for all offloaded TC rules Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 037/135] net: aquantia: memory corruption on jumbo frames Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 038/135] net/mlx5: E-Switch, Fix out of bound access when setting vport rate Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 039/135] bonding: pass link-local packets to bonding master also Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 040/135] bonding: fix warning message Greg Kroah-Hartman
2018-10-16 17:04 ` Greg Kroah-Hartman [this message]
2018-10-16 17:04 ` [PATCH 4.18 042/135] nfp: avoid soft lockups under control message storm Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 043/135] bnxt_en: dont try to offload VLAN modify action Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 044/135] net-ethtool: ETHTOOL_GUFO did not and should not require CAP_NET_ADMIN Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 045/135] net: phy: phylink: fix SFP interface autodetection Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 046/135] sfp: fix oops with ethtool -m Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 047/135] tcp/dccp: fix lockdep issue when SYN is backlogged Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 048/135] inet: make sure to grab rcu_read_lock before using ireq->ireq_opt Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 049/135] net: dsa: b53: Keep CPU port as tagged in all VLANs Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 050/135] rtnetlink: Fail dump if target netnsid is invalid Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 051/135] bnxt_en: Fix VNIC reservations on the PF Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 052/135] net: ipv4: dont let PMTU updates increase route MTU Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 053/135] net/mlx5: Check for SQ and not RQ state when modifying hairpin SQ Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 054/135] bnxt_en: Fix enables field in HWRM_QUEUE_COS2BW_CFG request Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 055/135] bnxt_en: get the reduced max_irqs by the ones used by RDMA Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 056/135] net/ipv6: Remove extra call to ip6_convert_metrics for multipath case Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 057/135] net/ipv6: stop leaking percpu memory in fib6 info Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 058/135] net: mscc: fix the frame extraction into the skb Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 059/135] qed: Fix shmem structure inconsistency between driver and the mfw Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 060/135] r8169: fix network stalls due to missing bit TXCFG_AUTO_FIFO Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 061/135] r8169: set RX_MULTI_EN bit in RxConfig for 8168F-family chips Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 062/135] vxlan: fill ttl inherit info Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 063/135] ASoC: dapm: Fix NULL pointer deference on CODEC to CODEC DAIs Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 064/135] ASoC: max98373: Added speaker FS gain cotnrol register to volatile Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 065/135] ASoC: rt5514: Fix the issue of the delay volume applied again Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 066/135] selftests: android: move config up a level Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 067/135] selftests: kselftest: Remove outdated comment Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 068/135] ASoC: max98373: Added 10ms sleep after amp software reset Greg Kroah-Hartman
2018-10-16 17:04 ` [PATCH 4.18 069/135] ASoC: wm8804: Add ACPI support Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 070/135] ASoC: sigmadsp: safeload should not have lower byte limit Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 071/135] ASoC: q6routing: initialize data correctly Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 072/135] selftests: add headers_install to lib.mk Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 073/135] selftests/efivarfs: add required kernel configs Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 074/135] selftests: memory-hotplug: add required configs Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 075/135] ASoC: rsnd: adg: care clock-frequency size Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 076/135] ASoC: rsnd: dont fallback to PIO mode when -EPROBE_DEFER Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 077/135] hwmon: (nct6775) Fix access to fan pulse registers Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 078/135] Fix cg_read_strcmp() Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 079/135] Add tests for memory.oom.group Greg Kroah-Hartman
2018-10-16 19:39 ` Roman Gushchin
2018-10-17 7:47 ` Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 080/135] ASoC: AMD: Ensure reset bit is cleared before configuring Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 081/135] drm/pl111: Make sure of_device_id tables are NULL terminated Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 082/135] Bluetooth: SMP: Fix trying to use non-existent local OOB data Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 083/135] Bluetooth: Use correct tfm to generate " Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 084/135] Bluetooth: hci_ldisc: Free rw_semaphore on close Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 085/135] mfd: omap-usb-host: Fix dts probe of children Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 086/135] KVM: PPC: Book3S HV: Dont use compound_order to determine host mapping size Greg Kroah-Hartman
2018-10-16 22:32 ` Paul Mackerras
2018-10-17 7:48 ` Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 087/135] scsi: iscsi: target: Dont use stack buffer for scatterlist Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 088/135] scsi: qla2xxx: Fix an endian bug in fcpcmd_is_corrupted() Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 089/135] sound: enable interrupt after dma buffer initialization Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 090/135] sound: dont call skl_init_chip() to reset intel skl soc Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 091/135] bpf: btf: Fix end boundary calculation for type section Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 092/135] bpf: use __GFP_COMP while allocating page Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 093/135] hwmon: (nct6775) Fix virtual temperature sources for NCT6796D Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 094/135] hwmon: (nct6775) Fix RPM output for fan7 on NCT6796D Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 095/135] stmmac: fix valid numbers of unicast filter entries Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 096/135] hwmon: (nct6775) Use different register to get fan RPM for fan7 Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 097/135] net: ethernet: ti: add missing GENERIC_ALLOCATOR dependency Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 098/135] net: macb: disable scatter-gather for macb on sama5d3 Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 099/135] ARM: dts: at91: add new compatibility string " Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 100/135] PCI: hv: support reporting serial number as slot information Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 101/135] hv_netvsc: pair VF based on serial number Greg Kroah-Hartman
2018-10-16 19:13 ` Haiyang Zhang
2018-10-17 7:46 ` Greg Kroah-Hartman
2018-10-17 13:02 ` Haiyang Zhang
2018-10-17 13:17 ` Greg Kroah-Hartman
2018-10-17 14:15 ` Haiyang Zhang
2018-10-17 14:26 ` Greg Kroah-Hartman
2018-10-17 14:40 ` Sasha Levin
2018-10-17 14:47 ` Greg Kroah-Hartman
2018-10-17 13:20 ` Sasha Levin
2018-10-16 17:05 ` [PATCH 4.18 102/135] clk: x86: add "ether_clk" alias for Bay Trail / Cherry Trail Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 103/135] clk: x86: Stop marking clocks as CLK_IS_CRITICAL Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 104/135] pinctrl: cannonlake: Fix gpio base for GPP-E Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 105/135] x86/kvm/lapic: always disable MMIO interface in x2APIC mode Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 106/135] drm/amdgpu: Fix SDMA HQD destroy error on gfx_v7 Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 107/135] drm/amdkfd: Change the control stack MTYPE from UC to NC on GFX9 Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 108/135] drm/amdkfd: Fix ATS capablity was not reported correctly on some APUs Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 109/135] mm: slowly shrink slabs with a relatively small number of objects Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 110/135] mm/vmstat.c: fix outdated vmstat_text Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 111/135] afs: Fix afs_server struct leak Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 112/135] afs: Fix clearance of reply Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 113/135] MIPS: Fix CONFIG_CMDLINE handling Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 114/135] MIPS: VDSO: Always map near top of user memory Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 115/135] mach64: detect the dot clock divider correctly on sparc Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 116/135] vsprintf: Fix off-by-one bug in bstr_printf() processing dereferenced pointers Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 117/135] percpu: stop leaking bitmap metadata blocks Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 118/135] perf script python: Fix export-to-postgresql.py occasional failure Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 119/135] perf script python: Fix export-to-sqlite.py sample columns Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 120/135] s390/cio: Fix how vfio-ccw checks pinned pages Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 121/135] dm cache: destroy migration_cache if cache target registration failed Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 122/135] dm: fix report zone remapping to account for partition offset Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 123/135] dm linear: eliminate linear_end_io call if CONFIG_DM_ZONED disabled Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 124/135] dm linear: fix linear_end_io conditional definition Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 125/135] cgroup: Fix dom_cgrp propagation when enabling threaded mode Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 126/135] Input: xpad - add support for Xbox1 PDP Camo series gamepad Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 127/135] drm/nouveau/drm/nouveau: Grab runtime PM ref in nv50_mstc_detect() Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 128/135] mmc: block: avoid multiblock reads for the last sector in SPI mode Greg Kroah-Hartman
2018-10-16 17:05 ` [PATCH 4.18 129/135] pinctrl: mcp23s08: fix irq and irqchip setup order Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 130/135] arm64: perf: Reject stand-alone CHAIN events for PMUv3 Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 131/135] mm/mmap.c: dont clobber partially overlapping VMA with MAP_FIXED_NOREPLACE Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 132/135] mm/thp: fix call to mmu_notifier in set_pmd_migration_entry() v2 Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 133/135] filesystem-dax: Fix dax_layout_busy_page() livelock Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 134/135] mm: Preserve _PAGE_DEVMAP across mprotect() calls Greg Kroah-Hartman
2018-10-16 17:06 ` [PATCH 4.18 135/135] i2c: i2c-scmi: fix for i2c_smbus_write_block_data Greg Kroah-Hartman
2018-10-16 18:33 ` [PATCH 4.18 000/135] 4.18.15-stable review Holger Hoffstätte
2018-10-17 7:48 ` Greg Kroah-Hartman
2018-10-17 14:14 ` Dan Rue
2018-10-17 14:47 ` Greg Kroah-Hartman
2018-10-17 18:30 ` Shuah Khan
2018-10-18 7:11 ` Greg Kroah-Hartman
2018-10-17 19:21 ` Guenter Roeck
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=20181016170517.682135148@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=alexandre.torgue@st.com \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=jbrunet@baylibre.com \
--cc=joabreu@synopsys.com \
--cc=jpinto@synopsys.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.blumenstingl@googlemail.com \
--cc=narmstrong@baylibre.com \
--cc=peppe.cavallaro@st.com \
--cc=stable@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).