From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753545AbeAQPOs (ORCPT + 1 other); Wed, 17 Jan 2018 10:14:48 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:57009 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753502AbeAQPOi (ORCPT ); Wed, 17 Jan 2018 10:14:38 -0500 From: Matthew Wilcox To: Peter Zijlstra , Ingo Molnar Cc: "David S. Miller" , Matthew Wilcox , Thomas Gleixner , linux-kernel@vger.kernel.org Subject: [PATCH 0/3] lockdep: Allow checking a read-only lock Date: Wed, 17 Jan 2018 07:14:11 -0800 Message-Id: <20180117151414.23686-1-willy@infradead.org> X-Mailer: git-send-email 2.14.3 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: From: Matthew Wilcox I am not for one moment suggesting that the concept of a read-only lock makes sense. You can't sensibly put one in ROM or in read-only mappings. What does make sense is some APIs want to specify a const pointer to indicate that they do not modify the object being pointed to. One example we have of this today is in the networking stack; tcp_md5_do_lookup takes a const struct sock * argument and wants to ensure that the caller either took the socket lock or the rcu lock. At the moment, tcp_md5_do_lookup() is actually lying to its callers; lockdep_sock_is_held() casts away the constness of the pointer because lockdep actually does modify the lock when checking whether it's held (under rare and unnecessary conditions). Fix this situation by (patch 1) only assigning a lock key on registration, not on check, (patch 2) marking the pointers in the lockdep check path as const and (patch 3) converting a few of the callers to themselves be const, removing the nasty hack in lockdep_sock_is_held(). Matthew Wilcox (3): lockdep: Assign lock keys on registration lockdep: Make lockdep checking constant lockdep: Convert some users to const include/linux/backing-dev.h | 2 +- include/linux/lockdep.h | 4 +- include/linux/srcu.h | 4 +- include/net/sock.h | 4 +- kernel/locking/lockdep.c | 89 ++++++++++++++++++++++++--------------------- 5 files changed, 53 insertions(+), 50 deletions(-) -- 2.15.1