From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A53E374191 for ; Sun, 15 Mar 2026 20:11:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773605518; cv=none; b=Yxxs7oCfT7TxDuAOCCJrxozZBOBQsnUmXyDA2R0cftL4YCd4IUG8KMDCFq1l31Tldri/V/zWjYkYzLRFJx+ua/1ZIJ/tM67+GZ7KCht4WA72YeedHRjajYnP4/QAMjSaWiY3LeiQG2LclqKkFqgGWOsDZ5rZd9kMKYp+3V4dnBE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773605518; c=relaxed/simple; bh=KgiLvqIg1lqUa4G7XySPODItt92Y3Pg3RVYMm+65a3Y=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type; b=n8nrJNKIfZOyYFWiS8wyHWWDKRA+gENNdCC1WSIctoZ+HPDbDmVi39beWtDoSBsSbKd/HlUCJ/8NaIXO203lk1jX0ZlzFjbIBLds642orpI3JJwOmTLFyH72WfTYALCoxYCBN7d0W4E789EykTAMFRnM9zkcBRBoyBMSzaFC+lU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WFqiM4uL; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WFqiM4uL" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-485345e1013so35058455e9.1 for ; Sun, 15 Mar 2026 13:11:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773605515; x=1774210315; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:subject:to:from :date:from:to:cc:subject:date:message-id:reply-to; bh=TCnQpp47QbhoPpRPIwACTTYpdk9OmiqiOQDc2IoOxcE=; b=WFqiM4uLH2Aq+/PRVRAXuInIukGzI7Bzttwr/BzwFBF21w4JYZQTuFyIwJXeQtkDgK oIBIcvtQBbDuLfSsmgH0AopX13wihSWB2JWxwAc6GTXHB0Q0W1+t2h25CGDeu0Rk8N4V BcJiufD5Qx+QVTUjPaQlf00nG/+8mMsj+UnaQIi5QEXVc39nzBYXq9HVIiypb5ldgL1P 5YPS3PhS63l6HorB6ReWtWvO/ghyeX3hubb15/3qO/XX+X/dcI5VdBsCRN6oLEZK7G5Z JBgAb86l1fHQtbXZMQZbQueStOO/GQZoGukVYXuV46cDPKSQdHyLxEzV0pSs6R7vYfDe hWDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773605515; x=1774210315; h=content-transfer-encoding:mime-version:message-id:subject:to:from :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TCnQpp47QbhoPpRPIwACTTYpdk9OmiqiOQDc2IoOxcE=; b=b8TwLAwsKuPhD+4SzOPX2z2wxnwldE8UWj3Fic02vY3zcGZs758Llc3JFt/Wvufnoo 2U25xB+fnh6WUG53bcOsCckliA3Sz24urV70IANQpOLVtlpkrGviMRwCKoHsM4MQxLhm wZD96tPT+wpLoa5y9kV0CIPQCotxDyOH/IgLC3yXSMAs5GtJPDr4K80qiXCgWioRNoOZ kUY6uvHvaIIzOTuK1SXQNlfRGFF5y2IZe9l+zF1ezgWHTzer1h7gHe04v1A7JQ+R6E7K KqPPdfe3oEsOlPmntpIdtiwGzgUzMEj/GLh5DzB/1zx9wc0haATaXpCjFFN/92ZcdOdF ZOQw== X-Forwarded-Encrypted: i=1; AJvYcCU9poE2quzwDKgm/NuS7rLEeclZlFG2+4zNSH5j9vDzEixX4K0Ezk9GudOobD/npmRDNQv+f4X0oGgtfOY=@vger.kernel.org X-Gm-Message-State: AOJu0YyGcI1xTfE3tXSJZlW3EU0zLggicPdiIA+LIEQs5E6f0fZmfCUg MAV5DLhbyMK7sFREk1CMZXowZpqncg9pjx8YGToRLxQx59+riw5BRy0/wW2j6qS2 X-Gm-Gg: ATEYQzy4xPXpeBJxQ3+UlOnJK37MjyDH2Iegy8jqAadi3t3H6H8FkHqqXhTe4rG0E5m j2P/Ll+LLf2ExoFhPddvK8bFD3zTZ4PrkOH4xqYKWXj+3oXPA/8UQMGDU/zVUsq6LwcQj6ynck9 Yv+B+iYMjmxuitPWDtJwud1imXaH5yVtKJQ4/BQPBNiZOcU7MjLoz4qGqROk0puYQf7zbtjOy25 U2HHlqLCqFoqhBa4CwbJvlGCmwZywNGwsIgPFfT+nimmH/4cKThcYs7PlKt3wfF4CQNdP5GLsKC uZTEeR1U/I4uirOd6YmYtssqCqop6ZuAeQtMS+tTwXC9VYDAJKKIhG0heZ28F+i8UN8WVEVGyN7 Pk5UB4ul1Bmht1agNYuSPOYPJNrqwW7h6RzuxgLzdpYCh2cnDF7aW9aLD9Hd6zZB8QVozLtrWXR bzDACN4kvAJg1J6SuaFsOK125l5ZrOCsM3VIozTDiwoPut/h9T0utGLWwmdSgfakzf5i4QcilUf pY= X-Received: by 2002:a05:600c:4594:b0:47e:e59c:67c5 with SMTP id 5b1f17b1804b1-48555acaddcmr159457935e9.8.1773605515428; Sun, 15 Mar 2026 13:11:55 -0700 (PDT) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48541b7f255sm477090505e9.12.2026.03.15.13.11.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Mar 2026 13:11:55 -0700 (PDT) Date: Sun, 15 Mar 2026 20:11:53 +0000 From: David Laight To: Boqun Feng , Catalin Marinas , Ingo Molnar , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Lorenzo Pieralisi , Marc Zyngier , Peter Zijlstra , Thomas Huth , Waiman Long , Will Deacon , Linus Torvalds Subject: osq_lock on arm64 Message-ID: <20260315201153.1d2ae1e3@pumpkin> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Commit f5bfdc8e3947 change the osq_lock (optimistic spin queue) code to use smp_cond_load_relaxed() to wait for another cpu to relase the lock. It waits for 'VAL || need_resched()' with a comment that the IPI that sets need_resched() will break any monitor/wait code. However arm64 implements it as (03e3c2b7edbe and 1cfc63b5ae6): #define smp_cond_load_acquire(ptr, cond_expr) \ ({ \ typeof(ptr) __PTR = (ptr); \ typeof(*ptr) VAL; \ for (;;) { \ VAL = smp_load_acquire(__PTR); \ if (cond_expr) \ break; \ __cmpwait_relaxed(__PTR, VAL); \ } \ VAL; \ }) #define __CMPWAIT_CASE(w, sz, name) \ static inline void __cmpwait_case_##name(volatile void *ptr, \ unsigned long val) \ { \ unsigned long tmp; \ \ asm volatile( \ " sevl\n" \ " wfe\n" \ " ldxr" #sz "\t%" #w "[tmp], %[v]\n" \ " eor %" #w "[tmp], %" #w "[tmp], %" #w "[val]\n" \ " cbnz %" #w "[tmp], 1f\n" \ " wfe\n" \ "1:" \ : [tmp] "=&r" (tmp), [v] "+Q" (*(unsigned long *)ptr) \ : [val] "r" (val)); \ } The "eor" and "cbnz" seem to be there to skip the "wfe" if the value has already changed, but this only works if the condition only depends on VAL. This means it can miss the IPI that makes need_resched() return non-zero. To work I think it would need the cmp_load_acquire() to be "ldxr" with a "wfe" instead of __cmpwait_relaxed(). But that wouldn't work if 'cond_expr' issued another "ldx". The documentation I found for the arm64 instruction set doesn't mention that losing the exclusive access requested by ldx will wake wfe, I assume that is an omission from the docs? David