Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1374288imm; Fri, 22 Jun 2018 15:46:14 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJDMj9TIL2kNEU7tUUU8j8kzFJpH4WCrqKHMJrf8eCB+cAipRNjrmvXER5niBotks3ZL/rw X-Received: by 2002:a63:7f4e:: with SMTP id p14-v6mr2928097pgn.27.1529707574633; Fri, 22 Jun 2018 15:46:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529707574; cv=none; d=google.com; s=arc-20160816; b=FuGSS61MfFiWVeb0a2rZOQxPKsqk+P9xyB86y8JEYO8sjXOplq5/TaKYD7xzrkzrFq 6MLkcWv0OisbdodfYE/PgnT0UciolM/rY0/V/ehjTAAoXoWKolcxSGWuUINbFAd5A1fa sTcbHsyE7YY3uPzdVEREletSKyQZUzBPXuVO1I1zJc3gV1CpNvuDFslfXyshKwOLxj8I ccqWmQj0wWaOCDsYYQsLfZljbBxTprQtiGe2BUftP8IJHjiX+FxBdNVnjactI+TcZk9q PVtSAysJBRfYX3UMZfqUIf2IygQKgymO3cjz4wwpsw6cEM6YwTqvUkcrFy4WS6Acs7cT WJgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=ymO+hm36EBInHCQXuUTgHV5gmTX/m4b5hJr3HZEGxxU=; b=UNtPEiaLx2gj6jTMV9S2U5b1lW7gZ2BMBMUAy1/T2WjzbbwqoD7zfsFLGyYxbqrbxm MvuXchwUFzlfyK92DAeFlxTqXqNxM/zsLe+OAtAdNZUyZkBDx9vRdmPc7lKFmbVNnl+z 4TSV7nVLucUVqd8I3uKbUugDNgU/pJyp7AWtLYXAOYaxR83hVhhGAddgap87eg/Z+8/K EQm8TXmTBj4Z+KvuG4GwmplJEqjGulawkqojulJD0azW0NenG3HKEpfmC2/IAc7+kGnA Ikii3zKP1NRY8cjoA+uNVjW/N+9v9ilbWXTXszgcqOaRheUj11hIJm14uKSp7wwO8nN7 9QKA== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 7-v6si8411469plc.179.2018.06.22.15.46.00; Fri, 22 Jun 2018 15:46:14 -0700 (PDT) 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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754801AbeFVWol (ORCPT + 99 others); Fri, 22 Jun 2018 18:44:41 -0400 Received: from mga02.intel.com ([134.134.136.20]:22310 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933974AbeFVWmz (ORCPT ); Fri, 22 Jun 2018 18:42:55 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Jun 2018 15:42:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,259,1526367600"; d="scan'208";a="234843451" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by orsmga005.jf.intel.com with ESMTP; 22 Jun 2018 15:42:48 -0700 From: Reinette Chatre To: tglx@linutronix.de, fenghua.yu@intel.com, tony.luck@intel.com, vikas.shivappa@linux.intel.com Cc: gavin.hindman@intel.com, jithu.joseph@intel.com, dave.hansen@intel.com, mingo@redhat.com, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, Reinette Chatre Subject: [PATCH V7 34/41] x86/intel_rdt: Create resctrl debug area Date: Fri, 22 Jun 2018 15:42:25 -0700 Message-Id: <9f553faf30866a6317f1aaaa2fe9f92de66a10d2.1529706536.git.reinette.chatre@intel.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation for support of debugging of RDT sub features the user can now enable a RDT debugfs region. The debug area is always enabled when CONFIG_DEBUG_FS is set as advised in http://lkml.kernel.org/r/20180523080501.GA6822@kroah.com Also from same discussion in above linked email, no error checking on the debugfs creation return value since code should not behave differently when debugging passes or fails. Even on failure the returned value can be passed safely to other debugfs calls. Signed-off-by: Reinette Chatre Signed-off-by: Thomas Gleixner Cc: fenghua.yu@intel.com Cc: tony.luck@intel.com Cc: vikas.shivappa@linux.intel.com Cc: gavin.hindman@intel.com Cc: jithu.joseph@intel.com Cc: dave.hansen@intel.com Cc: hpa@zytor.com Link: https://lkml.kernel.org/r/1200798a50791186cd959d75aa3145409ca5151a.1527593971.git.reinette.chatre@intel.com --- arch/x86/kernel/cpu/intel_rdt.h | 2 ++ arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 27 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/arch/x86/kernel/cpu/intel_rdt.h b/arch/x86/kernel/cpu/intel_rdt.h index c948266d59c8..bd3050c1ab6c 100644 --- a/arch/x86/kernel/cpu/intel_rdt.h +++ b/arch/x86/kernel/cpu/intel_rdt.h @@ -432,6 +432,8 @@ extern struct rdt_resource rdt_resources_all[]; extern struct rdtgroup rdtgroup_default; DECLARE_STATIC_KEY_FALSE(rdt_alloc_enable_key); +extern struct dentry *debugfs_resctrl; + enum { RDT_RESOURCE_L3, RDT_RESOURCE_L3DATA, diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index 75fe5f2719be..ab8d394eb24d 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -56,6 +57,8 @@ static struct kernfs_node *kn_mondata; static struct seq_buf last_cmd_status; static char last_cmd_status_buf[512]; +struct dentry *debugfs_resctrl; + void rdt_last_cmd_clear(void) { lockdep_assert_held(&rdtgroup_mutex); @@ -2828,6 +2831,29 @@ int __init rdtgroup_init(void) if (ret) goto cleanup_mountpoint; + /* + * Adding the resctrl debugfs directory here may not be ideal since + * it would let the resctrl debugfs directory appear on the debugfs + * filesystem before the resctrl filesystem is mounted. + * It may also be ok since that would enable debugging of RDT before + * resctrl is mounted. + * The reason why the debugfs directory is created here and not in + * rdt_mount() is because rdt_mount() takes rdtgroup_mutex and + * during the debugfs directory creation also &sb->s_type->i_mutex_key + * (the lockdep class of inode->i_rwsem). Other filesystem + * interactions (eg. SyS_getdents) have the lock ordering: + * &sb->s_type->i_mutex_key --> &mm->mmap_sem + * During mmap(), called with &mm->mmap_sem, the rdtgroup_mutex + * is taken, thus creating dependency: + * &mm->mmap_sem --> rdtgroup_mutex for the latter that can cause + * issues considering the other two lock dependencies. + * By creating the debugfs directory here we avoid a dependency + * that may cause deadlock (even though file operations cannot + * occur until the filesystem is mounted, but I do not know how to + * tell lockdep that). + */ + debugfs_resctrl = debugfs_create_dir("resctrl", NULL); + return 0; cleanup_mountpoint: @@ -2840,6 +2866,7 @@ int __init rdtgroup_init(void) void __exit rdtgroup_exit(void) { + debugfs_remove_recursive(debugfs_resctrl); unregister_filesystem(&rdt_fs_type); sysfs_remove_mount_point(fs_kobj, "resctrl"); kernfs_destroy_root(rdt_root); -- 2.17.0