* [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation
@ 2019-11-13 16:10 Kajol Jain
2019-11-26 4:54 ` Nageswara R Sastry
2019-11-26 11:39 ` maddy
0 siblings, 2 replies; 3+ messages in thread
From: Kajol Jain @ 2019-11-13 16:10 UTC (permalink / raw)
To: linuxppc-dev, mpe; +Cc: kjain, anju, maddy
Many of the performance moniroting unit (PMU) SPRs are
exposed in the sysfs. "perf" API is the primary interface to program
PMU and collect counter data in the system. So expose these
PMU SPRs in the absence of CONFIG_PERF_EVENTS.
Patch adds a new CONFIG option 'CONFIG_PMU_SYSFS'. The new config
option used in kernel/sysfs.c for PMU SPRs sysfs file creation and
this new option is enabled only if 'CONFIG_PERF_EVENTS' option is
disabled.
Tested this patch with enable/disable CONFIG_PERF_EVENTS option
in powernv and pseries machines.
Also did compilation testing for different architecture include:
x86, mips, mips64, alpha, arm. And with book3s_32.config option.
Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
---
arch/powerpc/kernel/sysfs.c | 21 +++++++++++++++++++++
arch/powerpc/platforms/Kconfig.cputype | 8 ++++++++
2 files changed, 29 insertions(+)
---
Changelog:
v1 -> v2
- Added new config option 'PMU_SYSFS' for PMU SPR's creation
rather than using PERF_EVENTS config option directly and make
sure SPR's file creation only if 'CONFIG_PERF_EVENTS' disabled.
---
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
index 80a676da11cb..b7c01f1ef236 100644
--- a/arch/powerpc/kernel/sysfs.c
+++ b/arch/powerpc/kernel/sysfs.c
@@ -457,16 +457,21 @@ static ssize_t __used \
#if defined(CONFIG_PPC64)
#define HAS_PPC_PMC_CLASSIC 1
+#ifdef CONFIG_PMU_SYSFS
#define HAS_PPC_PMC_IBM 1
+#endif
#define HAS_PPC_PMC_PA6T 1
#elif defined(CONFIG_PPC_BOOK3S_32)
#define HAS_PPC_PMC_CLASSIC 1
+#ifdef CONFIG_PMU_SYSFS
#define HAS_PPC_PMC_IBM 1
#define HAS_PPC_PMC_G4 1
#endif
+#endif
#ifdef HAS_PPC_PMC_CLASSIC
+#ifdef CONFIG_PMU_SYSFS
SYSFS_PMCSETUP(mmcr0, SPRN_MMCR0);
SYSFS_PMCSETUP(mmcr1, SPRN_MMCR1);
SYSFS_PMCSETUP(pmc1, SPRN_PMC1);
@@ -485,6 +490,10 @@ SYSFS_PMCSETUP(pmc7, SPRN_PMC7);
SYSFS_PMCSETUP(pmc8, SPRN_PMC8);
SYSFS_PMCSETUP(mmcra, SPRN_MMCRA);
+#endif /* CONFIG_PPC64 */
+#endif /* CONFIG_PMU_SYSFS */
+
+#ifdef CONFIG_PPC64
SYSFS_SPRSETUP(purr, SPRN_PURR);
SYSFS_SPRSETUP(spurr, SPRN_SPURR);
SYSFS_SPRSETUP(pir, SPRN_PIR);
@@ -495,7 +504,9 @@ SYSFS_SPRSETUP(tscr, SPRN_TSCR);
enable write when needed with a separate function.
Lets be conservative and default to pseries.
*/
+#ifdef CONFIG_PMU_SYSFS
static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
+#endif /* CONFIG_PMU_SYSFS */
static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
static DEVICE_ATTR(pir, 0400, show_pir, NULL);
@@ -606,12 +617,14 @@ static void sysfs_create_dscr_default(void)
#endif /* CONFIG_PPC64 */
#ifdef HAS_PPC_PMC_PA6T
+#ifdef CONFIG_PMU_SYSFS
SYSFS_PMCSETUP(pa6t_pmc0, SPRN_PA6T_PMC0);
SYSFS_PMCSETUP(pa6t_pmc1, SPRN_PA6T_PMC1);
SYSFS_PMCSETUP(pa6t_pmc2, SPRN_PA6T_PMC2);
SYSFS_PMCSETUP(pa6t_pmc3, SPRN_PA6T_PMC3);
SYSFS_PMCSETUP(pa6t_pmc4, SPRN_PA6T_PMC4);
SYSFS_PMCSETUP(pa6t_pmc5, SPRN_PA6T_PMC5);
+#endif /* CONFIG_PMU_SYSFS */
#ifdef CONFIG_DEBUG_MISC
SYSFS_SPRSETUP(hid0, SPRN_HID0);
SYSFS_SPRSETUP(hid1, SPRN_HID1);
@@ -644,6 +657,7 @@ SYSFS_SPRSETUP(tsr3, SPRN_PA6T_TSR3);
#endif /* CONFIG_DEBUG_MISC */
#endif /* HAS_PPC_PMC_PA6T */
+#ifdef CONFIG_PMU_SYSFS
#ifdef HAS_PPC_PMC_IBM
static struct device_attribute ibm_common_attrs[] = {
__ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
@@ -671,9 +685,11 @@ static struct device_attribute classic_pmc_attrs[] = {
__ATTR(pmc8, 0600, show_pmc8, store_pmc8),
#endif
};
+#endif /* CONFIG_PMU_SYSFS */
#ifdef HAS_PPC_PMC_PA6T
static struct device_attribute pa6t_attrs[] = {
+#ifdef CONFIG_PMU_SYSFS
__ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
__ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1),
__ATTR(pmc0, 0600, show_pa6t_pmc0, store_pa6t_pmc0),
@@ -682,6 +698,7 @@ static struct device_attribute pa6t_attrs[] = {
__ATTR(pmc3, 0600, show_pa6t_pmc3, store_pa6t_pmc3),
__ATTR(pmc4, 0600, show_pa6t_pmc4, store_pa6t_pmc4),
__ATTR(pmc5, 0600, show_pa6t_pmc5, store_pa6t_pmc5),
+#endif /* CONFIG_PMU_SYSFS */
#ifdef CONFIG_DEBUG_MISC
__ATTR(hid0, 0600, show_hid0, store_hid0),
__ATTR(hid1, 0600, show_hid1, store_hid1),
@@ -787,8 +804,10 @@ static int register_cpu_online(unsigned int cpu)
device_create_file(s, &pmc_attrs[i]);
#ifdef CONFIG_PPC64
+#ifdef CONFIG_PMU_SYSFS
if (cpu_has_feature(CPU_FTR_MMCRA))
device_create_file(s, &dev_attr_mmcra);
+#endif /* CONFIG_PMU_SYSFS */
if (cpu_has_feature(CPU_FTR_PURR)) {
if (!firmware_has_feature(FW_FEATURE_LPAR))
@@ -876,8 +895,10 @@ static int unregister_cpu_online(unsigned int cpu)
device_remove_file(s, &pmc_attrs[i]);
#ifdef CONFIG_PPC64
+#ifdef CONFIG_PMU_SYSFS
if (cpu_has_feature(CPU_FTR_MMCRA))
device_remove_file(s, &dev_attr_mmcra);
+#endif /* CONFIG_PMU_SYSFS */
if (cpu_has_feature(CPU_FTR_PURR))
device_remove_file(s, &dev_attr_purr);
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 12543e53fa96..f3ad579c559f 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -417,6 +417,14 @@ config PPC_MM_SLICES
config PPC_HAVE_PMU_SUPPORT
bool
+config PMU_SYSFS
+ bool
+ default y if !PERF_EVENTS
+ help
+ This option enables PMU SPR sysfs file creation. Since PMU SPRs are
+ intended to be used via "perf" interface, config option is enabled
+ only when CONFIG_PERF_EVENTS is disabled.
+
config PPC_PERF_CTRS
def_bool y
depends on PERF_EVENTS && PPC_HAVE_PMU_SUPPORT
--
2.12.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation
2019-11-13 16:10 [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation Kajol Jain
@ 2019-11-26 4:54 ` Nageswara R Sastry
2019-11-26 11:39 ` maddy
1 sibling, 0 replies; 3+ messages in thread
From: Nageswara R Sastry @ 2019-11-26 4:54 UTC (permalink / raw)
To: linuxppc-dev, mpe; +Cc: kjain, anju, maddy
[-- Attachment #1: Type: text/plain, Size: 7133 bytes --]
Kajol Jain <kjain@linux.ibm.com> wrote on 13/11/2019 09:40:56 PM:
> From: Kajol Jain <kjain@linux.ibm.com>
> To: linuxppc-dev@lists.ozlabs.org, mpe@ellerman.id.au
> Cc: kjain@linux.ibm.com, anju@linux.vnet.ibm.com,
maddy@linux.vnet.ibm.com
> Date: 26/11/2019 10:16 AM
> Subject: [EXTERNAL] [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS
> config option to enable PMU SPRs sysfs file creation
>
> Many of the performance moniroting unit (PMU) SPRs are
> exposed in the sysfs. "perf" API is the primary interface to program
> PMU and collect counter data in the system. So expose these
> PMU SPRs in the absence of CONFIG_PERF_EVENTS.
>
> Patch adds a new CONFIG option 'CONFIG_PMU_SYSFS'. The new config
> option used in kernel/sysfs.c for PMU SPRs sysfs file creation and
> this new option is enabled only if 'CONFIG_PERF_EVENTS' option is
> disabled.
>
> Tested this patch with enable/disable CONFIG_PERF_EVENTS option
> in powernv and pseries machines.
> Also did compilation testing for different architecture include:
> x86, mips, mips64, alpha, arm. And with book3s_32.config option.
>
> Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
> ---
> arch/powerpc/kernel/sysfs.c | 21 +++++++++++++++++++++
> arch/powerpc/platforms/Kconfig.cputype | 8 ++++++++
> 2 files changed, 29 insertions(+)
Tested-by: Nageswara R Sastry <nasastry@in.ibm.com>
Tested using the following different scenarios:
1. CONFIG_PERF_EVENT - enabled, CONFIG_PMU_SYSFS - disabled,
RESULT: not seen any sysfs files(mmrc*, pmc*)
from /sys/bus/cpu/devices/cpu?/
2. CONFIG_PERF_EVENT - disabled, CONFIG_PMU_SYSFS - enabled,
RESULT: seen any sysfs files(mmrc*, pmc*) from /sys/bus/cpu/devices/cpu?/
3. CONFIG_PERF_EVENT -disabled, CONFIG_PMU_SYSFS - disabled,
RESULT: not possible, any one of the config options need to be enabled.
4. CONFIG_PERF_EVENT -enabled, CONFIG_PMU_SYSFS - enabled,
RESULT: not possible, any one of the config options need to be enabled.
>
> ---
> Changelog:
> v1 -> v2
> - Added new config option 'PMU_SYSFS' for PMU SPR's creation
> rather than using PERF_EVENTS config option directly and make
> sure SPR's file creation only if 'CONFIG_PERF_EVENTS' disabled.
> ---
> diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
> index 80a676da11cb..b7c01f1ef236 100644
> --- a/arch/powerpc/kernel/sysfs.c
> +++ b/arch/powerpc/kernel/sysfs.c
> @@ -457,16 +457,21 @@ static ssize_t __used \
>
> #if defined(CONFIG_PPC64)
> #define HAS_PPC_PMC_CLASSIC 1
> +#ifdef CONFIG_PMU_SYSFS
> #define HAS_PPC_PMC_IBM 1
> +#endif
> #define HAS_PPC_PMC_PA6T 1
> #elif defined(CONFIG_PPC_BOOK3S_32)
> #define HAS_PPC_PMC_CLASSIC 1
> +#ifdef CONFIG_PMU_SYSFS
> #define HAS_PPC_PMC_IBM 1
> #define HAS_PPC_PMC_G4 1
> #endif
> +#endif
>
>
> #ifdef HAS_PPC_PMC_CLASSIC
> +#ifdef CONFIG_PMU_SYSFS
> SYSFS_PMCSETUP(mmcr0, SPRN_MMCR0);
> SYSFS_PMCSETUP(mmcr1, SPRN_MMCR1);
> SYSFS_PMCSETUP(pmc1, SPRN_PMC1);
> @@ -485,6 +490,10 @@ SYSFS_PMCSETUP(pmc7, SPRN_PMC7);
> SYSFS_PMCSETUP(pmc8, SPRN_PMC8);
>
> SYSFS_PMCSETUP(mmcra, SPRN_MMCRA);
> +#endif /* CONFIG_PPC64 */
> +#endif /* CONFIG_PMU_SYSFS */
> +
> +#ifdef CONFIG_PPC64
> SYSFS_SPRSETUP(purr, SPRN_PURR);
> SYSFS_SPRSETUP(spurr, SPRN_SPURR);
> SYSFS_SPRSETUP(pir, SPRN_PIR);
> @@ -495,7 +504,9 @@ SYSFS_SPRSETUP(tscr, SPRN_TSCR);
> enable write when needed with a separate function.
> Lets be conservative and default to pseries.
> */
> +#ifdef CONFIG_PMU_SYSFS
> static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
> static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
> static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
> static DEVICE_ATTR(pir, 0400, show_pir, NULL);
> @@ -606,12 +617,14 @@ static void sysfs_create_dscr_default(void)
> #endif /* CONFIG_PPC64 */
>
> #ifdef HAS_PPC_PMC_PA6T
> +#ifdef CONFIG_PMU_SYSFS
> SYSFS_PMCSETUP(pa6t_pmc0, SPRN_PA6T_PMC0);
> SYSFS_PMCSETUP(pa6t_pmc1, SPRN_PA6T_PMC1);
> SYSFS_PMCSETUP(pa6t_pmc2, SPRN_PA6T_PMC2);
> SYSFS_PMCSETUP(pa6t_pmc3, SPRN_PA6T_PMC3);
> SYSFS_PMCSETUP(pa6t_pmc4, SPRN_PA6T_PMC4);
> SYSFS_PMCSETUP(pa6t_pmc5, SPRN_PA6T_PMC5);
> +#endif /* CONFIG_PMU_SYSFS */
> #ifdef CONFIG_DEBUG_MISC
> SYSFS_SPRSETUP(hid0, SPRN_HID0);
> SYSFS_SPRSETUP(hid1, SPRN_HID1);
> @@ -644,6 +657,7 @@ SYSFS_SPRSETUP(tsr3, SPRN_PA6T_TSR3);
> #endif /* CONFIG_DEBUG_MISC */
> #endif /* HAS_PPC_PMC_PA6T */
>
> +#ifdef CONFIG_PMU_SYSFS
> #ifdef HAS_PPC_PMC_IBM
> static struct device_attribute ibm_common_attrs[] = {
> __ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
> @@ -671,9 +685,11 @@ static struct device_attribute classic_pmc_attrs[] =
{
> __ATTR(pmc8, 0600, show_pmc8, store_pmc8),
> #endif
> };
> +#endif /* CONFIG_PMU_SYSFS */
>
> #ifdef HAS_PPC_PMC_PA6T
> static struct device_attribute pa6t_attrs[] = {
> +#ifdef CONFIG_PMU_SYSFS
> __ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
> __ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1),
> __ATTR(pmc0, 0600, show_pa6t_pmc0, store_pa6t_pmc0),
> @@ -682,6 +698,7 @@ static struct device_attribute pa6t_attrs[] = {
> __ATTR(pmc3, 0600, show_pa6t_pmc3, store_pa6t_pmc3),
> __ATTR(pmc4, 0600, show_pa6t_pmc4, store_pa6t_pmc4),
> __ATTR(pmc5, 0600, show_pa6t_pmc5, store_pa6t_pmc5),
> +#endif /* CONFIG_PMU_SYSFS */
> #ifdef CONFIG_DEBUG_MISC
> __ATTR(hid0, 0600, show_hid0, store_hid0),
> __ATTR(hid1, 0600, show_hid1, store_hid1),
> @@ -787,8 +804,10 @@ static int register_cpu_online(unsigned int cpu)
> device_create_file(s, &pmc_attrs[i]);
>
> #ifdef CONFIG_PPC64
> +#ifdef CONFIG_PMU_SYSFS
> if (cpu_has_feature(CPU_FTR_MMCRA))
> device_create_file(s, &dev_attr_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
>
> if (cpu_has_feature(CPU_FTR_PURR)) {
> if (!firmware_has_feature(FW_FEATURE_LPAR))
> @@ -876,8 +895,10 @@ static int unregister_cpu_online(unsigned int cpu)
> device_remove_file(s, &pmc_attrs[i]);
>
> #ifdef CONFIG_PPC64
> +#ifdef CONFIG_PMU_SYSFS
> if (cpu_has_feature(CPU_FTR_MMCRA))
> device_remove_file(s, &dev_attr_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
>
> if (cpu_has_feature(CPU_FTR_PURR))
> device_remove_file(s, &dev_attr_purr);
> diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/
> platforms/Kconfig.cputype
> index 12543e53fa96..f3ad579c559f 100644
> --- a/arch/powerpc/platforms/Kconfig.cputype
> +++ b/arch/powerpc/platforms/Kconfig.cputype
> @@ -417,6 +417,14 @@ config PPC_MM_SLICES
> config PPC_HAVE_PMU_SUPPORT
> bool
>
> +config PMU_SYSFS
> + bool
> + default y if !PERF_EVENTS
> + help
> + This option enables PMU SPR sysfs file creation. Since PMU SPRs are
> + intended to be used via "perf" interface, config option is enabled
> + only when CONFIG_PERF_EVENTS is disabled.
> +
> config PPC_PERF_CTRS
> def_bool y
> depends on PERF_EVENTS && PPC_HAVE_PMU_SUPPORT
> --
> 2.12.3
>
[-- Attachment #2: Type: text/html, Size: 9443 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation
2019-11-13 16:10 [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation Kajol Jain
2019-11-26 4:54 ` Nageswara R Sastry
@ 2019-11-26 11:39 ` maddy
1 sibling, 0 replies; 3+ messages in thread
From: maddy @ 2019-11-26 11:39 UTC (permalink / raw)
To: Kajol Jain, linuxppc-dev, mpe; +Cc: anju
On 11/13/19 9:40 PM, Kajol Jain wrote:
> Many of the performance moniroting unit (PMU) SPRs are
> exposed in the sysfs. "perf" API is the primary interface to program
> PMU and collect counter data in the system. So expose these
> PMU SPRs in the absence of CONFIG_PERF_EVENTS.
>
> Patch adds a new CONFIG option 'CONFIG_PMU_SYSFS'. The new config
> option used in kernel/sysfs.c for PMU SPRs sysfs file creation and
> this new option is enabled only if 'CONFIG_PERF_EVENTS' option is
> disabled.
>
> Tested this patch with enable/disable CONFIG_PERF_EVENTS option
> in powernv and pseries machines.
> Also did compilation testing for different architecture include:
> x86, mips, mips64, alpha, arm. And with book3s_32.config option.
Reviewed-By: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
>
> Signed-off-by: Kajol Jain <kjain@linux.ibm.com>
> ---
> arch/powerpc/kernel/sysfs.c | 21 +++++++++++++++++++++
> arch/powerpc/platforms/Kconfig.cputype | 8 ++++++++
> 2 files changed, 29 insertions(+)
>
> ---
> Changelog:
> v1 -> v2
> - Added new config option 'PMU_SYSFS' for PMU SPR's creation
> rather than using PERF_EVENTS config option directly and make
> sure SPR's file creation only if 'CONFIG_PERF_EVENTS' disabled.
> ---
> diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c
> index 80a676da11cb..b7c01f1ef236 100644
> --- a/arch/powerpc/kernel/sysfs.c
> +++ b/arch/powerpc/kernel/sysfs.c
> @@ -457,16 +457,21 @@ static ssize_t __used \
>
> #if defined(CONFIG_PPC64)
> #define HAS_PPC_PMC_CLASSIC 1
> +#ifdef CONFIG_PMU_SYSFS
> #define HAS_PPC_PMC_IBM 1
> +#endif
> #define HAS_PPC_PMC_PA6T 1
> #elif defined(CONFIG_PPC_BOOK3S_32)
> #define HAS_PPC_PMC_CLASSIC 1
> +#ifdef CONFIG_PMU_SYSFS
> #define HAS_PPC_PMC_IBM 1
> #define HAS_PPC_PMC_G4 1
> #endif
> +#endif
>
>
> #ifdef HAS_PPC_PMC_CLASSIC
> +#ifdef CONFIG_PMU_SYSFS
> SYSFS_PMCSETUP(mmcr0, SPRN_MMCR0);
> SYSFS_PMCSETUP(mmcr1, SPRN_MMCR1);
> SYSFS_PMCSETUP(pmc1, SPRN_PMC1);
> @@ -485,6 +490,10 @@ SYSFS_PMCSETUP(pmc7, SPRN_PMC7);
> SYSFS_PMCSETUP(pmc8, SPRN_PMC8);
>
> SYSFS_PMCSETUP(mmcra, SPRN_MMCRA);
> +#endif /* CONFIG_PPC64 */
> +#endif /* CONFIG_PMU_SYSFS */
> +
> +#ifdef CONFIG_PPC64
> SYSFS_SPRSETUP(purr, SPRN_PURR);
> SYSFS_SPRSETUP(spurr, SPRN_SPURR);
> SYSFS_SPRSETUP(pir, SPRN_PIR);
> @@ -495,7 +504,9 @@ SYSFS_SPRSETUP(tscr, SPRN_TSCR);
> enable write when needed with a separate function.
> Lets be conservative and default to pseries.
> */
> +#ifdef CONFIG_PMU_SYSFS
> static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
> static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
> static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
> static DEVICE_ATTR(pir, 0400, show_pir, NULL);
> @@ -606,12 +617,14 @@ static void sysfs_create_dscr_default(void)
> #endif /* CONFIG_PPC64 */
>
> #ifdef HAS_PPC_PMC_PA6T
> +#ifdef CONFIG_PMU_SYSFS
> SYSFS_PMCSETUP(pa6t_pmc0, SPRN_PA6T_PMC0);
> SYSFS_PMCSETUP(pa6t_pmc1, SPRN_PA6T_PMC1);
> SYSFS_PMCSETUP(pa6t_pmc2, SPRN_PA6T_PMC2);
> SYSFS_PMCSETUP(pa6t_pmc3, SPRN_PA6T_PMC3);
> SYSFS_PMCSETUP(pa6t_pmc4, SPRN_PA6T_PMC4);
> SYSFS_PMCSETUP(pa6t_pmc5, SPRN_PA6T_PMC5);
> +#endif /* CONFIG_PMU_SYSFS */
> #ifdef CONFIG_DEBUG_MISC
> SYSFS_SPRSETUP(hid0, SPRN_HID0);
> SYSFS_SPRSETUP(hid1, SPRN_HID1);
> @@ -644,6 +657,7 @@ SYSFS_SPRSETUP(tsr3, SPRN_PA6T_TSR3);
> #endif /* CONFIG_DEBUG_MISC */
> #endif /* HAS_PPC_PMC_PA6T */
>
> +#ifdef CONFIG_PMU_SYSFS
> #ifdef HAS_PPC_PMC_IBM
> static struct device_attribute ibm_common_attrs[] = {
> __ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
> @@ -671,9 +685,11 @@ static struct device_attribute classic_pmc_attrs[] = {
> __ATTR(pmc8, 0600, show_pmc8, store_pmc8),
> #endif
> };
> +#endif /* CONFIG_PMU_SYSFS */
>
> #ifdef HAS_PPC_PMC_PA6T
> static struct device_attribute pa6t_attrs[] = {
> +#ifdef CONFIG_PMU_SYSFS
> __ATTR(mmcr0, 0600, show_mmcr0, store_mmcr0),
> __ATTR(mmcr1, 0600, show_mmcr1, store_mmcr1),
> __ATTR(pmc0, 0600, show_pa6t_pmc0, store_pa6t_pmc0),
> @@ -682,6 +698,7 @@ static struct device_attribute pa6t_attrs[] = {
> __ATTR(pmc3, 0600, show_pa6t_pmc3, store_pa6t_pmc3),
> __ATTR(pmc4, 0600, show_pa6t_pmc4, store_pa6t_pmc4),
> __ATTR(pmc5, 0600, show_pa6t_pmc5, store_pa6t_pmc5),
> +#endif /* CONFIG_PMU_SYSFS */
> #ifdef CONFIG_DEBUG_MISC
> __ATTR(hid0, 0600, show_hid0, store_hid0),
> __ATTR(hid1, 0600, show_hid1, store_hid1),
> @@ -787,8 +804,10 @@ static int register_cpu_online(unsigned int cpu)
> device_create_file(s, &pmc_attrs[i]);
>
> #ifdef CONFIG_PPC64
> +#ifdef CONFIG_PMU_SYSFS
> if (cpu_has_feature(CPU_FTR_MMCRA))
> device_create_file(s, &dev_attr_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
>
> if (cpu_has_feature(CPU_FTR_PURR)) {
> if (!firmware_has_feature(FW_FEATURE_LPAR))
> @@ -876,8 +895,10 @@ static int unregister_cpu_online(unsigned int cpu)
> device_remove_file(s, &pmc_attrs[i]);
>
> #ifdef CONFIG_PPC64
> +#ifdef CONFIG_PMU_SYSFS
> if (cpu_has_feature(CPU_FTR_MMCRA))
> device_remove_file(s, &dev_attr_mmcra);
> +#endif /* CONFIG_PMU_SYSFS */
>
> if (cpu_has_feature(CPU_FTR_PURR))
> device_remove_file(s, &dev_attr_purr);
> diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
> index 12543e53fa96..f3ad579c559f 100644
> --- a/arch/powerpc/platforms/Kconfig.cputype
> +++ b/arch/powerpc/platforms/Kconfig.cputype
> @@ -417,6 +417,14 @@ config PPC_MM_SLICES
> config PPC_HAVE_PMU_SUPPORT
> bool
>
> +config PMU_SYSFS
> + bool
> + default y if !PERF_EVENTS
> + help
> + This option enables PMU SPR sysfs file creation. Since PMU SPRs are
> + intended to be used via "perf" interface, config option is enabled
> + only when CONFIG_PERF_EVENTS is disabled.
> +
> config PPC_PERF_CTRS
> def_bool y
> depends on PERF_EVENTS && PPC_HAVE_PMU_SUPPORT
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-11-26 11:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-13 16:10 [PATCH v2] powerpc/kernel/sysfs: Add PMU_SYSFS config option to enable PMU SPRs sysfs file creation Kajol Jain
2019-11-26 4:54 ` Nageswara R Sastry
2019-11-26 11:39 ` maddy
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.