[PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS

Zhongqiu Han posted 1 patch 12 months ago
include/linux/pm_qos.h |  35 +++++++++
kernel/power/qos.c     | 158 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 193 insertions(+)
[PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by Zhongqiu Han 12 months ago
Currently, the PM QoS framework supports global CPU latency QoS and
per-device CPU latency QoS requests. An example of using global CPU
latency QoS is a commit 2777e73fc154 ("scsi: ufs: core: Add CPU latency
QoS support for UFS driver") that improved random io performance by 15%
for ufs on specific device platform.

However, this prevents all CPUs in the system from entering C states.
Typically, some threads or drivers know which specific CPUs they are
interested in. For example, drivers with IRQ affinity only want interrupts
to wake up and be handled on specific CPUs. Similarly, kernel thread bound
to specific CPUs through affinity only care about the latency of those
particular CPUs.

This patch introduces support for partial CPUs PM QoS using a CPU affinity
mask, allowing flexible and more precise latency QoS settings for specific
CPUs. This can help save power, especially on heterogeneous platforms with
big and little cores, as well as some power-conscious embedded systems for
example:

                  driver A       rt kthread B      module C
QoS cpu mask:       0-3              2-5              6-7
target latency:     20               30               50
                    |                |                |
                    v                v                v
                    +---------------------------------+
                    |        PM  QoS  Framework       |
                    +---------------------------------+
                    |                |                |
                    v                v                v
cpu mask:          0-3            2-3,4-5            6-7
actual latency:    20             20, 30             50

Implement this support based on per-device CPU latency PM QoS.

Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com>
---
 include/linux/pm_qos.h |  35 +++++++++
 kernel/power/qos.c     | 158 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 193 insertions(+)

diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 4a69d4af3ff8..59139e5a0a30 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -131,6 +131,11 @@ enum pm_qos_req_action {
 	PM_QOS_REMOVE_REQ	/* Remove an existing request */
 };
 
+struct cpu_affinity_qos_req {
+	struct list_head list;
+	struct dev_pm_qos_request req;
+};
+
 static inline int dev_pm_qos_request_active(struct dev_pm_qos_request *req)
 {
 	return req->dev != NULL;
@@ -317,3 +322,33 @@ int freq_qos_remove_notifier(struct freq_constraints *qos,
 			     struct notifier_block *notifier);
 
 #endif
+
+#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_PM)
+int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
+			const cpumask_t *affinity_mask, s32 latency_value);
+int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
+			s32 new_value);
+int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req);
+int cpu_latency_qos_affinity_release(struct list_head *pm_reqs);
+void wakeup_qos_affinity_idle_cpu(int cpu);
+#else
+int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
+			const cpumask_t *affinity_mask, s32 latency_value)
+{
+	return 0;
+}
+int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
+			s32 new_value)
+{
+	return 0;
+}
+int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
+{
+	return 0;
+}
+int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
+{
+	return 0;
+}
+void wakeup_qos_affinity_idle_cpu(int cpu) {}
+#endif
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index 4244b069442e..b9b814ee670f 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -335,6 +335,164 @@ void cpu_latency_qos_remove_request(struct pm_qos_request *req)
 }
 EXPORT_SYMBOL_GPL(cpu_latency_qos_remove_request);
 
