* [PATCH 0/3] perf: make Arm CCI driver modular @ 2018-05-11 14:29 ` Robin Murphy 0 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: linux-arm-kernel Now that it has been surgically removed from the MCPM port-control code, we can let the CCI PMU driver be modular. Probing the PMU in the first place still depends on the bus driver stub being built-in, but it's a small price to pay compared to the major upheaval of completely reworking the DT-handling code across the two drivers. Robin. Robin Murphy (3): perf/arm-cc*: Fix MODULE_LICENSE() tags perf/arm-cci: Remove pointless PMU disabling perf/arm-cci: Allow building as a module drivers/perf/Kconfig | 31 +++++++++++++++++-------------- drivers/perf/arm-cci.c | 32 ++++++++++++++++++++------------ drivers/perf/arm-ccn.c | 2 +- 3 files changed, 38 insertions(+), 27 deletions(-) -- 2.17.0.dirty ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 0/3] perf: make Arm CCI driver modular @ 2018-05-11 14:29 ` Robin Murphy 0 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: will.deacon, mark.rutland Cc: linux-arm-kernel, linux-kernel, pawel.moll, suzuki.poulose Now that it has been surgically removed from the MCPM port-control code, we can let the CCI PMU driver be modular. Probing the PMU in the first place still depends on the bus driver stub being built-in, but it's a small price to pay compared to the major upheaval of completely reworking the DT-handling code across the two drivers. Robin. Robin Murphy (3): perf/arm-cc*: Fix MODULE_LICENSE() tags perf/arm-cci: Remove pointless PMU disabling perf/arm-cci: Allow building as a module drivers/perf/Kconfig | 31 +++++++++++++++++-------------- drivers/perf/arm-cci.c | 32 ++++++++++++++++++++------------ drivers/perf/arm-ccn.c | 2 +- 3 files changed, 38 insertions(+), 27 deletions(-) -- 2.17.0.dirty ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/3] perf/arm-cc*: Fix MODULE_LICENSE() tags 2018-05-11 14:29 ` Robin Murphy @ 2018-05-11 14:29 ` Robin Murphy -1 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: linux-arm-kernel The CCI/CCN drivers are licensed under GPLv2, but the MODULE_LICENSE() tags are using the bare "GPL" string implying GPLv2 or later. Fix them to match their actual file license. Acked-by: Pawel Moll <pawel.moll@arm.com> Acked-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/perf/arm-cci.c | 2 +- drivers/perf/arm-ccn.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 383b2d3dcbc6..53c774b20563 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1718,5 +1718,5 @@ static struct platform_driver cci_pmu_driver = { }; builtin_platform_driver(cci_pmu_driver); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("ARM CCI PMU support"); diff --git a/drivers/perf/arm-ccn.c b/drivers/perf/arm-ccn.c index 65b7e4042ece..917b47e776df 100644 --- a/drivers/perf/arm-ccn.c +++ b/drivers/perf/arm-ccn.c @@ -1594,4 +1594,4 @@ module_init(arm_ccn_init); module_exit(arm_ccn_exit); MODULE_AUTHOR("Pawel Moll <pawel.moll@arm.com>"); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 1/3] perf/arm-cc*: Fix MODULE_LICENSE() tags @ 2018-05-11 14:29 ` Robin Murphy 0 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: will.deacon, mark.rutland Cc: linux-arm-kernel, linux-kernel, pawel.moll, suzuki.poulose The CCI/CCN drivers are licensed under GPLv2, but the MODULE_LICENSE() tags are using the bare "GPL" string implying GPLv2 or later. Fix them to match their actual file license. Acked-by: Pawel Moll <pawel.moll@arm.com> Acked-by: Suzuki K Poulose <suzuki.poulose@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/perf/arm-cci.c | 2 +- drivers/perf/arm-ccn.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 383b2d3dcbc6..53c774b20563 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1718,5 +1718,5 @@ static struct platform_driver cci_pmu_driver = { }; builtin_platform_driver(cci_pmu_driver); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("ARM CCI PMU support"); diff --git a/drivers/perf/arm-ccn.c b/drivers/perf/arm-ccn.c index 65b7e4042ece..917b47e776df 100644 --- a/drivers/perf/arm-ccn.c +++ b/drivers/perf/arm-ccn.c @@ -1594,4 +1594,4 @@ module_init(arm_ccn_init); module_exit(arm_ccn_exit); MODULE_AUTHOR("Pawel Moll <pawel.moll@arm.com>"); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/3] perf/arm-cci: Remove pointless PMU disabling 2018-05-11 14:29 ` Robin Murphy @ 2018-05-11 14:29 ` Robin Murphy -1 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: linux-arm-kernel The CCI PMU driver bears some legacy remnants of the arm_pmu framework from when it was split in c6f85cb4305b ("bus: cci: move away from arm_pmu framework"). In particular this perf_pmu_{dis,en}able() dance around pmu->add which was fixed for arm_pmu in a9e469d1c89b ("drivers/perf: arm_pmu: remove pointless PMU disabling"). For the exact same reasons (i.e. perf core already does this around the call anyway), give cci_pmu_add() the exact same change, which also prevents having to export those core functions to build it as a module. Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/perf/arm-cci.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 53c774b20563..7029d8fe8f44 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1184,16 +1184,11 @@ static int cci_pmu_add(struct perf_event *event, int flags) struct cci_pmu_hw_events *hw_events = &cci_pmu->hw_events; struct hw_perf_event *hwc = &event->hw; int idx; - int err = 0; - - perf_pmu_disable(event->pmu); /* If we don't have a space for the counter then finish early. */ idx = pmu_get_event_idx(hw_events, event); - if (idx < 0) { - err = idx; - goto out; - } + if (idx < 0) + return idx; event->hw.idx = idx; hw_events->events[idx] = event; @@ -1205,9 +1200,7 @@ static int cci_pmu_add(struct perf_event *event, int flags) /* Propagate our changes to the userspace mapping. */ perf_event_update_userpage(event); -out: - perf_pmu_enable(event->pmu); - return err; + return 0; } static void cci_pmu_del(struct perf_event *event, int flags) -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/3] perf/arm-cci: Remove pointless PMU disabling @ 2018-05-11 14:29 ` Robin Murphy 0 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: will.deacon, mark.rutland Cc: linux-arm-kernel, linux-kernel, pawel.moll, suzuki.poulose The CCI PMU driver bears some legacy remnants of the arm_pmu framework from when it was split in c6f85cb4305b ("bus: cci: move away from arm_pmu framework"). In particular this perf_pmu_{dis,en}able() dance around pmu->add which was fixed for arm_pmu in a9e469d1c89b ("drivers/perf: arm_pmu: remove pointless PMU disabling"). For the exact same reasons (i.e. perf core already does this around the call anyway), give cci_pmu_add() the exact same change, which also prevents having to export those core functions to build it as a module. Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/perf/arm-cci.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 53c774b20563..7029d8fe8f44 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1184,16 +1184,11 @@ static int cci_pmu_add(struct perf_event *event, int flags) struct cci_pmu_hw_events *hw_events = &cci_pmu->hw_events; struct hw_perf_event *hwc = &event->hw; int idx; - int err = 0; - - perf_pmu_disable(event->pmu); /* If we don't have a space for the counter then finish early. */ idx = pmu_get_event_idx(hw_events, event); - if (idx < 0) { - err = idx; - goto out; - } + if (idx < 0) + return idx; event->hw.idx = idx; hw_events->events[idx] = event; @@ -1205,9 +1200,7 @@ static int cci_pmu_add(struct perf_event *event, int flags) /* Propagate our changes to the userspace mapping. */ perf_event_update_userpage(event); -out: - perf_pmu_enable(event->pmu); - return err; + return 0; } static void cci_pmu_del(struct perf_event *event, int flags) -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 2/3] perf/arm-cci: Remove pointless PMU disabling 2018-05-11 14:29 ` Robin Murphy @ 2018-05-11 14:38 ` Mark Rutland -1 siblings, 0 replies; 10+ messages in thread From: Mark Rutland @ 2018-05-11 14:38 UTC (permalink / raw) To: linux-arm-kernel On Fri, May 11, 2018 at 03:29:13PM +0100, Robin Murphy wrote: > The CCI PMU driver bears some legacy remnants of the arm_pmu framework > from when it was split in c6f85cb4305b ("bus: cci: move away from > arm_pmu framework"). In particular this perf_pmu_{dis,en}able() dance > around pmu->add which was fixed for arm_pmu in a9e469d1c89b > ("drivers/perf: arm_pmu: remove pointless PMU disabling"). > > For the exact same reasons (i.e. perf core already does this around the > call anyway), give cci_pmu_add() the exact same change, which also > prevents having to export those core functions to build it as a module. > > Signed-off-by: Robin Murphy <robin.murphy@arm.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Mark. > --- > drivers/perf/arm-cci.c | 13 +++---------- > 1 file changed, 3 insertions(+), 10 deletions(-) > > diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c > index 53c774b20563..7029d8fe8f44 100644 > --- a/drivers/perf/arm-cci.c > +++ b/drivers/perf/arm-cci.c > @@ -1184,16 +1184,11 @@ static int cci_pmu_add(struct perf_event *event, int flags) > struct cci_pmu_hw_events *hw_events = &cci_pmu->hw_events; > struct hw_perf_event *hwc = &event->hw; > int idx; > - int err = 0; > - > - perf_pmu_disable(event->pmu); > > /* If we don't have a space for the counter then finish early. */ > idx = pmu_get_event_idx(hw_events, event); > - if (idx < 0) { > - err = idx; > - goto out; > - } > + if (idx < 0) > + return idx; > > event->hw.idx = idx; > hw_events->events[idx] = event; > @@ -1205,9 +1200,7 @@ static int cci_pmu_add(struct perf_event *event, int flags) > /* Propagate our changes to the userspace mapping. */ > perf_event_update_userpage(event); > > -out: > - perf_pmu_enable(event->pmu); > - return err; > + return 0; > } > > static void cci_pmu_del(struct perf_event *event, int flags) > -- > 2.17.0.dirty > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/3] perf/arm-cci: Remove pointless PMU disabling @ 2018-05-11 14:38 ` Mark Rutland 0 siblings, 0 replies; 10+ messages in thread From: Mark Rutland @ 2018-05-11 14:38 UTC (permalink / raw) To: Robin Murphy Cc: will.deacon, linux-arm-kernel, linux-kernel, pawel.moll, suzuki.poulose On Fri, May 11, 2018 at 03:29:13PM +0100, Robin Murphy wrote: > The CCI PMU driver bears some legacy remnants of the arm_pmu framework > from when it was split in c6f85cb4305b ("bus: cci: move away from > arm_pmu framework"). In particular this perf_pmu_{dis,en}able() dance > around pmu->add which was fixed for arm_pmu in a9e469d1c89b > ("drivers/perf: arm_pmu: remove pointless PMU disabling"). > > For the exact same reasons (i.e. perf core already does this around the > call anyway), give cci_pmu_add() the exact same change, which also > prevents having to export those core functions to build it as a module. > > Signed-off-by: Robin Murphy <robin.murphy@arm.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Mark. > --- > drivers/perf/arm-cci.c | 13 +++---------- > 1 file changed, 3 insertions(+), 10 deletions(-) > > diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c > index 53c774b20563..7029d8fe8f44 100644 > --- a/drivers/perf/arm-cci.c > +++ b/drivers/perf/arm-cci.c > @@ -1184,16 +1184,11 @@ static int cci_pmu_add(struct perf_event *event, int flags) > struct cci_pmu_hw_events *hw_events = &cci_pmu->hw_events; > struct hw_perf_event *hwc = &event->hw; > int idx; > - int err = 0; > - > - perf_pmu_disable(event->pmu); > > /* If we don't have a space for the counter then finish early. */ > idx = pmu_get_event_idx(hw_events, event); > - if (idx < 0) { > - err = idx; > - goto out; > - } > + if (idx < 0) > + return idx; > > event->hw.idx = idx; > hw_events->events[idx] = event; > @@ -1205,9 +1200,7 @@ static int cci_pmu_add(struct perf_event *event, int flags) > /* Propagate our changes to the userspace mapping. */ > perf_event_update_userpage(event); > > -out: > - perf_pmu_enable(event->pmu); > - return err; > + return 0; > } > > static void cci_pmu_del(struct perf_event *event, int flags) > -- > 2.17.0.dirty > ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/3] perf/arm-cci: Allow building as a module 2018-05-11 14:29 ` Robin Murphy @ 2018-05-11 14:29 ` Robin Murphy -1 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: linux-arm-kernel Fill in the few extra bits and annotations needed to make the driver work properly as a module, and jiggle the Kconfig to expose the driver-level ARM_CCI_PMU option. Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- Preserving the current level of configurability does end up allowing a rather pointless module configuration which supports no hardware variants, but I couldn't find a way to enforce "at least one sub-option selected" logic without Kbuild claiming a recursive dependency. drivers/perf/Kconfig | 31 +++++++++++++++++-------------- drivers/perf/arm-cci.c | 17 ++++++++++++++++- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig index 28bb5a029558..269331bfb746 100644 --- a/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig @@ -6,30 +6,33 @@ menu "Performance monitor support" depends on PERF_EVENTS config ARM_CCI_PMU - bool + tristate "ARM CCI PMU driver" select ARM_CCI + help + Support for PMU events monitoring on the ARM CCI (Cache Coherent + Interconnect) family of products. + + If compiled as a module, it will be called arm-cci. config ARM_CCI400_PMU - bool "ARM CCI400 PMU support" + bool "support CCI-400" + default y depends on (ARM && CPU_V7) || ARM64 + depends on ARM_CCI_PMU select ARM_CCI400_COMMON - select ARM_CCI_PMU help - Support for PMU events monitoring on the ARM CCI-400 (cache coherent - interconnect). CCI-400 supports counting events related to the - connected slave/master interfaces. + CCI-400 provides 4 independent event counters counting events related + to the connected slave/master interfaces, plus a cycle counter. config ARM_CCI5xx_PMU - bool "ARM CCI-500/CCI-550 PMU support" + bool "support CCI-500/CCI-550" + default y depends on (ARM && CPU_V7) || ARM64 - select ARM_CCI_PMU + depends on ARM_CCI_PMU help - Support for PMU events monitoring on the ARM CCI-500/CCI-550 cache - coherent interconnects. Both of them provide 8 independent event counters, - which can count events pertaining to the slave/master interfaces as well - as the internal events to the CCI. - - If unsure, say Y + CCI-500/CCI-550 both provide 8 independent event counters, which can + count events pertaining to the slave/master interfaces as well as the + internal events to the CCI. config ARM_CCN tristate "ARM CCN driver support" diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 7029d8fe8f44..09938dd8eb6f 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1416,6 +1416,7 @@ static int cci_pmu_init(struct cci_pmu *cci_pmu, struct platform_device *pdev) pmu_format_attr_group.attrs = model->format_attrs; cci_pmu->pmu = (struct pmu) { + .module = THIS_MODULE, .name = cci_pmu->model->name, .task_ctx_nr = perf_invalid_context, .pmu_enable = cci_pmu_enable, @@ -1581,6 +1582,7 @@ static const struct of_device_id arm_cci_pmu_matches[] = { #endif {}, }; +MODULE_DEVICE_TABLE(of, arm_cci_pmu_matches); static bool is_duplicate_irq(int irq, int *irqs, int nr_irqs) { @@ -1702,14 +1704,27 @@ static int cci_pmu_probe(struct platform_device *pdev) return 0; } +static int cci_pmu_remove(struct platform_device *pdev) +{ + if (!g_cci_pmu) + return 0; + + cpuhp_remove_state(CPUHP_AP_PERF_ARM_CCI_ONLINE); + perf_pmu_unregister(&g_cci_pmu->pmu); + g_cci_pmu = NULL; + + return 0; +} + static struct platform_driver cci_pmu_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = arm_cci_pmu_matches, }, .probe = cci_pmu_probe, + .remove = cci_pmu_remove, }; -builtin_platform_driver(cci_pmu_driver); +module_platform_driver(cci_pmu_driver); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("ARM CCI PMU support"); -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH 3/3] perf/arm-cci: Allow building as a module @ 2018-05-11 14:29 ` Robin Murphy 0 siblings, 0 replies; 10+ messages in thread From: Robin Murphy @ 2018-05-11 14:29 UTC (permalink / raw) To: will.deacon, mark.rutland Cc: linux-arm-kernel, linux-kernel, pawel.moll, suzuki.poulose Fill in the few extra bits and annotations needed to make the driver work properly as a module, and jiggle the Kconfig to expose the driver-level ARM_CCI_PMU option. Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- Preserving the current level of configurability does end up allowing a rather pointless module configuration which supports no hardware variants, but I couldn't find a way to enforce "at least one sub-option selected" logic without Kbuild claiming a recursive dependency. drivers/perf/Kconfig | 31 +++++++++++++++++-------------- drivers/perf/arm-cci.c | 17 ++++++++++++++++- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig index 28bb5a029558..269331bfb746 100644 --- a/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig @@ -6,30 +6,33 @@ menu "Performance monitor support" depends on PERF_EVENTS config ARM_CCI_PMU - bool + tristate "ARM CCI PMU driver" select ARM_CCI + help + Support for PMU events monitoring on the ARM CCI (Cache Coherent + Interconnect) family of products. + + If compiled as a module, it will be called arm-cci. config ARM_CCI400_PMU - bool "ARM CCI400 PMU support" + bool "support CCI-400" + default y depends on (ARM && CPU_V7) || ARM64 + depends on ARM_CCI_PMU select ARM_CCI400_COMMON - select ARM_CCI_PMU help - Support for PMU events monitoring on the ARM CCI-400 (cache coherent - interconnect). CCI-400 supports counting events related to the - connected slave/master interfaces. + CCI-400 provides 4 independent event counters counting events related + to the connected slave/master interfaces, plus a cycle counter. config ARM_CCI5xx_PMU - bool "ARM CCI-500/CCI-550 PMU support" + bool "support CCI-500/CCI-550" + default y depends on (ARM && CPU_V7) || ARM64 - select ARM_CCI_PMU + depends on ARM_CCI_PMU help - Support for PMU events monitoring on the ARM CCI-500/CCI-550 cache - coherent interconnects. Both of them provide 8 independent event counters, - which can count events pertaining to the slave/master interfaces as well - as the internal events to the CCI. - - If unsure, say Y + CCI-500/CCI-550 both provide 8 independent event counters, which can + count events pertaining to the slave/master interfaces as well as the + internal events to the CCI. config ARM_CCN tristate "ARM CCN driver support" diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c index 7029d8fe8f44..09938dd8eb6f 100644 --- a/drivers/perf/arm-cci.c +++ b/drivers/perf/arm-cci.c @@ -1416,6 +1416,7 @@ static int cci_pmu_init(struct cci_pmu *cci_pmu, struct platform_device *pdev) pmu_format_attr_group.attrs = model->format_attrs; cci_pmu->pmu = (struct pmu) { + .module = THIS_MODULE, .name = cci_pmu->model->name, .task_ctx_nr = perf_invalid_context, .pmu_enable = cci_pmu_enable, @@ -1581,6 +1582,7 @@ static const struct of_device_id arm_cci_pmu_matches[] = { #endif {}, }; +MODULE_DEVICE_TABLE(of, arm_cci_pmu_matches); static bool is_duplicate_irq(int irq, int *irqs, int nr_irqs) { @@ -1702,14 +1704,27 @@ static int cci_pmu_probe(struct platform_device *pdev) return 0; } +static int cci_pmu_remove(struct platform_device *pdev) +{ + if (!g_cci_pmu) + return 0; + + cpuhp_remove_state(CPUHP_AP_PERF_ARM_CCI_ONLINE); + perf_pmu_unregister(&g_cci_pmu->pmu); + g_cci_pmu = NULL; + + return 0; +} + static struct platform_driver cci_pmu_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = arm_cci_pmu_matches, }, .probe = cci_pmu_probe, + .remove = cci_pmu_remove, }; -builtin_platform_driver(cci_pmu_driver); +module_platform_driver(cci_pmu_driver); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("ARM CCI PMU support"); -- 2.17.0.dirty ^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-05-11 14:38 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-05-11 14:29 [PATCH 0/3] perf: make Arm CCI driver modular Robin Murphy 2018-05-11 14:29 ` Robin Murphy 2018-05-11 14:29 ` [PATCH 1/3] perf/arm-cc*: Fix MODULE_LICENSE() tags Robin Murphy 2018-05-11 14:29 ` Robin Murphy 2018-05-11 14:29 ` [PATCH 2/3] perf/arm-cci: Remove pointless PMU disabling Robin Murphy 2018-05-11 14:29 ` Robin Murphy 2018-05-11 14:38 ` Mark Rutland 2018-05-11 14:38 ` Mark Rutland 2018-05-11 14:29 ` [PATCH 3/3] perf/arm-cci: Allow building as a module Robin Murphy 2018-05-11 14:29 ` Robin Murphy
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.