Message ID | 20230807081248.4745-1-TonyWWang-oc@zhaoxin.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | cpufreq: ACPI: add ITMT support when CPPC enabled | expand |
Hi Tony, kernel test robot noticed the following build errors: [auto build test ERROR on rafael-pm/linux-next] [also build test ERROR on linus/master v6.5-rc5 next-20230807] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Tony-W-Wang-oc/cpufreq-ACPI-add-ITMT-support-when-CPPC-enabled/20230807-161352 base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next patch link: https://lore.kernel.org/r/20230807081248.4745-1-TonyWWang-oc%40zhaoxin.com patch subject: [PATCH] cpufreq: ACPI: add ITMT support when CPPC enabled config: x86_64-rhel-8.3 (https://download.01.org/0day-ci/archive/20230807/202308072108.YTVt2KY2-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce: (https://download.01.org/0day-ci/archive/20230807/202308072108.YTVt2KY2-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202308072108.YTVt2KY2-lkp@intel.com/ All errors (new ones prefixed by >>, old ones prefixed by <<): WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/nvdimm/nd_pmem.o WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/nvdimm/nd_btt.o WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/nvdimm/nd_e820.o WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/dca/dca.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/802/p8022.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/802/psnap.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/802/stp.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/802/garp.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/802/mrp.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_htb.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_hfsc.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_red.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_gred.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_ingress.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_sfq.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_tbf.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_teql.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_prio.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_multiq.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_netem.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_drr.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_plug.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_mqprio.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_mqprio_lib.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_choke.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/sch_qfq.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/cls_u32.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/cls_route.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/cls_fw.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/cls_basic.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/em_cmp.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/em_nbyte.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/em_u32.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/em_meta.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sched/em_text.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netlink/netlink_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nfnetlink_osf.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nf_conntrack.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nf_conntrack_netlink.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nf_conntrack_broadcast.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nf_nat.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nf_tables.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nft_fib.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nft_chain_nat.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/nft_fwd_netdev.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_rr.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_wrr.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_lc.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_wlc.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_fo.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_ovf.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_lblc.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_lblcr.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_dh.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_sh.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_sed.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_nq.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_ftp.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/netfilter/ipvs/ip_vs_pe_sip.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/netfilter/nf_defrag_ipv4.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/netfilter/nf_reject_ipv4.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/netfilter/iptable_nat.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/netfilter/iptable_raw.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/ip_tunnel.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/ipip.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/ip_gre.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/udp_tunnel.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/ip_vti.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/ah4.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/esp4.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/xfrm4_tunnel.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/tunnel4.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/inet_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/tcp_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/udp_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv4/raw_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/unix/unix_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/netfilter/ip6table_raw.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/netfilter/ip6table_nat.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/netfilter/nf_defrag_ipv6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/netfilter/nf_reject_ipv6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/ah6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/esp6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/xfrm6_tunnel.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/tunnel6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/mip6.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/sit.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/ipv6/ip6_udp_tunnel.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/packet/af_packet_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sunrpc/auth_gss/auth_rpcgss.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sunrpc/auth_gss/rpcsec_gss_krb5.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/8021q/8021q.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/bridge/netfilter/ebtables.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/bridge/netfilter/ebtable_broute.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/bridge/netfilter/ebtable_filter.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/bridge/netfilter/ebtable_nat.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/bridge/bridge.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/sctp/sctp_diag.o WARNING: modpost: missing MODULE_DESCRIPTION() in net/vmw_vsock/vsock_diag.o >> ERROR: modpost: "sched_set_itmt_core_prio" [drivers/cpufreq/acpi-cpufreq.ko] undefined! >> ERROR: modpost: "sched_set_itmt_support" [drivers/cpufreq/acpi-cpufreq.ko] undefined!
diff --git a/drivers/cpufreq/acpi-cpufreq.c b/drivers/cpufreq/acpi-cpufreq.c index b2f05d27167e..5733323e04ac 100644 --- a/drivers/cpufreq/acpi-cpufreq.c +++ b/drivers/cpufreq/acpi-cpufreq.c @@ -628,28 +628,35 @@ static int acpi_cpufreq_blacklist(struct cpuinfo_x86 *c) #endif #ifdef CONFIG_ACPI_CPPC_LIB -static u64 get_max_boost_ratio(unsigned int cpu) +static void cpufreq_get_core_perf(int cpu, u64 *highest_perf, u64 *nominal_perf) { struct cppc_perf_caps perf_caps; - u64 highest_perf, nominal_perf; int ret; if (acpi_pstate_strict) - return 0; + return; ret = cppc_get_perf_caps(cpu, &perf_caps); if (ret) { pr_debug("CPU%d: Unable to get performance capabilities (%d)\n", cpu, ret); - return 0; + return; } if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) - highest_perf = amd_get_highest_perf(); + *highest_perf = amd_get_highest_perf(); else - highest_perf = perf_caps.highest_perf; + *highest_perf = perf_caps.highest_perf; + + *nominal_perf = perf_caps.nominal_perf; + return; +} - nominal_perf = perf_caps.nominal_perf; +static u64 get_max_boost_ratio(unsigned int cpu) +{ + u64 highest_perf, nominal_perf; + + cpufreq_get_core_perf(cpu, &highest_perf, &nominal_perf); if (!highest_perf || !nominal_perf) { pr_debug("CPU%d: highest or nominal performance missing\n", cpu); @@ -663,8 +670,44 @@ static u64 get_max_boost_ratio(unsigned int cpu) return div_u64(highest_perf << SCHED_CAPACITY_SHIFT, nominal_perf); } + +static void cpufreq_sched_itmt_work_fn(struct work_struct *work) +{ + sched_set_itmt_support(); +} + +static DECLARE_WORK(sched_itmt_work, cpufreq_sched_itmt_work_fn); + +static void cpufreq_set_itmt_prio(int cpu) +{ + u64 highest_perf, nominal_perf; + static u32 max_highest_perf = 0, min_highest_perf = U32_MAX; + + cpufreq_get_core_perf(cpu, &highest_perf, &nominal_perf); + + sched_set_itmt_core_prio(highest_perf, cpu); + + if (max_highest_perf <= min_highest_perf) { + if (highest_perf > max_highest_perf) + max_highest_perf = highest_perf; + + if (highest_perf < min_highest_perf) + min_highest_perf = highest_perf; + + if (max_highest_perf > min_highest_perf) { + /* + * This code can be run during CPU online under the + * CPU hotplug locks, so sched_set_itmt_support() + * cannot be called from here. Queue up a work item + * to invoke it. + */ + schedule_work(&sched_itmt_work); + } + } +} #else static inline u64 get_max_boost_ratio(unsigned int cpu) { return 0; } +static void cpufreq_set_itmt_prio(int cpu) { return; } #endif static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) @@ -870,6 +913,8 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) /* notify BIOS that we exist */ acpi_processor_notify_smm(THIS_MODULE); + cpufreq_set_itmt_prio(cpu); + pr_debug("CPU%u - ACPI performance management activated.\n", cpu); for (i = 0; i < perf->state_count; i++) pr_debug(" %cP%d: %d MHz, %d mW, %d uS\n",
The _CPC method can get per-core highest frequency. The highest frequency may varies between cores which mean cores can running at different max frequency, so can use it as a core priority and give a hint to scheduler in order to put critical task to the higher priority core. Signed-off-by: Tony W Wang-oc <TonyWWang-oc@zhaoxin.com> --- drivers/cpufreq/acpi-cpufreq.c | 59 ++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 7 deletions(-)