+#ifdef CONFIG_PM
+
+/**
+ * wakeup_qos_affinity_idle_cpu - break one specific cpu out of idle.
+ */
+void wakeup_qos_affinity_idle_cpu(int cpu)
+{
+	preempt_disable();
+	if (cpu != smp_processor_id() && cpu_online(cpu))
+		wake_up_if_idle(cpu);
+	preempt_enable();
+}
+
+/**
+ * cpu_latency_qos_affinity_add - Add new CPU affinity latency QoS request.
+ * @pm_req : Pointer to a preallocated handle.
+ * @affinity_mask: Mask to determine which CPUs need latency QoS.
+ * @new_value: New requested constraint value.
+ *
+ * Use @latency_value to initialize the request handle pointed to by @pm_req,
+ * insert it as a new entry to the CPU latency QoS list and recompute the
+ * effective QoS constraint for that list, @affinity_mask determine which CPUs
+ * need the latency QoS.
+ *
+ * Callers need to save the handle for later use in updates and removal of the
+ * QoS request represented by it.
+ */
+int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
+				 const cpumask_t *affinity_mask,
+				 s32 latency_value)
+{
+	int cpu;
+	cpumask_t actual_mask;
+	struct cpu_affinity_qos_req *cpu_pm_req;
+	int ret = 0;
+
+	if (!pm_req)
+		pr_err("%s: invalid PM Qos request\n", __func__);
+
+	INIT_LIST_HEAD(&pm_req->list);
+
+	if (!affinity_mask || cpumask_empty(affinity_mask) ||
+	    latency_value < 0) {
+		pr_err("%s: invalid PM Qos request value\n", __func__);
+		return -EINVAL;
+	}
+
+	for_each_cpu(cpu, affinity_mask) {
+		cpu_pm_req = kzalloc(sizeof(struct cpu_affinity_qos_req),
+				     GFP_KERNEL);
+		if (!cpu_pm_req) {
+			ret = -ENOMEM;
+			goto out_err;
+		}
+		ret = dev_pm_qos_add_request(get_cpu_device(cpu),
+					     &cpu_pm_req->req,
+					     DEV_PM_QOS_RESUME_LATENCY,
+					     latency_value);
+		if (ret < 0) {
+			pr_err("failed to add latency req for cpu%d", cpu);
+			kfree(cpu_pm_req);
+			goto out_err;
+		} else if (ret > 0) {
+			wakeup_qos_affinity_idle_cpu(cpu);
+		}
+
+		cpumask_set_cpu(cpu, &actual_mask);
+		list_add(&cpu_pm_req->list, &pm_req->list);
+	}
+
+	pr_info("PM Qos latency: %d added on cpus %*pb\n", latency_value,
+		cpumask_pr_args(&actual_mask));
+
+	return ret;
+
+out_err:
+	cpu_latency_qos_affinity_release(&pm_req->list);
+	pr_err("failed to add PM QoS latency req, removed all added requests\n");
+	return ret;
+}
+EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_add);
+
+/**
+ * cpu_latency_qos_affinity_update - Modify existing CPU affinity latency QoS.
+ * @pm_req : QoS request to update for CPUs with affinity masks.
+ * @new_value: New requested constraint value.
+ *
+ * Use @new_value to update the QoS request represented by @pm_req in the CPU
+ * latency QoS list along with updating the effective constraint value for that
+ * list.
+ */
+int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
+				    s32 new_value)
+{
+	struct cpu_affinity_qos_req *cpu_pm_req, *next;
+	int ret = 0;
+
+	if (!pm_req || new_value < 0 || list_empty(&pm_req->list)) {
+		pr_err("%s: invalid PM Qos request value\n", __func__);
+		return -EINVAL;
+	}
+
+	list_for_each_entry_safe(cpu_pm_req, next, &pm_req->list, list) {
+		ret = dev_pm_qos_update_request(&cpu_pm_req->req, new_value);
+		if (ret < 0) {
+			pr_err("PM QoS qos update failed for %s\n",
+			       dev_name(cpu_pm_req->req.dev));
+		} else if (ret > 0) {
+			wakeup_qos_affinity_idle_cpu(cpu_pm_req->req.dev->id);
+		}
+	}
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_update);
+
+/**
+ * cpu_latency_qos_affinity_remove - Remove existing CPU affinity latency QoS.
+ * @pm_req: QoS request to update for CPUs with affinity masks.
+ *
+ * Remove the CPU latency QoS request represented by @pm_req from the CPU latency
+ * QoS list.
+ */
+int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
+{
+	if (!pm_req || list_empty(&pm_req->list)) {
+		pr_err("%s: invalid PM Qos request value\n", __func__);
+		return -EINVAL;
+	}
+
+	return cpu_latency_qos_affinity_release(&pm_req->list);
+}
+EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_remove);
+
+/**
+ * cpu_latency_qos_affinity_release - Release pm_reqs latency QoS resource.
+ * @pm_req: QoS request to remove.
+ *
+ * Release pm_reqs managed CPU affinity latency QoS resource.
+ */
+int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
+{
+	int ret = 0;
+	struct cpu_affinity_qos_req *cpu_pm_req, *next;
+
+	list_for_each_entry_safe(cpu_pm_req, next, pm_reqs, list) {
+		ret = dev_pm_qos_remove_request(&cpu_pm_req->req);
+		if (ret < 0)
+			pr_err("failed to remove qos request for %s\n",
+			       dev_name(cpu_pm_req->req.dev));
+		list_del(&cpu_pm_req->list);
+		kfree(cpu_pm_req);
+	}
+
+	return ret;
+}
+#endif /* CONFIG_PM */
+
 /* User space interface to the CPU latency QoS via misc device. */
 
 static int cpu_latency_qos_open(struct inode *inode, struct file *filp)
