All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 4687/6082] kernel/power/energy_model.c:247:45: sparse: sparse: incorrect type in argument 2 (different address spaces)
@ 2024-02-12 22:19 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-02-12 22:19 UTC (permalink / raw)
  To: Lukasz Luba
  Cc: oe-kbuild-all, Linux Memory Management List, Rafael J. Wysocki,
	Dietmar Eggemann

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   ae00c445390b349e070a64dc62f08aa878db7248
commit: 977230d5d50314f9920d3ee6348773d8babbfb58 [4687/6082] PM: EM: Introduce em_dev_update_perf_domain() for EM updates
config: x86_64-randconfig-122-20240211 (https://download.01.org/0day-ci/archive/20240213/202402130633.bfNCWVeh-lkp@intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240213/202402130633.bfNCWVeh-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/202402130633.bfNCWVeh-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
   kernel/power/energy_model.c:113:15: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct em_perf_table [noderef] __rcu *table @@     got struct em_perf_table * @@
   kernel/power/energy_model.c:113:15: sparse:     expected struct em_perf_table [noderef] __rcu *table
   kernel/power/energy_model.c:113:15: sparse:     got struct em_perf_table *
   kernel/power/energy_model.c:114:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *objp @@     got struct em_perf_table [noderef] __rcu *table @@
   kernel/power/energy_model.c:114:15: sparse:     expected void const *objp
   kernel/power/energy_model.c:114:15: sparse:     got struct em_perf_table [noderef] __rcu *table
   kernel/power/energy_model.c:122:15: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct em_perf_table [noderef] __rcu *table @@     got struct em_perf_table * @@
   kernel/power/energy_model.c:122:15: sparse:     expected struct em_perf_table [noderef] __rcu *table
   kernel/power/energy_model.c:122:15: sparse:     got struct em_perf_table *
   kernel/power/energy_model.c:124:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct callback_head *head @@     got struct callback_head [noderef] __rcu * @@
   kernel/power/energy_model.c:124:19: sparse:     expected struct callback_head *head
   kernel/power/energy_model.c:124:19: sparse:     got struct callback_head [noderef] __rcu *
   kernel/power/energy_model.c:135:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct kref *kref @@     got struct kref [noderef] __rcu * @@
   kernel/power/energy_model.c:135:19: sparse:     expected struct kref *kref
   kernel/power/energy_model.c:135:19: sparse:     got struct kref [noderef] __rcu *
   kernel/power/energy_model.c:153:15: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct em_perf_table [noderef] __rcu *table @@     got void * @@
   kernel/power/energy_model.c:153:15: sparse:     expected struct em_perf_table [noderef] __rcu *table
   kernel/power/energy_model.c:153:15: sparse:     got void *
   kernel/power/energy_model.c:157:20: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct kref *kref @@     got struct kref [noderef] __rcu * @@
   kernel/power/energy_model.c:157:20: sparse:     expected struct kref *kref
   kernel/power/energy_model.c:157:20: sparse:     got struct kref [noderef] __rcu *
   kernel/power/energy_model.c:242:19: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct kref *kref @@     got struct kref [noderef] __rcu * @@
   kernel/power/energy_model.c:242:19: sparse:     expected struct kref *kref
   kernel/power/energy_model.c:242:19: sparse:     got struct kref [noderef] __rcu *
>> kernel/power/energy_model.c:247:45: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct em_perf_state *table @@     got struct em_perf_state [noderef] __rcu * @@
   kernel/power/energy_model.c:247:45: sparse:     expected struct em_perf_state *table
   kernel/power/energy_model.c:247:45: sparse:     got struct em_perf_state [noderef] __rcu *
   kernel/power/energy_model.c:267:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const * @@     got struct em_perf_state [noderef] __rcu * @@
   kernel/power/energy_model.c:267:9: sparse:     expected void const *
   kernel/power/energy_model.c:267:9: sparse:     got struct em_perf_state [noderef] __rcu *
   kernel/power/energy_model.c:267:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const * @@     got struct em_perf_state [noderef] __rcu * @@
   kernel/power/energy_model.c:267:9: sparse:     expected void const *
   kernel/power/energy_model.c:267:9: sparse:     got struct em_perf_state [noderef] __rcu *
   kernel/power/energy_model.c:267:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void *p @@     got struct em_perf_state [noderef] __rcu * @@
   kernel/power/energy_model.c:267:9: sparse:     expected void *p
   kernel/power/energy_model.c:267:9: sparse:     got struct em_perf_state [noderef] __rcu *

vim +247 kernel/power/energy_model.c

   137	
   138	/**
   139	 * em_table_alloc() - Allocate a new EM table
   140	 * @pd		: EM performance domain for which this must be done
   141	 *
   142	 * Allocate a new EM table and initialize its kref to indicate that it
   143	 * has a user.
   144	 * Returns allocated table or NULL.
   145	 */
   146	struct em_perf_table __rcu *em_table_alloc(struct em_perf_domain *pd)
   147	{
   148		struct em_perf_table __rcu *table;
   149		int table_size;
   150	
   151		table_size = sizeof(struct em_perf_state) * pd->nr_perf_states;
   152	
 > 153		table = kzalloc(sizeof(*table) + table_size, GFP_KERNEL);
   154		if (!table)
   155			return NULL;
   156	
   157		kref_init(&table->kref);
   158	
   159		return table;
   160	}
   161	
   162	static int em_compute_costs(struct device *dev, struct em_perf_state *table,
   163				    struct em_data_callback *cb, int nr_states,
   164				    unsigned long flags)
   165	{
   166		unsigned long prev_cost = ULONG_MAX;
   167		u64 fmax;
   168		int i, ret;
   169	
   170		/* Compute the cost of each performance state. */
   171		fmax = (u64) table[nr_states - 1].frequency;
   172		for (i = nr_states - 1; i >= 0; i--) {
   173			unsigned long power_res, cost;
   174	
   175			if ((flags & EM_PERF_DOMAIN_ARTIFICIAL) && cb->get_cost) {
   176				ret = cb->get_cost(dev, table[i].frequency, &cost);
   177				if (ret || !cost || cost > EM_MAX_POWER) {
   178					dev_err(dev, "EM: invalid cost %lu %d\n",
   179						cost, ret);
   180					return -EINVAL;
   181				}
   182			} else {
   183				power_res = table[i].power;
   184				cost = div64_u64(fmax * power_res, table[i].frequency);
   185			}
   186	
   187			table[i].cost = cost;
   188	
   189			if (table[i].cost >= prev_cost) {
   190				table[i].flags = EM_PERF_STATE_INEFFICIENT;
   191				dev_dbg(dev, "EM: OPP:%lu is inefficient\n",
   192					table[i].frequency);
   193			} else {
   194				prev_cost = table[i].cost;
   195			}
   196		}
   197	
   198		return 0;
   199	}
   200	
   201	static int em_allocate_perf_table(struct em_perf_domain *pd,
   202					  int nr_states)
   203	{
   204		pd->table = kcalloc(nr_states, sizeof(struct em_perf_state),
   205				    GFP_KERNEL);
   206		if (!pd->table)
   207			return -ENOMEM;
   208	
   209		return 0;
   210	}
   211	
   212	/**
   213	 * em_dev_update_perf_domain() - Update runtime EM table for a device
   214	 * @dev		: Device for which the EM is to be updated
   215	 * @new_table	: The new EM table that is going to be used from now
   216	 *
   217	 * Update EM runtime modifiable table for the @dev using the provided @table.
   218	 *
   219	 * This function uses a mutex to serialize writers, so it must not be called
   220	 * from a non-sleeping context.
   221	 *
   222	 * Return 0 on success or an error code on failure.
   223	 */
   224	int em_dev_update_perf_domain(struct device *dev,
   225				      struct em_perf_table __rcu *new_table)
   226	{
   227		struct em_perf_table __rcu *old_table;
   228		struct em_perf_domain *pd;
   229	
   230		if (!dev)
   231			return -EINVAL;
   232	
   233		/* Serialize update/unregister or concurrent updates */
   234		mutex_lock(&em_pd_mutex);
   235	
   236		if (!dev->em_pd) {
   237			mutex_unlock(&em_pd_mutex);
   238			return -EINVAL;
   239		}
   240		pd = dev->em_pd;
   241	
   242		kref_get(&new_table->kref);
   243	
   244		old_table = pd->em_table;
   245		rcu_assign_pointer(pd->em_table, new_table);
   246	
 > 247		em_cpufreq_update_efficiencies(dev, new_table->state);
   248	
   249		em_table_free(old_table);
   250	
   251		mutex_unlock(&em_pd_mutex);
   252		return 0;
   253	}
   254	EXPORT_SYMBOL_GPL(em_dev_update_perf_domain);
   255	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-02-12 22:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-12 22:19 [linux-next:master 4687/6082] kernel/power/energy_model.c:247:45: sparse: sparse: incorrect type in argument 2 (different address spaces) kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.