Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2100582ybl; Thu, 30 Jan 2020 11:21:47 -0800 (PST) X-Google-Smtp-Source: APXvYqwJuTTK9dBDJ5S72FQyPujKatLBO6OYM1Yx6aGZZHAY8j7M6PLhb9PUOVO1sI6WFxdJJayZ X-Received: by 2002:a9d:6f07:: with SMTP id n7mr4628172otq.112.1580412107659; Thu, 30 Jan 2020 11:21:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580412107; cv=none; d=google.com; s=arc-20160816; b=vmGYeDL1sGrsuiPM/rT75ujZP34Is5Ozp7gbVaBxWLkXX0SbMAwS0k0Ssw3wFNE0l5 6VW7Kyj181cXFZG4MHMKkZLDCUGJRol6H0nGK4p7OiuFNFy+lfonDkd9V1Bfo665vACI 2/Zk2AvZn4hEhqRumw2FXBlEE4RwdFY8IeTgYMqKAfnCqIxaJzgyn9ysRtkOi/JgeLEg w3QUECyTvlq67kAIQtriutKJTmwQGL2CXfV90XAeFGwKkUlEJR+QIEKwhGSasjnTzzeH Vvio+5/fxBu/f/0OebEk7nRb8TyLAeVapKt9HyhaMOIlFzXk0Bvkf+4FICD7YtsPcEoQ t+Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=+0SeUEfDQ+bTTPnGASBW3uEDb3aAZiFOQ5Mxy2n0dis=; b=JCyr2pUDTsUFmyteQUfTweAirBhWfuPKmEkqgN3hCyttCvSCbhpm4bBfwoPI/sn7Ic x9yX8e6/Ugt77N80vtQHSr9ZWEaVMVmBlK7KbzQaIUzmN59fZtSMFI9na1W56Nkqn9II 7YJkNBfkNBlh1fl3kOjHJaR+fn4ZX8psd57Pl018MBE7Sk67ITMIlG3+AlYdgyfGP+uU jcv6yCA/TTaqhIY1ww3P+qOmt6wW+HqyRMXz6xgMNeZbzo5ciHHWLQ7ImENKXqhG4OjU Z9/35p7ZjxUJUAVS5wMMuGcsNBanOnNp4ypoZMz4pTtcSqpf7+aN9Htkgy90k6M74Ufu xi+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=LopmQZ9S; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s128si3060862oig.204.2020.01.30.11.21.36; Thu, 30 Jan 2020 11:21:47 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=LopmQZ9S; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731460AbgA3Sr5 (ORCPT + 99 others); Thu, 30 Jan 2020 13:47:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:58720 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731451AbgA3Srz (ORCPT ); Thu, 30 Jan 2020 13:47:55 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 71A86217BA; Thu, 30 Jan 2020 18:47:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1580410074; bh=KGVdJI4QeammafVVxIwwiX4/OvI88n2ymAv/vzMJ+04=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LopmQZ9SnYjPcWN/QgYavm6eTeTvfzRT+zddfejDfpGN25AKzWsP+U30OSXvWfM9s Q0DNXl8vUM5g2aFz6euSry8rWtVWIRE/E7ydj+OeUOdoD+Zboc6ElNVXBRS7GntQzr ZUPkxFYmNQ7fj/ODJYOu1ZoO2gQQhVAfDSrtXZKA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Peter Zijlstra , Fenghua Yu , Tony Luck , "David S. Miller" , Sasha Levin Subject: [PATCH 4.19 36/55] drivers/net/b44: Change to non-atomic bit operations on pwol_mask Date: Thu, 30 Jan 2020 19:39:17 +0100 Message-Id: <20200130183615.120752961@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200130183608.563083888@linuxfoundation.org> References: <20200130183608.563083888@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Fenghua Yu [ Upstream commit f11421ba4af706cb4f5703de34fa77fba8472776 ] Atomic operations that span cache lines are super-expensive on x86 (not just to the current processor, but also to other processes as all memory operations are blocked until the operation completes). Upcoming x86 processors have a switch to cause such operations to generate a #AC trap. It is expected that some real time systems will enable this mode in BIOS. In preparation for this, it is necessary to fix code that may execute atomic instructions with operands that cross cachelines because the #AC trap will crash the kernel. Since "pwol_mask" is local and never exposed to concurrency, there is no need to set bits in pwol_mask using atomic operations. Directly operate on the byte which contains the bit instead of using __set_bit() to avoid any big endian concern due to type cast to unsigned long in __set_bit(). Suggested-by: Peter Zijlstra Signed-off-by: Fenghua Yu Signed-off-by: Tony Luck Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/broadcom/b44.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c index e445ab724827f..88f8d31e4c833 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -1519,8 +1519,10 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset) int ethaddr_bytes = ETH_ALEN; memset(ppattern + offset, 0xff, magicsync); - for (j = 0; j < magicsync; j++) - set_bit(len++, (unsigned long *) pmask); + for (j = 0; j < magicsync; j++) { + pmask[len >> 3] |= BIT(len & 7); + len++; + } for (j = 0; j < B44_MAX_PATTERNS; j++) { if ((B44_PATTERN_SIZE - len) >= ETH_ALEN) @@ -1532,7 +1534,8 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset) for (k = 0; k< ethaddr_bytes; k++) { ppattern[offset + magicsync + (j * ETH_ALEN) + k] = macaddr[k]; - set_bit(len++, (unsigned long *) pmask); + pmask[len >> 3] |= BIT(len & 7); + len++; } } return len - 1; -- 2.20.1