From patchwork Tue Sep 19 17:35:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Lamparter X-Patchwork-Id: 815730 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlemail.com header.i=@googlemail.com header.b="H773ioHp"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xxVQ50ylyz9rvt for ; Wed, 20 Sep 2017 03:35:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751301AbdISRfX (ORCPT ); Tue, 19 Sep 2017 13:35:23 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:37252 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750919AbdISRfV (ORCPT ); Tue, 19 Sep 2017 13:35:21 -0400 Received: by mail-wm0-f65.google.com with SMTP id f4so278635wmh.4 for ; Tue, 19 Sep 2017 10:35:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=NBhVgWL/fOiGDJZBcmTTneVDYo4absyz6bxMHwNSlNE=; b=H773ioHp917VngfZSTVGEzhmSoP8GegSRPIe0mrR8RYhqb/+sHhvI/I9HHhHEopaJ4 e4aqB7TrPSw/La9JMKA+wVpBk5uv64PLrH2IeokAro/07BMapd9P9AODn/LaBoc5USIl Ov/fVKna0r4+H/Lr3lmWxnKKq9d22/Ggw2BVOw0zognGRwdEFTumnTRKY+DmkLZnr9l7 YJGfzlgmD/R9h5c8S2jdsYwuKgJIhTV9ASK8O8QY972+1iNwZq80ffDv8zTqiuK9n02H lj6KXJy9PMFP8yMcLzdobUDzGa7lfxv7I+sUfmPkw7lZ4CubJRM3FHVajd3IbqA+Nq7b M7Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NBhVgWL/fOiGDJZBcmTTneVDYo4absyz6bxMHwNSlNE=; b=he1VRAm1/vgrXWR1hpzE/ruJzsOuo2o/f6HeJBSwJHeWlW5CzRlZ62tVpkzOKbgDuA noJIREJrmCr5zWHOZMR/wmBWt+Vnm3QWeTDOko3FpYRczRIdfr3Dys9UI+wWC8MSa6nz 2TuZ2OehjVa5+LGKvrARglZ0ZpA0aPJvLD3PuLEfiJl5A74PPf1qrWXzkibrPi54EiJP DWdsGu7lF4rc/gBbX34fhgjFOwdq407PM9d4p7uO5DR+R+3zwoiM/1/1wf8ZRDaKE/5E bYS3SpIyc1xMs/BSCwBdai7kee+2zDawykal/0je/5muyWe/jdT+yEvZnTbVNFeim010 g1xQ== X-Gm-Message-State: AHPjjUgr19ncaHABssJhwCfF09AMZ23pas2bpXaOw0wB373ib2nbuPt0 3SlKx06/c+Tjn1E8eijRviRa7w== X-Google-Smtp-Source: AOwi7QCPC6iVoMcuYi+0gidYGlnH2Dgz3TpNg+UMrGyCTR8OO/JIXRyIolPirQfrH7Zbl5Yq1WqREg== X-Received: by 10.28.167.10 with SMTP id q10mr1641691wme.107.1505842520376; Tue, 19 Sep 2017 10:35:20 -0700 (PDT) Received: from debian64.daheim (p200300D5FBC47FFCD63D7EFFFEBDE96E.dip0.t-ipconnect.de. [2003:d5:fbc4:7ffc:d63d:7eff:febd:e96e]) by smtp.gmail.com with ESMTPSA id w82sm3652801wme.5.2017.09.19.10.35.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 19 Sep 2017 10:35:19 -0700 (PDT) Received: from chuck by debian64.daheim with local (Exim 4.89) (envelope-from ) id 1duMQY-0000yK-Gc; Tue, 19 Sep 2017 19:35:18 +0200 From: Christian Lamparter To: netdev@vger.kernel.org Cc: "David S . Miller" Subject: [PATCH] net: emac: Fix napi poll list corruption Date: Tue, 19 Sep 2017 19:35:18 +0200 Message-Id: <20170919173518.3694-1-chunkeey@googlemail.com> X-Mailer: git-send-email 2.14.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch is pretty much a carbon copy of commit 3079c652141f ("caif: Fix napi poll list corruption") with "caif" replaced by "emac". The commit d75b1ade567f ("net: less interrupt masking in NAPI") breaks emac. It is now required that if the entire budget is consumed when poll returns, the napi poll_list must remain empty. However, like some other drivers emac tries to do a last-ditch check and if there is more work it will call napi_reschedule and then immediately process some of this new work. Should the entire budget be consumed while processing such new work then we will violate the new caller contract. This patch fixes this by not touching any work when we reschedule in emac. Signed-off-by: Christian Lamparter --- drivers/net/ethernet/ibm/emac/mal.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c index 2c74baa2398a..fff09dcf9e34 100644 --- a/drivers/net/ethernet/ibm/emac/mal.c +++ b/drivers/net/ethernet/ibm/emac/mal.c @@ -402,7 +402,7 @@ static int mal_poll(struct napi_struct *napi, int budget) unsigned long flags; MAL_DBG2(mal, "poll(%d)" NL, budget); - again: + /* Process TX skbs */ list_for_each(l, &mal->poll_list) { struct mal_commac *mc = @@ -451,7 +451,6 @@ static int mal_poll(struct napi_struct *napi, int budget) spin_lock_irqsave(&mal->lock, flags); mal_disable_eob_irq(mal); spin_unlock_irqrestore(&mal->lock, flags); - goto again; } mc->ops->poll_tx(mc->dev); }