Re: [PATCH 12/12] iio: adc: adi-axi-adc: move to backend framework

From: kernel test robot
Date: Tue Nov 21 2023 - 18:27:48 EST


Hi Nuno,

kernel test robot noticed the following build warnings:

[auto build test WARNING on jic23-iio/togreg]
[also build test WARNING on driver-core/driver-core-testing driver-core/driver-core-next driver-core/driver-core-linus robh/for-next linus/master v6.7-rc2 next-20231121]
[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/Nuno-Sa-via-B4-Relay/driver-core-allow-modifying-device_links-flags/20231121-182010
base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
patch link: https://lore.kernel.org/r/20231121-dev-iio-backend-v1-12-6a3d542eba35%40analog.com
patch subject: [PATCH 12/12] iio: adc: adi-axi-adc: move to backend framework
config: i386-randconfig-141-20231122 (https://download.01.org/0day-ci/archive/20231122/202311220748.T1FnZwoy-lkp@xxxxxxxxx/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231122/202311220748.T1FnZwoy-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311220748.T1FnZwoy-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> drivers/iio/industrialio-backend.c:123: warning: expecting prototype for iio_backend_chan_enable(). Prototype was for iio_backend_enable() instead
>> drivers/iio/industrialio-backend.c:242: warning: Function parameter or member 'back' not described in 'iio_backend_get_priv'
>> drivers/iio/industrialio-backend.c:274: warning: Function parameter or member 'dev' not described in 'devm_iio_backend_register'
>> drivers/iio/industrialio-backend.c:274: warning: Function parameter or member 'ops' not described in 'devm_iio_backend_register'
>> drivers/iio/industrialio-backend.c:274: warning: Function parameter or member 'priv' not described in 'devm_iio_backend_register'


vim +242 drivers/iio/industrialio-backend.c

67915cd5ae2cc11 Nuno Sa 2023-11-21 114
67915cd5ae2cc11 Nuno Sa 2023-11-21 115 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 116 * iio_backend_chan_enable - Enable the backend.
67915cd5ae2cc11 Nuno Sa 2023-11-21 117 * @back: Backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 118 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 119 * RETURNS:
67915cd5ae2cc11 Nuno Sa 2023-11-21 120 * 0 on success, negative error number on failure.
67915cd5ae2cc11 Nuno Sa 2023-11-21 121 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 122 int iio_backend_enable(struct iio_backend *back)
67915cd5ae2cc11 Nuno Sa 2023-11-21 @123 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 124 return iio_backend_op_call(back, enable);
67915cd5ae2cc11 Nuno Sa 2023-11-21 125 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 126 EXPORT_SYMBOL_GPL(iio_backend_enable);
67915cd5ae2cc11 Nuno Sa 2023-11-21 127
67915cd5ae2cc11 Nuno Sa 2023-11-21 128 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 129 * iio_backend_disable - Disable the backend.
67915cd5ae2cc11 Nuno Sa 2023-11-21 130 * @back: Backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 131 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 132 void iio_backend_disable(struct iio_backend *back)
67915cd5ae2cc11 Nuno Sa 2023-11-21 133 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 134 iio_backend_void_op_call(back, disable);
67915cd5ae2cc11 Nuno Sa 2023-11-21 135 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 136 EXPORT_SYMBOL_GPL(iio_backend_disable);
67915cd5ae2cc11 Nuno Sa 2023-11-21 137
67915cd5ae2cc11 Nuno Sa 2023-11-21 138 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 139 * iio_backend_data_format_set - Configure the channel data format
67915cd5ae2cc11 Nuno Sa 2023-11-21 140 * @back: Backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 141 * @chan: Channel number.
67915cd5ae2cc11 Nuno Sa 2023-11-21 142 * @data: Data format.
67915cd5ae2cc11 Nuno Sa 2023-11-21 143 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 144 * Properly configure a channel with respect to the expected data format. A
67915cd5ae2cc11 Nuno Sa 2023-11-21 145 * @struct iio_backend_data_fmt must be passed with the settings.
67915cd5ae2cc11 Nuno Sa 2023-11-21 146 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 147 * RETURNS:
67915cd5ae2cc11 Nuno Sa 2023-11-21 148 * 0 on success, negative error number on failure
67915cd5ae2cc11 Nuno Sa 2023-11-21 149 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 150 int iio_backend_data_format_set(struct iio_backend *back, unsigned int chan,
67915cd5ae2cc11 Nuno Sa 2023-11-21 151 const struct iio_backend_data_fmt *data)
67915cd5ae2cc11 Nuno Sa 2023-11-21 152 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 153 if (!data || data->type >= IIO_BACKEND_DATA_TYPE_MAX)
67915cd5ae2cc11 Nuno Sa 2023-11-21 154 return -EINVAL;
67915cd5ae2cc11 Nuno Sa 2023-11-21 155
67915cd5ae2cc11 Nuno Sa 2023-11-21 156 return iio_backend_op_call(back, data_format_set, chan, data);
67915cd5ae2cc11 Nuno Sa 2023-11-21 157 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 158 EXPORT_SYMBOL_GPL(iio_backend_data_format_set);
67915cd5ae2cc11 Nuno Sa 2023-11-21 159
67915cd5ae2cc11 Nuno Sa 2023-11-21 160 static void iio_backend_free(struct kref *ref)
67915cd5ae2cc11 Nuno Sa 2023-11-21 161 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 162 struct iio_backend *back = container_of(ref, struct iio_backend, ref);
67915cd5ae2cc11 Nuno Sa 2023-11-21 163
67915cd5ae2cc11 Nuno Sa 2023-11-21 164 kfree(back);
67915cd5ae2cc11 Nuno Sa 2023-11-21 165 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 166
67915cd5ae2cc11 Nuno Sa 2023-11-21 167 static void iio_backend_release(void *arg)
67915cd5ae2cc11 Nuno Sa 2023-11-21 168 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 169 struct iio_backend *back = arg;
67915cd5ae2cc11 Nuno Sa 2023-11-21 170
67915cd5ae2cc11 Nuno Sa 2023-11-21 171 module_put(back->owner);
67915cd5ae2cc11 Nuno Sa 2023-11-21 172 kref_put(&back->ref, iio_backend_free);
67915cd5ae2cc11 Nuno Sa 2023-11-21 173 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 174
67915cd5ae2cc11 Nuno Sa 2023-11-21 175 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 176 * devm_iio_backend_get - Get a backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 177 * @dev: Device where to look for the backend.
67915cd5ae2cc11 Nuno Sa 2023-11-21 178 * @name: Backend name.
67915cd5ae2cc11 Nuno Sa 2023-11-21 179 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 180 * Get's the backend associated with @dev.
67915cd5ae2cc11 Nuno Sa 2023-11-21 181 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 182 * RETURNS:
67915cd5ae2cc11 Nuno Sa 2023-11-21 183 * A backend pointer, negative error pointer otherwise.
67915cd5ae2cc11 Nuno Sa 2023-11-21 184 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 185 struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name)
67915cd5ae2cc11 Nuno Sa 2023-11-21 186 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 187 struct fwnode_handle *fwnode;
67915cd5ae2cc11 Nuno Sa 2023-11-21 188 struct iio_backend *back;
67915cd5ae2cc11 Nuno Sa 2023-11-21 189 int index = 0, ret;
67915cd5ae2cc11 Nuno Sa 2023-11-21 190
67915cd5ae2cc11 Nuno Sa 2023-11-21 191 if (name) {
67915cd5ae2cc11 Nuno Sa 2023-11-21 192 index = device_property_match_string(dev, "io-backends-names",
67915cd5ae2cc11 Nuno Sa 2023-11-21 193 name);
67915cd5ae2cc11 Nuno Sa 2023-11-21 194 if (index < 0)
67915cd5ae2cc11 Nuno Sa 2023-11-21 195 return ERR_PTR(index);
67915cd5ae2cc11 Nuno Sa 2023-11-21 196 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 197
67915cd5ae2cc11 Nuno Sa 2023-11-21 198 fwnode = fwnode_find_reference(dev_fwnode(dev), "io-backends", index);
67915cd5ae2cc11 Nuno Sa 2023-11-21 199 if (IS_ERR(fwnode)) {
67915cd5ae2cc11 Nuno Sa 2023-11-21 200 dev_err(dev, "Cannot get Firmware reference\n");
67915cd5ae2cc11 Nuno Sa 2023-11-21 201 return ERR_CAST(fwnode);
67915cd5ae2cc11 Nuno Sa 2023-11-21 202 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 203
67915cd5ae2cc11 Nuno Sa 2023-11-21 204 guard(mutex)(&iio_back_lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 205 list_for_each_entry(back, &iio_back_list, entry) {
67915cd5ae2cc11 Nuno Sa 2023-11-21 206 struct device_link *link;
67915cd5ae2cc11 Nuno Sa 2023-11-21 207
67915cd5ae2cc11 Nuno Sa 2023-11-21 208 if (!device_match_fwnode(back->dev, fwnode))
67915cd5ae2cc11 Nuno Sa 2023-11-21 209 continue;
67915cd5ae2cc11 Nuno Sa 2023-11-21 210
67915cd5ae2cc11 Nuno Sa 2023-11-21 211 fwnode_handle_put(fwnode);
67915cd5ae2cc11 Nuno Sa 2023-11-21 212 kref_get(&back->ref);
67915cd5ae2cc11 Nuno Sa 2023-11-21 213 if (!try_module_get(back->owner)) {
67915cd5ae2cc11 Nuno Sa 2023-11-21 214 dev_err(dev, "Cannot get module reference\n");
67915cd5ae2cc11 Nuno Sa 2023-11-21 215 return ERR_PTR(-ENODEV);
67915cd5ae2cc11 Nuno Sa 2023-11-21 216 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 217
67915cd5ae2cc11 Nuno Sa 2023-11-21 218 ret = devm_add_action_or_reset(dev, iio_backend_release, back);
67915cd5ae2cc11 Nuno Sa 2023-11-21 219 if (ret)
67915cd5ae2cc11 Nuno Sa 2023-11-21 220 return ERR_PTR(ret);
67915cd5ae2cc11 Nuno Sa 2023-11-21 221
67915cd5ae2cc11 Nuno Sa 2023-11-21 222 link = device_link_add(dev, back->dev,
67915cd5ae2cc11 Nuno Sa 2023-11-21 223 DL_FLAG_AUTOREMOVE_CONSUMER);
67915cd5ae2cc11 Nuno Sa 2023-11-21 224 if (!link)
67915cd5ae2cc11 Nuno Sa 2023-11-21 225 dev_warn(dev, "Could not link to supplier(%s)\n",
67915cd5ae2cc11 Nuno Sa 2023-11-21 226 dev_name(back->dev));
67915cd5ae2cc11 Nuno Sa 2023-11-21 227
67915cd5ae2cc11 Nuno Sa 2023-11-21 228 dev_dbg(dev, "Found backend(%s) device\n", dev_name(back->dev));
67915cd5ae2cc11 Nuno Sa 2023-11-21 229 return back;
67915cd5ae2cc11 Nuno Sa 2023-11-21 230 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 231
67915cd5ae2cc11 Nuno Sa 2023-11-21 232 fwnode_handle_put(fwnode);
67915cd5ae2cc11 Nuno Sa 2023-11-21 233 return ERR_PTR(-EPROBE_DEFER);
67915cd5ae2cc11 Nuno Sa 2023-11-21 234 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 235 EXPORT_SYMBOL_GPL(devm_iio_backend_get);
67915cd5ae2cc11 Nuno Sa 2023-11-21 236
67915cd5ae2cc11 Nuno Sa 2023-11-21 237 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 238 * iio_backend_get_priv - Get driver private data
67915cd5ae2cc11 Nuno Sa 2023-11-21 239 * @back Backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 240 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 241 void *iio_backend_get_priv(const struct iio_backend *back)
67915cd5ae2cc11 Nuno Sa 2023-11-21 @242 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 243 return back->priv;
67915cd5ae2cc11 Nuno Sa 2023-11-21 244 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 245 EXPORT_SYMBOL_GPL(iio_backend_get_priv);
67915cd5ae2cc11 Nuno Sa 2023-11-21 246
67915cd5ae2cc11 Nuno Sa 2023-11-21 247 static void iio_backend_unregister(void *arg)
67915cd5ae2cc11 Nuno Sa 2023-11-21 248 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 249 struct iio_backend *back = arg;
67915cd5ae2cc11 Nuno Sa 2023-11-21 250
67915cd5ae2cc11 Nuno Sa 2023-11-21 251 mutex_lock(&iio_back_lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 252 list_del(&back->entry);
67915cd5ae2cc11 Nuno Sa 2023-11-21 253 mutex_unlock(&iio_back_lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 254
67915cd5ae2cc11 Nuno Sa 2023-11-21 255 mutex_lock(&back->lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 256 back->ops = NULL;
67915cd5ae2cc11 Nuno Sa 2023-11-21 257 mutex_unlock(&back->lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 258 kref_put(&back->ref, iio_backend_free);
67915cd5ae2cc11 Nuno Sa 2023-11-21 259 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 260
67915cd5ae2cc11 Nuno Sa 2023-11-21 261 /**
67915cd5ae2cc11 Nuno Sa 2023-11-21 262 * devm_iio_backend_register - Register a new backend device
67915cd5ae2cc11 Nuno Sa 2023-11-21 263 * @dev Backend device being registered.
67915cd5ae2cc11 Nuno Sa 2023-11-21 264 * @ops Backend ops
67915cd5ae2cc11 Nuno Sa 2023-11-21 265 * @priv Device private data.
67915cd5ae2cc11 Nuno Sa 2023-11-21 266 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 267 * @ops and @priv are both mandatory. Not providing them results in -EINVAL.
67915cd5ae2cc11 Nuno Sa 2023-11-21 268 *
67915cd5ae2cc11 Nuno Sa 2023-11-21 269 * RETURNS:
67915cd5ae2cc11 Nuno Sa 2023-11-21 270 * 0 on success, negative error number on failure.
67915cd5ae2cc11 Nuno Sa 2023-11-21 271 */
67915cd5ae2cc11 Nuno Sa 2023-11-21 272 int devm_iio_backend_register(struct device *dev,
67915cd5ae2cc11 Nuno Sa 2023-11-21 273 const struct iio_backend_ops *ops, void *priv)
67915cd5ae2cc11 Nuno Sa 2023-11-21 @274 {
67915cd5ae2cc11 Nuno Sa 2023-11-21 275 struct iio_backend *back;
67915cd5ae2cc11 Nuno Sa 2023-11-21 276
67915cd5ae2cc11 Nuno Sa 2023-11-21 277 if (!ops || !priv) {
67915cd5ae2cc11 Nuno Sa 2023-11-21 278 dev_err(dev, "No backend ops or private data given\n");
67915cd5ae2cc11 Nuno Sa 2023-11-21 279 return -EINVAL;
67915cd5ae2cc11 Nuno Sa 2023-11-21 280 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 281
67915cd5ae2cc11 Nuno Sa 2023-11-21 282 back = kzalloc(sizeof(*back), GFP_KERNEL);
67915cd5ae2cc11 Nuno Sa 2023-11-21 283 if (!back)
67915cd5ae2cc11 Nuno Sa 2023-11-21 284 return -ENOMEM;
67915cd5ae2cc11 Nuno Sa 2023-11-21 285
67915cd5ae2cc11 Nuno Sa 2023-11-21 286 kref_init(&back->ref);
67915cd5ae2cc11 Nuno Sa 2023-11-21 287 mutex_init(&back->lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 288 back->ops = ops;
67915cd5ae2cc11 Nuno Sa 2023-11-21 289 back->owner = dev->driver->owner;
67915cd5ae2cc11 Nuno Sa 2023-11-21 290 back->dev = dev;
67915cd5ae2cc11 Nuno Sa 2023-11-21 291 back->priv = priv;
67915cd5ae2cc11 Nuno Sa 2023-11-21 292 mutex_lock(&iio_back_lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 293 list_add(&back->entry, &iio_back_list);
67915cd5ae2cc11 Nuno Sa 2023-11-21 294 mutex_unlock(&iio_back_lock);
67915cd5ae2cc11 Nuno Sa 2023-11-21 295
67915cd5ae2cc11 Nuno Sa 2023-11-21 296 return devm_add_action_or_reset(dev, iio_backend_unregister, back);
67915cd5ae2cc11 Nuno Sa 2023-11-21 297 }
67915cd5ae2cc11 Nuno Sa 2023-11-21 298 EXPORT_SYMBOL_GPL(devm_iio_backend_register);
67915cd5ae2cc11 Nuno Sa 2023-11-21 299

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