Received: by 2002:a05:7412:b995:b0:f9:9502:5bb8 with SMTP id it21csp5717177rdb; Sun, 31 Dec 2023 13:56:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IF5ImaN/m69IhfoAMosz1JNTLw4Rzg8n0+vV+ozZedn8bXht6DBKRkjEELwLFddRJozNgb6 X-Received: by 2002:a05:6e02:178c:b0:35f:f5c8:7a94 with SMTP id y12-20020a056e02178c00b0035ff5c87a94mr10892284ilu.18.1704059787162; Sun, 31 Dec 2023 13:56:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1704059787; cv=none; d=google.com; s=arc-20160816; b=iO0aSpWm776aT1xs3DgN9E9YowCdszmufWGpm9cAWvLh/VHNbVgbfPB+0BYLWOAWGw /+AphSV69Qnzlc7sJQ84gS/Oow+Qtj6Mv61McWFMWa45mbyU8rgwqR3SVLI3Njcitb6J /tjlXcjNt4BFMauwIZYX08vrT7mnoWWb5gsWzx9NPRD9Gk8B108RhAFkuC5qjUyy8MSL wGe5XqSputVfZJPnurfcXLRQx/a6xR9SzAqJobaWEezTr3Mu/2v1kVHaI+JCDBijjnoL 5z4wFrBVz6pyZcbTtNVVPe63qWHF8NRKqE3KHufjgDFGvcHCHhV4wqJUWMY+nZCR3qBx bwFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:accept-language :in-reply-to:references:message-id:date:thread-index:thread-topic :subject:cc:to:from; bh=+I7zvCdP5XX8cOCKSBxSPvoBtbZyO36jlP2iozdlvRk=; fh=rK8F4zm15J6Jc7pqIJYnBw4d8zHrqB7RdoX7pamyocA=; b=ijf12eMaJ+onU7115kMXIDZ/eQX9btfEQnpNGs7SqrCqvZWaLfR20Y7neA06FsKVLw CIZsBjL86vqQ2Zd1Y7aJGMPMGU6xyD4n06bJoZZbUXzKKsSWZgFDf6v5/VhFMuY7n+bF G8m8hhaW97/mFJxsbz11G8jb/WZifREu8gRTU21OUaeGgO6vVpLqXXAJczTDvDaV0aBb k8PoCGcNZ31NjYPWHzJDxvUteOjGRttAYOhq8b/+poC1Kz9gSLZtR8zwgCxu1mC6KLyJ rVUe5lt4NYdDXlW9zkqv9ZwJbBz+V5RY3HlWpHXtK2vblLjrvSb51sdPkIcjeq5z1Kuh +W5g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-13794-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-13794-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=aculab.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id g4-20020a636b04000000b005cdb49a8117si17676967pgc.1.2023.12.31.13.56.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 31 Dec 2023 13:56:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-13794-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-13794-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-13794-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=aculab.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 86110B2124C for ; Sun, 31 Dec 2023 21:56:24 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 760AAFBF3; Sun, 31 Dec 2023 21:56:17 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from eu-smtp-delivery-151.mimecast.com (eu-smtp-delivery-151.mimecast.com [185.58.86.151]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84870FBE5 for ; Sun, 31 Dec 2023 21:56:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ACULAB.COM Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=aculab.com Received: from AcuMS.aculab.com (156.67.243.121 [156.67.243.121]) by relay.mimecast.com with ESMTP with both STARTTLS and AUTH (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id uk-mta-169-VmXxqLQzMMGaMcPZew1zOA-1; Sun, 31 Dec 2023 21:56:12 +0000 X-MC-Unique: VmXxqLQzMMGaMcPZew1zOA-1 Received: from AcuMS.Aculab.com (10.202.163.6) by AcuMS.aculab.com (10.202.163.6) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Sun, 31 Dec 2023 21:55:50 +0000 Received: from AcuMS.Aculab.com ([::1]) by AcuMS.aculab.com ([::1]) with mapi id 15.00.1497.048; Sun, 31 Dec 2023 21:55:50 +0000 From: David Laight To: "'linux-kernel@vger.kernel.org'" , "'peterz@infradead.org'" , "'longman@redhat.com'" CC: "'mingo@redhat.com'" , "'will@kernel.org'" , "'boqun.feng@gmail.com'" , "'Linus Torvalds'" , "'virtualization@lists.linux-foundation.org'" , 'Zeng Heng' Subject: [PATCH next v2 5/5] locking/osq_lock: Optimise decode_cpu() and per_cpu_ptr(). Thread-Topic: [PATCH next v2 5/5] locking/osq_lock: Optimise decode_cpu() and per_cpu_ptr(). Thread-Index: Ado8NCf0vtha6NqURtGgfE7//QxHew== Date: Sun, 31 Dec 2023 21:55:50 +0000 Message-ID: <7c1148fe64fb46a7a81c984776cd91df@AcuMS.aculab.com> References: <2b4e8a5816a742d2bd23fdbaa8498e80@AcuMS.aculab.com> In-Reply-To: <2b4e8a5816a742d2bd23fdbaa8498e80@AcuMS.aculab.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: aculab.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable per_cpu_ptr() indexes __per_cpu_offset[] with the cpu number. This requires the cpu number be 64bit. However the value is osq_lock() comes from a 32bit xchg() and there isn't a way of telling gcc the high bits are zero (they are) so there will always be an instruction to clear the high bits. The cpu number is also offset by one (to make the initialiser 0) It seems to be impossible to get gcc to convert __per_cpu_offset[cpu_p1 - 1= ] into (__per_cpu_offset - 1)[cpu_p1] (transferring the offset to the address= ). Converting the cpu number to 32bit unsigned prior to the decrement means that gcc knows the decrement has set the high bits to zero and doesn't add a register-register move (or cltq) to zero/sign extend the value. Not massive but saves two instructions. Signed-off-by: David Laight --- kernel/locking/osq_lock.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/kernel/locking/osq_lock.c b/kernel/locking/osq_lock.c index 35bb99e96697..37a4fa872989 100644 --- a/kernel/locking/osq_lock.c +++ b/kernel/locking/osq_lock.c @@ -29,11 +29,9 @@ static inline int encode_cpu(int cpu_nr) =09return cpu_nr + 1; } =20 -static inline struct optimistic_spin_node *decode_cpu(int encoded_cpu_val) +static inline struct optimistic_spin_node *decode_cpu(unsigned int encoded= _cpu_val) { -=09int cpu_nr =3D encoded_cpu_val - 1; - -=09return per_cpu_ptr(&osq_node, cpu_nr); +=09return per_cpu_ptr(&osq_node, encoded_cpu_val - 1); } =20 /* --=20 2.17.1 - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1= PT, UK Registration No: 1397386 (Wales)