* Re: [PATCH -next] arm64: Export __cpu_logical_map [not found] <20200724030433.22287-1-wangkefeng.wang@huawei.com> @ 2020-07-24 3:08 ` Kefeng Wang 2020-07-24 8:16 ` Anshuman Khandual ` (2 more replies) 0 siblings, 3 replies; 18+ messages in thread From: Kefeng Wang @ 2020-07-24 3:08 UTC (permalink / raw) To: Catalin Marinas, Will Deacon, Mikko Perttunen, Sumit Gupta, Viresh Kumar Cc: Hulk Robot, linux-kernel@vger.kernel.org List, linux-arm-kernel +maillist On 2020/7/24 11:04, Kefeng Wang wrote: > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > __cpu_logical_map to fix build issue. > > Reported-by: Hulk Robot <hulkci@huawei.com> > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > arch/arm64/kernel/setup.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > index c793276ec7ad9..3aea05fbb9998 100644 > --- a/arch/arm64/kernel/setup.c > +++ b/arch/arm64/kernel/setup.c > @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) > arch_initcall(reserve_memblock_reserved_regions); > > u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > +EXPORT_SYMBOL(__cpu_logical_map); > > void __init setup_arch(char **cmdline_p) > { _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 3:08 ` [PATCH -next] arm64: Export __cpu_logical_map Kefeng Wang @ 2020-07-24 8:16 ` Anshuman Khandual 2020-07-24 9:13 ` Mark Rutland ` (2 more replies) 2020-07-24 9:43 ` Christoph Hellwig 2020-07-24 13:10 ` Sudeep Holla 2 siblings, 3 replies; 18+ messages in thread From: Anshuman Khandual @ 2020-07-24 8:16 UTC (permalink / raw) To: Kefeng Wang, Catalin Marinas, Will Deacon, Mikko Perttunen, Sumit Gupta, Viresh Kumar Cc: Hulk Robot, linux-kernel@vger.kernel.org List, linux-arm-kernel On 07/24/2020 08:38 AM, Kefeng Wang wrote: > +maillist This does not seem to be a correct method of posting any patch. > > On 2020/7/24 11:04, Kefeng Wang wrote: >> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >> >> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >> __cpu_logical_map to fix build issue. Commit 887d5fc82cb4 ("cpufreq: Add Tegra194 cpufreq driver") which adds this particular driver is present just on linux-next. But as expected, the driver does not use __cpu_logical_map directly but instead accesses it via cpu_logical_map() wrapper. Wondering, how did you even trigger the modpost error ? >> >> Reported-by: Hulk Robot <hulkci@huawei.com> >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >> --- >> arch/arm64/kernel/setup.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c >> index c793276ec7ad9..3aea05fbb9998 100644 >> --- a/arch/arm64/kernel/setup.c >> +++ b/arch/arm64/kernel/setup.c >> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) >> arch_initcall(reserve_memblock_reserved_regions); >> u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; >> +EXPORT_SYMBOL(__cpu_logical_map); >> void __init setup_arch(char **cmdline_p) >> { > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 8:16 ` Anshuman Khandual @ 2020-07-24 9:13 ` Mark Rutland 2020-07-24 9:35 ` Catalin Marinas 2020-07-24 9:16 ` Kefeng Wang 2020-07-24 9:30 ` Catalin Marinas 2 siblings, 1 reply; 18+ messages in thread From: Mark Rutland @ 2020-07-24 9:13 UTC (permalink / raw) To: Anshuman Khandual Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Catalin Marinas, Sumit Gupta, Will Deacon, linux-arm-kernel On Fri, Jul 24, 2020 at 01:46:18PM +0530, Anshuman Khandual wrote: > > On 07/24/2020 08:38 AM, Kefeng Wang wrote: > > +maillist > > This does not seem to be a correct method of posting any patch. > > > > > On 2020/7/24 11:04, Kefeng Wang wrote: > >> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > >> > >> ARM64 tegra194-cpufreq driver use cpu_logical_map, export > >> __cpu_logical_map to fix build issue. > > Commit 887d5fc82cb4 ("cpufreq: Add Tegra194 cpufreq driver") which adds > this particular driver is present just on linux-next. But as expected, > the driver does not use __cpu_logical_map directly but instead accesses > it via cpu_logical_map() wrapper. Wondering, how did you even trigger > the modpost error ? The wrapper in <asm/smp.h> is: | /* | * Logical CPU mapping. | */ | extern u64 __cpu_logical_map[NR_CPUS]; | #define cpu_logical_map(cpu) __cpu_logical_map[cpu] ... and use of that would blow up as described. > >> > >> Reported-by: Hulk Robot <hulkci@huawei.com> > >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > >> --- > >> arch/arm64/kernel/setup.c | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > >> index c793276ec7ad9..3aea05fbb9998 100644 > >> --- a/arch/arm64/kernel/setup.c > >> +++ b/arch/arm64/kernel/setup.c > >> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) > >> arch_initcall(reserve_memblock_reserved_regions); > >> u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > >> +EXPORT_SYMBOL(__cpu_logical_map); If modules are using cpu_logical_map(), this looks sane ot me, but I wonder if we should instead turn cpu_logical_map() into a C wrapper in smp.c, or at least mark __cpu_logical_map as __ro_after_init lest someone have the bright idea to fiddle with it. Mark. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 9:13 ` Mark Rutland @ 2020-07-24 9:35 ` Catalin Marinas 2020-07-24 10:33 ` Anshuman Khandual 0 siblings, 1 reply; 18+ messages in thread From: Catalin Marinas @ 2020-07-24 9:35 UTC (permalink / raw) To: Mark Rutland Cc: Kefeng Wang, Anshuman Khandual, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Sumit Gupta, Will Deacon, linux-arm-kernel On Fri, Jul 24, 2020 at 10:13:52AM +0100, Mark Rutland wrote: > On Fri, Jul 24, 2020 at 01:46:18PM +0530, Anshuman Khandual wrote: > > On 07/24/2020 08:38 AM, Kefeng Wang wrote: > > >> Reported-by: Hulk Robot <hulkci@huawei.com> > > >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > > >> --- > > >> arch/arm64/kernel/setup.c | 1 + > > >> 1 file changed, 1 insertion(+) > > >> > > >> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > > >> index c793276ec7ad9..3aea05fbb9998 100644 > > >> --- a/arch/arm64/kernel/setup.c > > >> +++ b/arch/arm64/kernel/setup.c > > >> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) > > >> arch_initcall(reserve_memblock_reserved_regions); > > >> u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > > >> +EXPORT_SYMBOL(__cpu_logical_map); > > If modules are using cpu_logical_map(), this looks sane ot me, but I > wonder if we should instead turn cpu_logical_map() into a C wrapper in > smp.c, or at least mark __cpu_logical_map as __ro_after_init lest > someone have the bright idea to fiddle with it. I'd go for a C wrapper and also change a couple of instances where we assign a value directly to cpu_logical_map(cpu). -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 9:35 ` Catalin Marinas @ 2020-07-24 10:33 ` Anshuman Khandual 0 siblings, 0 replies; 18+ messages in thread From: Anshuman Khandual @ 2020-07-24 10:33 UTC (permalink / raw) To: Catalin Marinas, Mark Rutland Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Sumit Gupta, Will Deacon, linux-arm-kernel On 07/24/2020 03:05 PM, Catalin Marinas wrote: > On Fri, Jul 24, 2020 at 10:13:52AM +0100, Mark Rutland wrote: >> On Fri, Jul 24, 2020 at 01:46:18PM +0530, Anshuman Khandual wrote: >>> On 07/24/2020 08:38 AM, Kefeng Wang wrote: >>>>> Reported-by: Hulk Robot <hulkci@huawei.com> >>>>> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >>>>> --- >>>>> � arch/arm64/kernel/setup.c | 1 + >>>>> � 1 file changed, 1 insertion(+) >>>>> >>>>> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c >>>>> index c793276ec7ad9..3aea05fbb9998 100644 >>>>> --- a/arch/arm64/kernel/setup.c >>>>> +++ b/arch/arm64/kernel/setup.c >>>>> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) >>>>> � arch_initcall(reserve_memblock_reserved_regions); >>>>> � � u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; >>>>> +EXPORT_SYMBOL(__cpu_logical_map); >> >> If modules are using cpu_logical_map(), this looks sane ot me, but I >> wonder if we should instead turn cpu_logical_map() into a C wrapper in >> smp.c, or at least mark __cpu_logical_map as __ro_after_init lest >> someone have the bright idea to fiddle with it. > > I'd go for a C wrapper and also change a couple of instances where we > assign a value directly to cpu_logical_map(cpu). Probably also create a set_cpu_logical_map(cpu, hwid) for those instances as well. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 8:16 ` Anshuman Khandual 2020-07-24 9:13 ` Mark Rutland @ 2020-07-24 9:16 ` Kefeng Wang 2020-07-24 9:30 ` Catalin Marinas 2 siblings, 0 replies; 18+ messages in thread From: Kefeng Wang @ 2020-07-24 9:16 UTC (permalink / raw) To: Anshuman Khandual, Catalin Marinas, Will Deacon, Mikko Perttunen, Sumit Gupta, Viresh Kumar Cc: Hulk Robot, linux-kernel@vger.kernel.org List, linux-arm-kernel On 2020/7/24 16:16, Anshuman Khandual wrote: > On 07/24/2020 08:38 AM, Kefeng Wang wrote: >> +maillist > This does not seem to be a correct method of posting any patch. sorry, forget to cc mailist when git send-email >> On 2020/7/24 11:04, Kefeng Wang wrote: >>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > >>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>> __cpu_logical_map to fix build issue. > Commit 887d5fc82cb4 ("cpufreq: Add Tegra194 cpufreq driver") which adds > this particular driver is present just on linux-next. But as expected, > the driver does not use __cpu_logical_map directly but instead accesses > it via cpu_logical_map() wrapper. Wondering, how did you even trigger > the modpost error ? arch/arm64/include/asm/smp.h:#define cpu_logical_map(cpu) __cpu_logical_map[cpu] Will see the error when using allmodconfig to build. > >>> Reported-by: Hulk Robot <hulkci@huawei.com> >>> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> >>> --- >>> arch/arm64/kernel/setup.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c >>> index c793276ec7ad9..3aea05fbb9998 100644 >>> --- a/arch/arm64/kernel/setup.c >>> +++ b/arch/arm64/kernel/setup.c >>> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) >>> arch_initcall(reserve_memblock_reserved_regions); >>> u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; >>> +EXPORT_SYMBOL(__cpu_logical_map); >>> void __init setup_arch(char **cmdline_p) >>> { >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >> > . > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 8:16 ` Anshuman Khandual 2020-07-24 9:13 ` Mark Rutland 2020-07-24 9:16 ` Kefeng Wang @ 2020-07-24 9:30 ` Catalin Marinas 2020-07-24 10:36 ` Anshuman Khandual 2 siblings, 1 reply; 18+ messages in thread From: Catalin Marinas @ 2020-07-24 9:30 UTC (permalink / raw) To: Anshuman Khandual Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Sumit Gupta, Will Deacon, linux-arm-kernel On Fri, Jul 24, 2020 at 01:46:18PM +0530, Anshuman Khandual wrote: > On 07/24/2020 08:38 AM, Kefeng Wang wrote: > > On 2020/7/24 11:04, Kefeng Wang wrote: > >> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > >> > >> ARM64 tegra194-cpufreq driver use cpu_logical_map, export > >> __cpu_logical_map to fix build issue. > > Commit 887d5fc82cb4 ("cpufreq: Add Tegra194 cpufreq driver") which adds > this particular driver is present just on linux-next. But as expected, > the driver does not use __cpu_logical_map directly but instead accesses > it via cpu_logical_map() wrapper. Wondering, how did you even trigger > the modpost error ? Since the wrapper is a macro, it just expands to __cpu_logical_map[]. > >> Reported-by: Hulk Robot <hulkci@huawei.com> > >> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > >> --- > >> arch/arm64/kernel/setup.c | 1 + > >> 1 file changed, 1 insertion(+) > >> > >> diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > >> index c793276ec7ad9..3aea05fbb9998 100644 > >> --- a/arch/arm64/kernel/setup.c > >> +++ b/arch/arm64/kernel/setup.c > >> @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) > >> arch_initcall(reserve_memblock_reserved_regions); > >> u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > >> +EXPORT_SYMBOL(__cpu_logical_map); > >> void __init setup_arch(char **cmdline_p) > >> { I can see the Tegra cpuidle also using cpu_logical_map(), though it can't be built as a module, unlike the cpufreq one. I think the patch makes sense. -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 9:30 ` Catalin Marinas @ 2020-07-24 10:36 ` Anshuman Khandual 0 siblings, 0 replies; 18+ messages in thread From: Anshuman Khandual @ 2020-07-24 10:36 UTC (permalink / raw) To: Catalin Marinas Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Sumit Gupta, Will Deacon, linux-arm-kernel On 07/24/2020 03:00 PM, Catalin Marinas wrote: > On Fri, Jul 24, 2020 at 01:46:18PM +0530, Anshuman Khandual wrote: >> On 07/24/2020 08:38 AM, Kefeng Wang wrote: >>> On 2020/7/24 11:04, Kefeng Wang wrote: >>>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >>>> >>>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>>> __cpu_logical_map to fix build issue. >> Commit 887d5fc82cb4 ("cpufreq: Add Tegra194 cpufreq driver") which adds >> this particular driver is present just on linux-next. But as expected, >> the driver does not use __cpu_logical_map directly but instead accesses >> it via cpu_logical_map() wrapper. Wondering, how did you even trigger >> the modpost error ? > Since the wrapper is a macro, it just expands to __cpu_logical_map[]. > Ahh, right. Existing cpu_logical_map() is not a true wrapper and it makes sense to convert that into one. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 3:08 ` [PATCH -next] arm64: Export __cpu_logical_map Kefeng Wang 2020-07-24 8:16 ` Anshuman Khandual @ 2020-07-24 9:43 ` Christoph Hellwig 2020-07-24 13:10 ` Sudeep Holla 2 siblings, 0 replies; 18+ messages in thread From: Christoph Hellwig @ 2020-07-24 9:43 UTC (permalink / raw) To: Kefeng Wang Cc: Catalin Marinas, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Viresh Kumar, Sumit Gupta, Will Deacon, linux-arm-kernel On Fri, Jul 24, 2020 at 11:08:03AM +0800, Kefeng Wang wrote: > +maillist > > On 2020/7/24 11:04, Kefeng Wang wrote: > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > __cpu_logical_map to fix build issue. > > > > Reported-by: Hulk Robot <hulkci@huawei.com> > > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > > --- > > arch/arm64/kernel/setup.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > > index c793276ec7ad9..3aea05fbb9998 100644 > > --- a/arch/arm64/kernel/setup.c > > +++ b/arch/arm64/kernel/setup.c > > @@ -275,6 +275,7 @@ static int __init reserve_memblock_reserved_regions(void) > > arch_initcall(reserve_memblock_reserved_regions); > > u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > > +EXPORT_SYMBOL(__cpu_logical_map); EXPORT_SYMBOL_GPL, please. Also consider turning the wrapper into an out of line function instead of exporting the data structure. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 3:08 ` [PATCH -next] arm64: Export __cpu_logical_map Kefeng Wang 2020-07-24 8:16 ` Anshuman Khandual 2020-07-24 9:43 ` Christoph Hellwig @ 2020-07-24 13:10 ` Sudeep Holla 2020-07-25 2:00 ` Kefeng Wang 2020-07-26 11:46 ` Sumit Gupta 2 siblings, 2 replies; 18+ messages in thread From: Sudeep Holla @ 2020-07-24 13:10 UTC (permalink / raw) To: Kefeng Wang Cc: Catalin Marinas, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Viresh Kumar, Sudeep Holla, Sumit Gupta, Will Deacon, linux-arm-kernel On Fri, Jul 24, 2020 at 11:08:03AM +0800, Kefeng Wang wrote: > +maillist > > On 2020/7/24 11:04, Kefeng Wang wrote: > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > __cpu_logical_map to fix build issue. > > I wonder why like other instances in the drivers, the mpidr is not get directly from the cpu. The cpufreq_driver->init call happens when the cpu is being brought online and is executed on the required cpu IIUC. read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. Though we may not add physical hotplug anytime soon, less dependency on this cpu_logical_map is better given that we can resolve this without the need to access the map. -- Regards, Sudeep _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 13:10 ` Sudeep Holla @ 2020-07-25 2:00 ` Kefeng Wang 2020-07-26 11:46 ` Sumit Gupta 1 sibling, 0 replies; 18+ messages in thread From: Kefeng Wang @ 2020-07-25 2:00 UTC (permalink / raw) To: Sudeep Holla Cc: Anshuman Khandual, Catalin Marinas, linux-kernel@vger.kernel.org List, Mikko Perttunen, hch, Hulk Robot, Viresh Kumar, Sumit Gupta, Will Deacon, linux-arm-kernel On 2020/7/24 21:10, Sudeep Holla wrote: > On Fri, Jul 24, 2020 at 11:08:03AM +0800, Kefeng Wang wrote: >> +maillist >> >> On 2020/7/24 11:04, Kefeng Wang wrote: >>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >>> >>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>> __cpu_logical_map to fix build issue. >>> > I wonder why like other instances in the drivers, the mpidr is not get > directly from the cpu. The cpufreq_driver->init call happens when the cpu > is being brought online and is executed on the required cpu IIUC. > > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > Though we may not add physical hotplug anytime soon, less dependency > on this cpu_logical_map is better given that we can resolve this without > the need to access the map. Hi all, thanks for all comments. As Sudeep said, I will using read_cpuid_mpidr() directly in tegra194-cpufreq to fix the build issue, and later we also would turn cpu_logical_map() into a C wrapper. If that's ok, I will send a new build-fix patch firstly, thanks. > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-24 13:10 ` Sudeep Holla 2020-07-25 2:00 ` Kefeng Wang @ 2020-07-26 11:46 ` Sumit Gupta 2020-07-27 16:05 ` Sudeep Holla 1 sibling, 1 reply; 18+ messages in thread From: Sumit Gupta @ 2020-07-26 11:46 UTC (permalink / raw) To: Sudeep Holla, Kefeng Wang Cc: Catalin Marinas, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Viresh Kumar, Sumit Gupta, Will Deacon, linux-arm-kernel >>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >>> >>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>> __cpu_logical_map to fix build issue. >>> > > I wonder why like other instances in the drivers, the mpidr is not get > directly from the cpu. The cpufreq_driver->init call happens when the cpu > is being brought online and is executed on the required cpu IIUC. > Yes, this occurs during hotplug case. But in the case of system boot, 'cpufreq_driver->init' is called later during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' can be different from the current CPU. That's why read_cpuid_mpidr() can't be used. > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > Though we may not add physical hotplug anytime soon, less dependency > on this cpu_logical_map is better given that we can resolve this without > the need to access the map. > > -- > Regards, > Sudeep > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-26 11:46 ` Sumit Gupta @ 2020-07-27 16:05 ` Sudeep Holla 2020-08-01 12:16 ` Sumit Gupta 0 siblings, 1 reply; 18+ messages in thread From: Sudeep Holla @ 2020-07-27 16:05 UTC (permalink / raw) To: Sumit Gupta Cc: Kefeng Wang, Catalin Marinas, Sudeep Holla, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Viresh Kumar, Will Deacon, linux-arm-kernel On Sun, Jul 26, 2020 at 05:16:27PM +0530, Sumit Gupta wrote: > > > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > > > __cpu_logical_map to fix build issue. > > > > > > > > I wonder why like other instances in the drivers, the mpidr is not get > > directly from the cpu. The cpufreq_driver->init call happens when the cpu > > is being brought online and is executed on the required cpu IIUC. > > > Yes, this occurs during hotplug case. > But in the case of system boot, 'cpufreq_driver->init' is called later > during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' > can be different from the current CPU. That's why read_cpuid_mpidr() can't > be used. > Fair enough, why not do cross call like in set_target ? Since it is one-off in init, I don't see any issue when you are doing it runtime for set_target. > > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > > Though we may not add physical hotplug anytime soon, less dependency > > on this cpu_logical_map is better given that we can resolve this without > > the need to access the map. > > To be honest, we have tried to remove all the dependency on cluster id in generic code as it is not well defined. This one is tegra specific driver so should be fine. But I am still bit nervous to export cpu_logical_map as we have no clue what that would mean for physical hotplug. -- Regards, Sudeep _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-07-27 16:05 ` Sudeep Holla @ 2020-08-01 12:16 ` Sumit Gupta 2020-08-10 7:49 ` Sudeep Holla 0 siblings, 1 reply; 18+ messages in thread From: Sumit Gupta @ 2020-08-01 12:16 UTC (permalink / raw) To: Sudeep Holla Cc: Kefeng Wang, Catalin Marinas, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Thierry Reding, Viresh Kumar, linux-tegra, Sumit Gupta, Jon Hunter, Will Deacon, linux-arm-kernel >>>>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >>>>> >>>>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>>>> __cpu_logical_map to fix build issue. >>>>> >>> >>> I wonder why like other instances in the drivers, the mpidr is not get >>> directly from the cpu. The cpufreq_driver->init call happens when the cpu >>> is being brought online and is executed on the required cpu IIUC. >>> >> Yes, this occurs during hotplug case. >> But in the case of system boot, 'cpufreq_driver->init' is called later >> during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' >> can be different from the current CPU. That's why read_cpuid_mpidr() can't >> be used. >> > > Fair enough, why not do cross call like in set_target ? Since it is one-off > in init, I don't see any issue when you are doing it runtime for set_target. > >>> read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. >>> Though we may not add physical hotplug anytime soon, less dependency >>> on this cpu_logical_map is better given that we can resolve this without >>> the need to access the map. >>> > > To be honest, we have tried to remove all the dependency on cluster id > in generic code as it is not well defined. This one is tegra specific > driver so should be fine. But I am still bit nervous to export > cpu_logical_map as we have no clue what that would mean for physical > hotplug. > As suggested, I have done below change to get the cluster number using read_cpuid_mpidr(). Please review and suggest if this looks ok? I will send formal patch if the change is fine. Thanks, Sumit ---- diff --git a/drivers/cpufreq/tegra194-cpufreq.c b/drivers/cpufreq/tegra194-cpufreq.c index bae527e..06f5ccf 100644 --- a/drivers/cpufreq/tegra194-cpufreq.c +++ b/drivers/cpufreq/tegra194-cpufreq.c @@ -56,9 +56,11 @@ struct read_counters_work { static struct workqueue_struct *read_counters_wq; -static enum cluster get_cpu_cluster(u8 cpu) +static void get_cpu_cluster(void *cluster) { - return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); + u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; + + *((uint32_t *) cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); } /* @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) static int tegra194_cpufreq_init(struct cpufreq_policy *policy) { struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); - int cl = get_cpu_cluster(policy->cpu); u32 cpu; + u32 cl; + + smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); > > -- > Regards, > Sudeep > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-08-01 12:16 ` Sumit Gupta @ 2020-08-10 7:49 ` Sudeep Holla 2020-08-10 10:19 ` Catalin Marinas 0 siblings, 1 reply; 18+ messages in thread From: Sudeep Holla @ 2020-08-10 7:49 UTC (permalink / raw) To: Sumit Gupta Cc: Kefeng Wang, Catalin Marinas, Sudeep Holla, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Thierry Reding, Viresh Kumar, linux-tegra, Jon Hunter, Will Deacon, linux-arm-kernel On Sat, Aug 01, 2020 at 05:46:43PM +0530, Sumit Gupta wrote: > > > > > > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > > > > > > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > > > > > __cpu_logical_map to fix build issue. > > > > > > > > > > > > > > I wonder why like other instances in the drivers, the mpidr is not get > > > > directly from the cpu. The cpufreq_driver->init call happens when the cpu > > > > is being brought online and is executed on the required cpu IIUC. > > > > > > > Yes, this occurs during hotplug case. > > > But in the case of system boot, 'cpufreq_driver->init' is called later > > > during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' > > > can be different from the current CPU. That's why read_cpuid_mpidr() can't > > > be used. > > > > > > > Fair enough, why not do cross call like in set_target ? Since it is one-off > > in init, I don't see any issue when you are doing it runtime for set_target. > > > > > > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > > > > Though we may not add physical hotplug anytime soon, less dependency > > > > on this cpu_logical_map is better given that we can resolve this without > > > > the need to access the map. > > > > > > > > To be honest, we have tried to remove all the dependency on cluster id > > in generic code as it is not well defined. This one is tegra specific > > driver so should be fine. But I am still bit nervous to export > > cpu_logical_map as we have no clue what that would mean for physical > > hotplug. > > > As suggested, I have done below change to get the cluster number using > read_cpuid_mpidr(). Please review and suggest if this looks ok? > I will send formal patch if the change is fine. > > Thanks, > Sumit > > ---- > > diff --git a/drivers/cpufreq/tegra194-cpufreq.c > b/drivers/cpufreq/tegra194-cpufreq.c > index bae527e..06f5ccf 100644 > --- a/drivers/cpufreq/tegra194-cpufreq.c > +++ b/drivers/cpufreq/tegra194-cpufreq.c > @@ -56,9 +56,11 @@ struct read_counters_work { > > static struct workqueue_struct *read_counters_wq; > > -static enum cluster get_cpu_cluster(u8 cpu) > +static void get_cpu_cluster(void *cluster) > { > - return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); > + u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; > + > + *((uint32_t *) cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); > } > > /* > @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) > static int tegra194_cpufreq_init(struct cpufreq_policy *policy) > { > struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); > - int cl = get_cpu_cluster(policy->cpu); > u32 cpu; > + u32 cl; > + > + smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); Thanks for this, looks good to me. You can add: Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> -- Regards, Sudeep _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-08-10 7:49 ` Sudeep Holla @ 2020-08-10 10:19 ` Catalin Marinas 2020-08-10 12:11 ` Sudeep Holla 2020-08-11 19:44 ` Sumit Gupta 0 siblings, 2 replies; 18+ messages in thread From: Catalin Marinas @ 2020-08-10 10:19 UTC (permalink / raw) To: Sudeep Holla Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Thierry Reding, linux-tegra, Sumit Gupta, Jon Hunter, Will Deacon, linux-arm-kernel On Mon, Aug 10, 2020 at 08:49:56AM +0100, Sudeep Holla wrote: > On Sat, Aug 01, 2020 at 05:46:43PM +0530, Sumit Gupta wrote: > > > > > > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > > > > > > > > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > > > > > > __cpu_logical_map to fix build issue. > > > > > > > > > > > > > > > > > I wonder why like other instances in the drivers, the mpidr is not get > > > > > directly from the cpu. The cpufreq_driver->init call happens when the cpu > > > > > is being brought online and is executed on the required cpu IIUC. > > > > > > > > Yes, this occurs during hotplug case. > > > > But in the case of system boot, 'cpufreq_driver->init' is called later > > > > during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' > > > > can be different from the current CPU. That's why read_cpuid_mpidr() can't > > > > be used. > > > > > > Fair enough, why not do cross call like in set_target ? Since it is one-off > > > in init, I don't see any issue when you are doing it runtime for set_target. > > > > > > > > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > > > > > Though we may not add physical hotplug anytime soon, less dependency > > > > > on this cpu_logical_map is better given that we can resolve this without > > > > > the need to access the map. > > > > > > To be honest, we have tried to remove all the dependency on cluster id > > > in generic code as it is not well defined. This one is tegra specific > > > driver so should be fine. But I am still bit nervous to export > > > cpu_logical_map as we have no clue what that would mean for physical > > > hotplug. > > > > As suggested, I have done below change to get the cluster number using > > read_cpuid_mpidr(). Please review and suggest if this looks ok? > > I will send formal patch if the change is fine. > > > > diff --git a/drivers/cpufreq/tegra194-cpufreq.c > > b/drivers/cpufreq/tegra194-cpufreq.c > > index bae527e..06f5ccf 100644 > > --- a/drivers/cpufreq/tegra194-cpufreq.c > > +++ b/drivers/cpufreq/tegra194-cpufreq.c > > @@ -56,9 +56,11 @@ struct read_counters_work { > > > > static struct workqueue_struct *read_counters_wq; > > > > -static enum cluster get_cpu_cluster(u8 cpu) > > +static void get_cpu_cluster(void *cluster) > > { > > - return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); > > + u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; > > + > > + *((uint32_t *) cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); > > } > > > > /* > > @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) > > static int tegra194_cpufreq_init(struct cpufreq_policy *policy) > > { > > struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); > > - int cl = get_cpu_cluster(policy->cpu); > > u32 cpu; > > + u32 cl; > > + > > + smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); > > Thanks for this, looks good to me. You can add: > > Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> I already merged Kefeng's __cpu_logical_map fix (commit eaecca9e7710) but if the above goes in, I can drop the EXPORT_SYMBOL part (and keep the rest as it's a good refactoring). -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-08-10 10:19 ` Catalin Marinas @ 2020-08-10 12:11 ` Sudeep Holla 2020-08-11 19:44 ` Sumit Gupta 1 sibling, 0 replies; 18+ messages in thread From: Sudeep Holla @ 2020-08-10 12:11 UTC (permalink / raw) To: Catalin Marinas Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Thierry Reding, linux-tegra, Sumit Gupta, Jon Hunter, Will Deacon, linux-arm-kernel On Mon, Aug 10, 2020 at 11:19:55AM +0100, Catalin Marinas wrote: > On Mon, Aug 10, 2020 at 08:49:56AM +0100, Sudeep Holla wrote: > > On Sat, Aug 01, 2020 at 05:46:43PM +0530, Sumit Gupta wrote: > > > > > > > > ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! > > > > > > > > > > > > > > > > ARM64 tegra194-cpufreq driver use cpu_logical_map, export > > > > > > > > __cpu_logical_map to fix build issue. > > > > > > > > > > > > > > > > > > > > I wonder why like other instances in the drivers, the mpidr is not get > > > > > > directly from the cpu. The cpufreq_driver->init call happens when the cpu > > > > > > is being brought online and is executed on the required cpu IIUC. > > > > > > > > > > Yes, this occurs during hotplug case. > > > > > But in the case of system boot, 'cpufreq_driver->init' is called later > > > > > during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' > > > > > can be different from the current CPU. That's why read_cpuid_mpidr() can't > > > > > be used. > > > > > > > > Fair enough, why not do cross call like in set_target ? Since it is one-off > > > > in init, I don't see any issue when you are doing it runtime for set_target. > > > > > > > > > > read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. > > > > > > Though we may not add physical hotplug anytime soon, less dependency > > > > > > on this cpu_logical_map is better given that we can resolve this without > > > > > > the need to access the map. > > > > > > > > To be honest, we have tried to remove all the dependency on cluster id > > > > in generic code as it is not well defined. This one is tegra specific > > > > driver so should be fine. But I am still bit nervous to export > > > > cpu_logical_map as we have no clue what that would mean for physical > > > > hotplug. > > > > > > As suggested, I have done below change to get the cluster number using > > > read_cpuid_mpidr(). Please review and suggest if this looks ok? > > > I will send formal patch if the change is fine. > > > > > > diff --git a/drivers/cpufreq/tegra194-cpufreq.c > > > b/drivers/cpufreq/tegra194-cpufreq.c > > > index bae527e..06f5ccf 100644 > > > --- a/drivers/cpufreq/tegra194-cpufreq.c > > > +++ b/drivers/cpufreq/tegra194-cpufreq.c > > > @@ -56,9 +56,11 @@ struct read_counters_work { > > > > > > static struct workqueue_struct *read_counters_wq; > > > > > > -static enum cluster get_cpu_cluster(u8 cpu) > > > +static void get_cpu_cluster(void *cluster) > > > { > > > - return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); > > > + u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; > > > + > > > + *((uint32_t *) cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); > > > } > > > > > > /* > > > @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) > > > static int tegra194_cpufreq_init(struct cpufreq_policy *policy) > > > { > > > struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); > > > - int cl = get_cpu_cluster(policy->cpu); > > > u32 cpu; > > > + u32 cl; > > > + > > > + smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); > > > > Thanks for this, looks good to me. You can add: > > > > Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> > > I already merged Kefeng's __cpu_logical_map fix (commit eaecca9e7710) > but if the above goes in, I can drop the EXPORT_SYMBOL part (and keep > the rest as it's a good refactoring). > OK, I will keep an eye on this and we can drop export once this is merged. -- Regards, Sudeep _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH -next] arm64: Export __cpu_logical_map 2020-08-10 10:19 ` Catalin Marinas 2020-08-10 12:11 ` Sudeep Holla @ 2020-08-11 19:44 ` Sumit Gupta 1 sibling, 0 replies; 18+ messages in thread From: Sumit Gupta @ 2020-08-11 19:44 UTC (permalink / raw) To: Catalin Marinas, Sudeep Holla Cc: Kefeng Wang, Viresh Kumar, linux-kernel@vger.kernel.org List, Mikko Perttunen, Hulk Robot, Bibek Basu, Thierry Reding, linux-tegra, Jon Hunter, Will Deacon, linux-arm-kernel >>>>>>>> ERROR: modpost: "__cpu_logical_map" [drivers/cpufreq/tegra194-cpufreq.ko] undefined! >>>>>>>> >>>>>>>> ARM64 tegra194-cpufreq driver use cpu_logical_map, export >>>>>>>> __cpu_logical_map to fix build issue. >>>>>>>> >>>>>> >>>>>> I wonder why like other instances in the drivers, the mpidr is not get >>>>>> directly from the cpu. The cpufreq_driver->init call happens when the cpu >>>>>> is being brought online and is executed on the required cpu IIUC. >>>>> >>>>> Yes, this occurs during hotplug case. >>>>> But in the case of system boot, 'cpufreq_driver->init' is called later >>>>> during cpufreq platform driver's probe. The value of CPU in 'policy->cpu' >>>>> can be different from the current CPU. That's why read_cpuid_mpidr() can't >>>>> be used. >>>> >>>> Fair enough, why not do cross call like in set_target ? Since it is one-off >>>> in init, I don't see any issue when you are doing it runtime for set_target. >>>> >>>>>> read_cpuid_mpidr() is inline and avoids having to export the logical_cpu_map. >>>>>> Though we may not add physical hotplug anytime soon, less dependency >>>>>> on this cpu_logical_map is better given that we can resolve this without >>>>>> the need to access the map. >>>> >>>> To be honest, we have tried to remove all the dependency on cluster id >>>> in generic code as it is not well defined. This one is tegra specific >>>> driver so should be fine. But I am still bit nervous to export >>>> cpu_logical_map as we have no clue what that would mean for physical >>>> hotplug. >>> >>> As suggested, I have done below change to get the cluster number using >>> read_cpuid_mpidr(). Please review and suggest if this looks ok? >>> I will send formal patch if the change is fine. >>> >>> diff --git a/drivers/cpufreq/tegra194-cpufreq.c >>> b/drivers/cpufreq/tegra194-cpufreq.c >>> index bae527e..06f5ccf 100644 >>> --- a/drivers/cpufreq/tegra194-cpufreq.c >>> +++ b/drivers/cpufreq/tegra194-cpufreq.c >>> @@ -56,9 +56,11 @@ struct read_counters_work { >>> >>> static struct workqueue_struct *read_counters_wq; >>> >>> -static enum cluster get_cpu_cluster(u8 cpu) >>> +static void get_cpu_cluster(void *cluster) >>> { >>> - return MPIDR_AFFINITY_LEVEL(cpu_logical_map(cpu), 1); >>> + u64 mpidr = read_cpuid_mpidr() & MPIDR_HWID_BITMASK; >>> + >>> + *((uint32_t *) cluster) = MPIDR_AFFINITY_LEVEL(mpidr, 1); >>> } >>> >>> /* >>> @@ -186,8 +188,10 @@ static unsigned int tegra194_get_speed(u32 cpu) >>> static int tegra194_cpufreq_init(struct cpufreq_policy *policy) >>> { >>> struct tegra194_cpufreq_data *data = cpufreq_get_driver_data(); >>> - int cl = get_cpu_cluster(policy->cpu); >>> u32 cpu; >>> + u32 cl; >>> + >>> + smp_call_function_single(policy->cpu, get_cpu_cluster, &cl, true); >> >> Thanks for this, looks good to me. You can add: >> >> Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> > > I already merged Kefeng's __cpu_logical_map fix (commit eaecca9e7710) > but if the above goes in, I can drop the EXPORT_SYMBOL part (and keep > the rest as it's a good refactoring). > I have posted the formal patch. Thanks, Sumit > -- > Catalin > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2020-08-11 19:46 UTC | newest] Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20200724030433.22287-1-wangkefeng.wang@huawei.com> 2020-07-24 3:08 ` [PATCH -next] arm64: Export __cpu_logical_map Kefeng Wang 2020-07-24 8:16 ` Anshuman Khandual 2020-07-24 9:13 ` Mark Rutland 2020-07-24 9:35 ` Catalin Marinas 2020-07-24 10:33 ` Anshuman Khandual 2020-07-24 9:16 ` Kefeng Wang 2020-07-24 9:30 ` Catalin Marinas 2020-07-24 10:36 ` Anshuman Khandual 2020-07-24 9:43 ` Christoph Hellwig 2020-07-24 13:10 ` Sudeep Holla 2020-07-25 2:00 ` Kefeng Wang 2020-07-26 11:46 ` Sumit Gupta 2020-07-27 16:05 ` Sudeep Holla 2020-08-01 12:16 ` Sumit Gupta 2020-08-10 7:49 ` Sudeep Holla 2020-08-10 10:19 ` Catalin Marinas 2020-08-10 12:11 ` Sudeep Holla 2020-08-11 19:44 ` Sumit Gupta
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).