-- 
2.25.1
Re: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by kernel test robot 11 months, 4 weeks ago
Hi Zhongqiu,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge amd-pstate/linux-next amd-pstate/bleeding-edge linus/master v6.15-rc3 next-20250424]
[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/Zhongqiu-Han/PM-QoS-Add-support-for-CPU-affinity-mask-based-CPUs-latency-QoS/20250424-175559
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20250424095228.1112558-1-quic_zhonhan%40quicinc.com
patch subject: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
config: s390-randconfig-001-20250425 (https://download.01.org/0day-ci/archive/20250425/202504251845.LAwzxYtY-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250425/202504251845.LAwzxYtY-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/202504251845.LAwzxYtY-lkp@intel.com/

All warnings (new ones prefixed by >>):

   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:8:
   In file included from include/linux/cpufreq.h:19:
>> include/linux/pm_qos.h:335:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_add' [-Wmissing-prototypes]
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:335:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         | ^
         | static 
>> include/linux/pm_qos.h:340:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_update' [-Wmissing-prototypes]
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:340:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         | ^
         | static 
>> include/linux/pm_qos.h:345:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_remove' [-Wmissing-prototypes]
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   include/linux/pm_qos.h:345:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         | ^
         | static 
>> include/linux/pm_qos.h:349:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_release' [-Wmissing-prototypes]
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   include/linux/pm_qos.h:349:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         | ^
         | static 
>> include/linux/pm_qos.h:353:6: warning: no previous prototype for function 'wakeup_qos_affinity_idle_cpu' [-Wmissing-prototypes]
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   include/linux/pm_qos.h:353:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         | ^
         | static 
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:335:5: error: redefinition of 'cpu_latency_qos_affinity_add'
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:335:5: note: previous definition is here
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:340:5: error: redefinition of 'cpu_latency_qos_affinity_update'
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:340:5: note: previous definition is here
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:345:5: error: redefinition of 'cpu_latency_qos_affinity_remove'
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   include/linux/pm_qos.h:345:5: note: previous definition is here
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:349:5: error: redefinition of 'cpu_latency_qos_affinity_release'
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   include/linux/pm_qos.h:349:5: note: previous definition is here
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   In file included from kernel/cpu.c:41:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:353:6: error: redefinition of 'wakeup_qos_affinity_idle_cpu'
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   include/linux/pm_qos.h:353:6: note: previous definition is here
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   5 warnings and 5 errors generated.
--
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:31:
   In file included from include/linux/cpufreq.h:19:
>> include/linux/pm_qos.h:335:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_add' [-Wmissing-prototypes]
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:335:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         | ^
         | static 
>> include/linux/pm_qos.h:340:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_update' [-Wmissing-prototypes]
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:340:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         | ^
         | static 
>> include/linux/pm_qos.h:345:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_remove' [-Wmissing-prototypes]
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   include/linux/pm_qos.h:345:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         | ^
         | static 
>> include/linux/pm_qos.h:349:5: warning: no previous prototype for function 'cpu_latency_qos_affinity_release' [-Wmissing-prototypes]
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   include/linux/pm_qos.h:349:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         | ^
         | static 
>> include/linux/pm_qos.h:353:6: warning: no previous prototype for function 'wakeup_qos_affinity_idle_cpu' [-Wmissing-prototypes]
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   include/linux/pm_qos.h:353:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         | ^
         | static 
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:73:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:335:5: error: redefinition of 'cpu_latency_qos_affinity_add'
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:335:5: note: previous definition is here
     335 | int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
         |     ^
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:73:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:340:5: error: redefinition of 'cpu_latency_qos_affinity_update'
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   include/linux/pm_qos.h:340:5: note: previous definition is here
     340 | int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
         |     ^
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:73:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:345:5: error: redefinition of 'cpu_latency_qos_affinity_remove'
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   include/linux/pm_qos.h:345:5: note: previous definition is here
     345 | int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
         |     ^
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:73:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:349:5: error: redefinition of 'cpu_latency_qos_affinity_release'
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   include/linux/pm_qos.h:349:5: note: previous definition is here
     349 | int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
         |     ^
   In file included from kernel/sched/core.c:88:
   In file included from kernel/sched/sched.h:73:
   In file included from include/trace/events/power.h:10:
   include/linux/pm_qos.h:353:6: error: redefinition of 'wakeup_qos_affinity_idle_cpu'
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   include/linux/pm_qos.h:353:6: note: previous definition is here
     353 | void wakeup_qos_affinity_idle_cpu(int cpu) {}
         |      ^
   kernel/sched/core.c:7686:12: warning: array index -1 is before the beginning of the array [-Warray-bounds]
    7686 |                                        preempt_modes[preempt_dynamic_mode] : "undef",
         |                                        ^             ~~~~~~~~~~~~~~~~~~~~
   kernel/sched/core.c:7661:1: note: array 'preempt_modes' declared here
    7661 | const char *preempt_modes[] = {
         | ^
   6 warnings and 5 errors generated.


vim +/cpu_latency_qos_affinity_add +335 include/linux/pm_qos.h

   325	
   326	#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_PM)
   327	int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
   328				const cpumask_t *affinity_mask, s32 latency_value);
   329	int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
   330				s32 new_value);
   331	int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req);
   332	int cpu_latency_qos_affinity_release(struct list_head *pm_reqs);
   333	void wakeup_qos_affinity_idle_cpu(int cpu);
   334	#else
 > 335	int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
   336				const cpumask_t *affinity_mask, s32 latency_value)
   337	{
   338		return 0;
   339	}
 > 340	int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
   341				s32 new_value)
   342	{
   343		return 0;
   344	}
 > 345	int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
   346	{
   347		return 0;
   348	}
 > 349	int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
   350	{
   351		return 0;
   352	}
 > 353	void wakeup_qos_affinity_idle_cpu(int cpu) {}

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by kernel test robot 11 months, 4 weeks ago
Hi Zhongqiu,

