Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp266441imj; Fri, 15 Feb 2019 23:27:33 -0800 (PST) X-Google-Smtp-Source: AHgI3IYtAUtzJpd/AhAbhZ3raA4bGi7bbEus1Xk0yEJFZGIu2mXZAfZNQkTRfkR4NKraYgTYIbKV X-Received: by 2002:a65:4842:: with SMTP id i2mr9104082pgs.176.1550302053636; Fri, 15 Feb 2019 23:27:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550302053; cv=none; d=google.com; s=arc-20160816; b=ZXA75Rr3ZaBX2QMoioeIMilrOnR8REt1DKqPN+2Io4v3YgKEN0NYryS8T1gn6EbUW4 9BVOJcDlf1EG7Ne/2H3XQV8jRUoyA30mHLDnAAsNbvkbYRluK63o8UJxrLqFK30RkmJZ miZXXcFm1USTft0Mx4i7OiBvek51YQg/tTS6Ev7VXAIZRlzGT8HP1bGlJn+uh+EkfVBB 4bdzbLuJVuRwvUx+c00X/T+V4DjVKTum7n++gFSSeopM4D1l4gVtIswiGCwV9tn1brXo xC+CqcrKHtPyINzJxnpmHtYIjPuk/N1+TMScebodIl8J5WW9Ps9+d1O940GTaeuTWsZH 6epA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=8wSqlf7f8uUO2zFj2CfyHr3JIywK2zP7lHBu7kV5kBc=; b=0ZnBYjnYVWpIjveouswi1WAVB5f/OYDBgHQNkLxiXtb4JPKaNvMeIBJScfYMAM+6qV 5G12fiY5zliaT3cNCqOVUq/F5yzNBP/0TAlytR/WoEfuArqOlIs6xIh75M1ktdtynzZC 1YEnGsRV9EPfYVw5+a3IpXYa/4ICzdDNtsTvV8RgYe7PLl60P9GBs7WtL9b9D79EnZdK pZ2SgA9VN/V6XP0U+5ztK0EPz+66Cmi6qG8WGIrcj2F+2giGkySpAoINc0dwcj+FyItN kfU3owT3WZH29EjwamBWhn0bZqMUyK03APHwPmILZ/1geHiJocl7kq2wIbhxgjtqzCOW psUg== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q4si1902243pgv.338.2019.02.15.23.27.17; Fri, 15 Feb 2019 23:27:33 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391178AbfBOUuW (ORCPT + 99 others); Fri, 15 Feb 2019 15:50:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:36946 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388469AbfBOUuW (ORCPT ); Fri, 15 Feb 2019 15:50:22 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5C3B78E6E5; Fri, 15 Feb 2019 20:50:21 +0000 (UTC) Received: from llong.com (dhcp-17-59.bos.redhat.com [10.18.17.59]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3D8F65DD6B; Fri, 15 Feb 2019 20:50:17 +0000 (UTC) From: Waiman Long To: Peter Zijlstra , Ingo Molnar , Will Deacon , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, x86@kernel.org, Arnd Bergmann , Borislav Petkov , "H. Peter Anvin" , Davidlohr Bueso , Linus Torvalds , Andrew Morton , Tim Chen , Waiman Long Subject: [PATCH-tip v2 00/10] locking/rwsem: Rwsem rearchitecture part 1 Date: Fri, 15 Feb 2019 15:50:00 -0500 Message-Id: <1550263810-31947-1-git-send-email-longman@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 15 Feb 2019 20:50:21 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org v2: - Sync up to v4 of the part 0 patch. - Remove the rwsem.h->rwsem-xadd.h renaming patch & change patches to modify rwsem.h instead of rwsem-xadd.h. - Add a new patch to micro-optimize rwsem_try_read_lock_unqueued(). This is part 1 of a 3-part (0/1/2) series to rearchitect the internal operation of rwsem. This depends on the v4 part 0 patches sent out previously https://lore.kernel.org/lkml/1550095217-12047-1-git-send-email-longman@redhat.com This part lays the foundation for part 2 without making any functional changes. This part includes the following changes: 1) Move code around and micro-optimize rwsem_try_read_lock_unqueued() (patches 1-4). 2) Enhance the DEBUG_RWSEMS_WARN_ON() macro to provide more information and add additional checks (patches 5 & 6). 3) Make the core qspinlock_stat.h code generic (lock event counting) so that it can be used by all the architectures as well as other locking subsystems such as rwsem (patches 7-10). Lock event counting help us visualize how frequently a code path is being used as well as spotting abnormal behavior due to bugs in the code without noticeably affecting kernel performance and hence behavior. Both (2) and (3) are useful debugging aids. Waiman Long (10): locking/rwsem: Relocate rwsem_down_read_failed() locking/rwsem: Move owner setting code from rwsem.c to rwsem.h locking/rwsem: Move rwsem internal function declarations to rwsem-xadd.h locking/rwsem: Micro-optimize rwsem_try_read_lock_unqueued() locking/rwsem: Add debug check for __down_read*() locking/rwsem: Enhance DEBUG_RWSEMS_WARN_ON() macro locking/qspinlock_stat: Introduce a generic lockevent counting APIs locking/lock_events: Make lock_events available for all archs & other locks locking/lock_events: Don't show pvqspinlock events on bare metal locking/rwsem: Enable lock event counting arch/Kconfig | 9 ++ arch/x86/Kconfig | 8 -- include/linux/rwsem.h | 7 -- kernel/locking/Makefile | 1 + kernel/locking/lock_events.c | 179 ++++++++++++++++++++++++++ kernel/locking/lock_events.h | 59 +++++++++ kernel/locking/lock_events_list.h | 67 ++++++++++ kernel/locking/qspinlock.c | 8 +- kernel/locking/qspinlock_paravirt.h | 19 +-- kernel/locking/qspinlock_stat.h | 242 +++++++----------------------------- kernel/locking/rwsem-xadd.c | 204 +++++++++++++++--------------- kernel/locking/rwsem.c | 25 +--- kernel/locking/rwsem.h | 47 ++++++- 13 files changed, 523 insertions(+), 352 deletions(-) create mode 100644 kernel/locking/lock_events.c create mode 100644 kernel/locking/lock_events.h create mode 100644 kernel/locking/lock_events_list.h -- 1.8.3.1