kernel test robot noticed the following build errors:

[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on rafael-pm/bleeding-edge amd-pstate/linux-next amd-pstate/bleeding-edge linus/master v6.15-rc3 next-20250424]
[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/Zhongqiu-Han/PM-QoS-Add-support-for-CPU-affinity-mask-based-CPUs-latency-QoS/20250424-175559
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20250424095228.1112558-1-quic_zhonhan%40quicinc.com
patch subject: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
config: riscv-randconfig-001-20250425 (https://download.01.org/0day-ci/archive/20250425/202504251831.lUheTrIK-lkp@intel.com/config)
compiler: riscv32-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250425/202504251831.lUheTrIK-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/202504251831.lUheTrIK-lkp@intel.com/

All errors (new ones prefixed by >>):

   riscv32-linux-ld: sound/firewire/amdtp-am824.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/amdtp-stream.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/amdtp-am824.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/amdtp-stream.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/amdtp-am824.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/amdtp-stream.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/amdtp-am824.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/amdtp-stream.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/amdtp-am824.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/amdtp-stream.o:include/linux/pm_qos.h:353: first defined here
--
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-stream.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-stream.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-stream.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-stream.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-stream.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-pcm.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-pcm.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-pcm.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-pcm.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-pcm.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-proc.o: in function `cpu_latency_qos_affinity_add':
   sound/firewire/oxfw/oxfw-proc.c:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-proc.o: in function `cpu_latency_qos_affinity_update':
   sound/firewire/oxfw/oxfw-proc.c:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-proc.o: in function `cpu_latency_qos_affinity_remove':
   sound/firewire/oxfw/oxfw-proc.c:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-proc.o: in function `cpu_latency_qos_affinity_release':
   sound/firewire/oxfw/oxfw-proc.c:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-proc.o: in function `wakeup_qos_affinity_idle_cpu':
   sound/firewire/oxfw/oxfw-proc.c:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-midi.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-midi.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-midi.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-midi.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-midi.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-hwdep.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-hwdep.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-hwdep.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-hwdep.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-hwdep.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-spkr.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-spkr.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-spkr.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-spkr.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-spkr.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-scs1x.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-scs1x.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-scs1x.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-scs1x.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw-scs1x.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:337: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:342: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:346: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:349: first defined here
   riscv32-linux-ld: sound/firewire/oxfw/oxfw.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/oxfw/oxfw-command.o:sound/firewire/oxfw/oxfw-command.c:353: first defined here
--
   riscv32-linux-ld: sound/firewire/fireface/ff-transaction.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-transaction.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-transaction.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-transaction.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-transaction.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-midi.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-midi.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-midi.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-midi.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-midi.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-proc.o: in function `cpu_latency_qos_affinity_add':
   sound/firewire/fireface/ff-proc.c:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-proc.o: in function `cpu_latency_qos_affinity_update':
   sound/firewire/fireface/ff-proc.c:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-proc.o: in function `cpu_latency_qos_affinity_remove':
   sound/firewire/fireface/ff-proc.c:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-proc.o: in function `cpu_latency_qos_affinity_release':
   sound/firewire/fireface/ff-proc.c:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-proc.o: in function `wakeup_qos_affinity_idle_cpu':
   sound/firewire/fireface/ff-proc.c:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/amdtp-ff.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/amdtp-ff.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/amdtp-ff.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/amdtp-ff.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/amdtp-ff.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-stream.o: in function `cpu_latency_qos_affinity_add':
   sound/firewire/fireface/ff-stream.c:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-stream.o: in function `cpu_latency_qos_affinity_update':
   sound/firewire/fireface/ff-stream.c:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-stream.o: in function `cpu_latency_qos_affinity_remove':
   sound/firewire/fireface/ff-stream.c:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-stream.o: in function `cpu_latency_qos_affinity_release':
   sound/firewire/fireface/ff-stream.c:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-stream.o: in function `wakeup_qos_affinity_idle_cpu':
   sound/firewire/fireface/ff-stream.c:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-pcm.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-pcm.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-pcm.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-pcm.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-pcm.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-hwdep.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-hwdep.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-hwdep.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-hwdep.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-hwdep.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-former.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-former.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-former.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-former.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-former.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-latter.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-latter.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-latter.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-latter.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireface/ff-protocol-latter.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireface/ff.o:include/linux/pm_qos.h:353: first defined here
--
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_command.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_command.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_command.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_command.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_command.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_stream.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_stream.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_stream.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_stream.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_stream.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_proc.o: in function `cpu_latency_qos_affinity_add':
   sound/firewire/fireworks/fireworks_proc.c:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_proc.o: in function `cpu_latency_qos_affinity_update':
   sound/firewire/fireworks/fireworks_proc.c:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_proc.o: in function `cpu_latency_qos_affinity_remove':
   sound/firewire/fireworks/fireworks_proc.c:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_proc.o: in function `cpu_latency_qos_affinity_release':
   sound/firewire/fireworks/fireworks_proc.c:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_proc.o: in function `wakeup_qos_affinity_idle_cpu':
   sound/firewire/fireworks/fireworks_proc.c:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_midi.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_midi.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_midi.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_midi.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_midi.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_pcm.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_pcm.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_pcm.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_pcm.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_pcm.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_hwdep.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_hwdep.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_hwdep.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_hwdep.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks_hwdep.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/fireworks/fireworks.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/fireworks/fireworks_transaction.o:include/linux/pm_qos.h:353: first defined here
--
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-stream.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-stream.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-stream.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-stream.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-stream.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-proc.o: in function `cpu_latency_qos_affinity_add':
   sound/firewire/digi00x/digi00x-proc.c:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-proc.o: in function `cpu_latency_qos_affinity_update':
   sound/firewire/digi00x/digi00x-proc.c:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-proc.o: in function `cpu_latency_qos_affinity_remove':
   sound/firewire/digi00x/digi00x-proc.c:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-proc.o: in function `cpu_latency_qos_affinity_release':
   sound/firewire/digi00x/digi00x-proc.c:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-proc.o: in function `wakeup_qos_affinity_idle_cpu':
   sound/firewire/digi00x/digi00x-proc.c:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-pcm.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-pcm.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-pcm.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-pcm.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-pcm.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-hwdep.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-hwdep.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-hwdep.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-hwdep.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-hwdep.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-transaction.o: in function `cpu_latency_qos_affinity_add':
>> include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-transaction.o: in function `cpu_latency_qos_affinity_update':
>> include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-transaction.o: in function `cpu_latency_qos_affinity_remove':
>> include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-transaction.o: in function `cpu_latency_qos_affinity_release':
>> include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-transaction.o: in function `wakeup_qos_affinity_idle_cpu':
>> include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-midi.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-midi.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-midi.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-midi.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x-midi.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x.o: in function `cpu_latency_qos_affinity_add':
   include/linux/pm_qos.h:337: multiple definition of `cpu_latency_qos_affinity_add'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:337: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x.o: in function `cpu_latency_qos_affinity_update':
   include/linux/pm_qos.h:342: multiple definition of `cpu_latency_qos_affinity_update'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:342: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x.o: in function `cpu_latency_qos_affinity_remove':
   include/linux/pm_qos.h:346: multiple definition of `cpu_latency_qos_affinity_remove'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:346: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x.o: in function `cpu_latency_qos_affinity_release':
   include/linux/pm_qos.h:349: multiple definition of `cpu_latency_qos_affinity_release'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:349: first defined here
   riscv32-linux-ld: sound/firewire/digi00x/digi00x.o: in function `wakeup_qos_affinity_idle_cpu':
   include/linux/pm_qos.h:353: multiple definition of `wakeup_qos_affinity_idle_cpu'; sound/firewire/digi00x/amdtp-dot.o:include/linux/pm_qos.h:353: first defined here
..


vim +337 include/linux/pm_qos.h

   325	
   326	#if defined(CONFIG_CPU_IDLE) && defined(CONFIG_PM)
   327	int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
   328				const cpumask_t *affinity_mask, s32 latency_value);
   329	int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
   330				s32 new_value);
   331	int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req);
   332	int cpu_latency_qos_affinity_release(struct list_head *pm_reqs);
   333	void wakeup_qos_affinity_idle_cpu(int cpu);
   334	#else
   335	int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
   336				const cpumask_t *affinity_mask, s32 latency_value)
 > 337	{
   338		return 0;
   339	}
   340	int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
   341				s32 new_value)
 > 342	{
   343		return 0;
   344	}
   345	int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
 > 346	{
   347		return 0;
   348	}
 > 349	int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
   350	{
   351		return 0;
   352	}
 > 353	void wakeup_qos_affinity_idle_cpu(int cpu) {}

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by kernel test robot 11 months, 4 weeks ago
Hi Zhongqiu,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge amd-pstate/linux-next amd-pstate/bleeding-edge linus/master v6.15-rc3 next-20250424]
[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/Zhongqiu-Han/PM-QoS-Add-support-for-CPU-affinity-mask-based-CPUs-latency-QoS/20250424-175559
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20250424095228.1112558-1-quic_zhonhan%40quicinc.com
patch subject: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
config: i386-buildonly-randconfig-001-20250425 (https://download.01.org/0day-ci/archive/20250425/202504251805.5dAJMVbD-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250425/202504251805.5dAJMVbD-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/202504251805.5dAJMVbD-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> kernel/power/qos.c:344: warning: Function parameter or struct member 'cpu' not described in 'wakeup_qos_affinity_idle_cpu'
>> kernel/power/qos.c:368: warning: Function parameter or struct member 'latency_value' not described in 'cpu_latency_qos_affinity_add'
>> kernel/power/qos.c:368: warning: Excess function parameter 'new_value' description in 'cpu_latency_qos_affinity_add'
>> kernel/power/qos.c:479: warning: Function parameter or struct member 'pm_reqs' not described in 'cpu_latency_qos_affinity_release'
>> kernel/power/qos.c:479: warning: Excess function parameter 'pm_req' description in 'cpu_latency_qos_affinity_release'


vim +344 kernel/power/qos.c

   339	
   340	/**
   341	 * wakeup_qos_affinity_idle_cpu - break one specific cpu out of idle.
   342	 */
   343	void wakeup_qos_affinity_idle_cpu(int cpu)
 > 344	{
   345		preempt_disable();
   346		if (cpu != smp_processor_id() && cpu_online(cpu))
   347			wake_up_if_idle(cpu);
   348		preempt_enable();
   349	}
   350	
   351	/**
   352	 * cpu_latency_qos_affinity_add - Add new CPU affinity latency QoS request.
   353	 * @pm_req : Pointer to a preallocated handle.
   354	 * @affinity_mask: Mask to determine which CPUs need latency QoS.
   355	 * @new_value: New requested constraint value.
   356	 *
   357	 * Use @latency_value to initialize the request handle pointed to by @pm_req,
   358	 * insert it as a new entry to the CPU latency QoS list and recompute the
   359	 * effective QoS constraint for that list, @affinity_mask determine which CPUs
   360	 * need the latency QoS.
   361	 *
   362	 * Callers need to save the handle for later use in updates and removal of the
   363	 * QoS request represented by it.
   364	 */
   365	int cpu_latency_qos_affinity_add(struct cpu_affinity_qos_req *pm_req,
   366					 const cpumask_t *affinity_mask,
   367					 s32 latency_value)
 > 368	{
   369		int cpu;
   370		cpumask_t actual_mask;
   371		struct cpu_affinity_qos_req *cpu_pm_req;
   372		int ret = 0;
   373	
   374		if (!pm_req)
   375			pr_err("%s: invalid PM Qos request\n", __func__);
   376	
   377		INIT_LIST_HEAD(&pm_req->list);
   378	
   379		if (!affinity_mask || cpumask_empty(affinity_mask) ||
   380		    latency_value < 0) {
   381			pr_err("%s: invalid PM Qos request value\n", __func__);
   382			return -EINVAL;
   383		}
   384	
   385		for_each_cpu(cpu, affinity_mask) {
   386			cpu_pm_req = kzalloc(sizeof(struct cpu_affinity_qos_req),
   387					     GFP_KERNEL);
   388			if (!cpu_pm_req) {
   389				ret = -ENOMEM;
   390				goto out_err;
   391			}
   392			ret = dev_pm_qos_add_request(get_cpu_device(cpu),
   393						     &cpu_pm_req->req,
   394						     DEV_PM_QOS_RESUME_LATENCY,
   395						     latency_value);
   396			if (ret < 0) {
   397				pr_err("failed to add latency req for cpu%d", cpu);
   398				kfree(cpu_pm_req);
   399				goto out_err;
   400			} else if (ret > 0) {
   401				wakeup_qos_affinity_idle_cpu(cpu);
   402			}
   403	
   404			cpumask_set_cpu(cpu, &actual_mask);
   405			list_add(&cpu_pm_req->list, &pm_req->list);
   406		}
   407	
   408		pr_info("PM Qos latency: %d added on cpus %*pb\n", latency_value,
   409			cpumask_pr_args(&actual_mask));
   410	
   411		return ret;
   412	
   413	out_err:
   414		cpu_latency_qos_affinity_release(&pm_req->list);
   415		pr_err("failed to add PM QoS latency req, removed all added requests\n");
   416		return ret;
   417	}
   418	EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_add);
   419	
   420	/**
   421	 * cpu_latency_qos_affinity_update - Modify existing CPU affinity latency QoS.
   422	 * @pm_req : QoS request to update for CPUs with affinity masks.
   423	 * @new_value: New requested constraint value.
   424	 *
   425	 * Use @new_value to update the QoS request represented by @pm_req in the CPU
   426	 * latency QoS list along with updating the effective constraint value for that
   427	 * list.
   428	 */
   429	int cpu_latency_qos_affinity_update(struct cpu_affinity_qos_req *pm_req,
   430					    s32 new_value)
   431	{
   432		struct cpu_affinity_qos_req *cpu_pm_req, *next;
   433		int ret = 0;
   434	
   435		if (!pm_req || new_value < 0 || list_empty(&pm_req->list)) {
   436			pr_err("%s: invalid PM Qos request value\n", __func__);
   437			return -EINVAL;
   438		}
   439	
   440		list_for_each_entry_safe(cpu_pm_req, next, &pm_req->list, list) {
   441			ret = dev_pm_qos_update_request(&cpu_pm_req->req, new_value);
   442			if (ret < 0) {
   443				pr_err("PM QoS qos update failed for %s\n",
   444				       dev_name(cpu_pm_req->req.dev));
   445			} else if (ret > 0) {
   446				wakeup_qos_affinity_idle_cpu(cpu_pm_req->req.dev->id);
   447			}
   448		}
   449	
   450		return ret;
   451	}
   452	EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_update);
   453	
   454	/**
   455	 * cpu_latency_qos_affinity_remove - Remove existing CPU affinity latency QoS.
   456	 * @pm_req: QoS request to update for CPUs with affinity masks.
   457	 *
   458	 * Remove the CPU latency QoS request represented by @pm_req from the CPU latency
   459	 * QoS list.
   460	 */
   461	int cpu_latency_qos_affinity_remove(struct cpu_affinity_qos_req *pm_req)
   462	{
   463		if (!pm_req || list_empty(&pm_req->list)) {
   464			pr_err("%s: invalid PM Qos request value\n", __func__);
   465			return -EINVAL;
   466		}
   467	
   468		return cpu_latency_qos_affinity_release(&pm_req->list);
   469	}
   470	EXPORT_SYMBOL_GPL(cpu_latency_qos_affinity_remove);
   471	
   472	/**
   473	 * cpu_latency_qos_affinity_release - Release pm_reqs latency QoS resource.
   474	 * @pm_req: QoS request to remove.
   475	 *
   476	 * Release pm_reqs managed CPU affinity latency QoS resource.
   477	 */
   478	int cpu_latency_qos_affinity_release(struct list_head *pm_reqs)
 > 479	{
   480		int ret = 0;
   481		struct cpu_affinity_qos_req *cpu_pm_req, *next;
   482	
   483		list_for_each_entry_safe(cpu_pm_req, next, pm_reqs, list) {
   484			ret = dev_pm_qos_remove_request(&cpu_pm_req->req);
   485			if (ret < 0)
   486				pr_err("failed to remove qos request for %s\n",
   487				       dev_name(cpu_pm_req->req.dev));
   488			list_del(&cpu_pm_req->list);
   489			kfree(cpu_pm_req);
   490		}
   491	
   492		return ret;
   493	}
   494	#endif /* CONFIG_PM */
   495	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Re: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by Christian Loehle 12 months ago
On 4/24/25 10:52, Zhongqiu Han wrote:
> Currently, the PM QoS framework supports global CPU latency QoS and
> per-device CPU latency QoS requests. An example of using global CPU
> latency QoS is a commit 2777e73fc154 ("scsi: ufs: core: Add CPU latency
> QoS support for UFS driver") that improved random io performance by 15%
> for ufs on specific device platform.
> 
> However, this prevents all CPUs in the system from entering C states.
> Typically, some threads or drivers know which specific CPUs they are
> interested in. For example, drivers with IRQ affinity only want interrupts
> to wake up and be handled on specific CPUs. Similarly, kernel thread bound
> to specific CPUs through affinity only care about the latency of those
> particular CPUs.
> 
> This patch introduces support for partial CPUs PM QoS using a CPU affinity
> mask, allowing flexible and more precise latency QoS settings for specific
> CPUs. This can help save power, especially on heterogeneous platforms with
> big and little cores, as well as some power-conscious embedded systems for
> example:
> 
>                   driver A       rt kthread B      module C
> QoS cpu mask:       0-3              2-5              6-7
> target latency:     20               30               50
>                     |                |                |
>                     v                v                v
>                     +---------------------------------+
>                     |        PM  QoS  Framework       |
>                     +---------------------------------+
>                     |                |                |
>                     v                v                v
> cpu mask:          0-3            2-3,4-5            6-7
> actual latency:    20             20, 30             50
> 
> Implement this support based on per-device CPU latency PM QoS.
> 
> Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com>

I like the idea!
The interface does need an in-tree user, why not convert the UFS driver?
Re: [PATCH] PM: QoS: Add support for CPU affinity mask-based CPUs latency QoS
Posted by Zhongqiu Han 11 months, 4 weeks ago
On 4/24/2025 6:25 PM, Christian Loehle wrote:
> On 4/24/25 10:52, Zhongqiu Han wrote:
>> Currently, the PM QoS framework supports global CPU latency QoS and
>> per-device CPU latency QoS requests. An example of using global CPU
>> latency QoS is a commit 2777e73fc154 ("scsi: ufs: core: Add CPU latency
>> QoS support for UFS driver") that improved random io performance by 15%
>> for ufs on specific device platform.
>>
>> However, this prevents all CPUs in the system from entering C states.
>> Typically, some threads or drivers know which specific CPUs they are
>> interested in. For example, drivers with IRQ affinity only want interrupts
>> to wake up and be handled on specific CPUs. Similarly, kernel thread bound
>> to specific CPUs through affinity only care about the latency of those
>> particular CPUs.
>>
>> This patch introduces support for partial CPUs PM QoS using a CPU affinity
>> mask, allowing flexible and more precise latency QoS settings for specific
>> CPUs. This can help save power, especially on heterogeneous platforms with
>> big and little cores, as well as some power-conscious embedded systems for
>> example:
>>
>>                    driver A       rt kthread B      module C
>> QoS cpu mask:       0-3              2-5              6-7
>> target latency:     20               30               50
>>                      |                |                |
>>                      v                v                v
>>                      +---------------------------------+
>>                      |        PM  QoS  Framework       |
>>                      +---------------------------------+
>>                      |                |                |
>>                      v                v                v
>> cpu mask:          0-3            2-3,4-5            6-7
>> actual latency:    20             20, 30             50
>>
>> Implement this support based on per-device CPU latency PM QoS.
>>
>> Signed-off-by: Zhongqiu Han <quic_zhonhan@quicinc.com>
> 
> I like the idea!
> The interface does need an in-tree user, why not convert the UFS driver?
> 

Thanks Christian for the review.

As far as I know, the UFS IRQ affinity varies across different
platforms, so a universal solution is needed (we need to investigate
whether there is already a solution or add parameters like intr_mask to
represent the IRQ affinity mask). Let me investigate it, or raise other
user patches as a patch series in PATCH v2 as soon as possible. Thanks


-- 
Thx and BRs,
Zhongqiu Han