Linux-Next discussions
 help / color / mirror / Atom feed
* linux-next: manual merge of the kthread tree with the i2c-host-fixes tree
@ 2026-06-09 15:24 Mark Brown
  2026-06-09 15:35 ` Wolfram Sang
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Brown @ 2026-06-09 15:24 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Andi Shyti, Johan Hovold, Linux Kernel Mailing List,
	Linux Next Mailing List, Wolfram Sang

[-- Attachment #1: Type: text/plain, Size: 5442 bytes --]

Hi all,

Today's linux-next merge of the kthread tree got a conflict in:

  drivers/i2c/i2c-core-base.c

between commit:

  84762906e2666d ("i2c: core: fix adapter debugfs creation")

from the i2c-host-fixes tree and commits:

  07d5fb537928aa ("i2c: core: fix adapter debugfs creation")
  a378a2bc73e3b7 ("i2c: core: clean up bus id allocation")

from the kthread tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

diff --combined drivers/i2c/i2c-core-base.c
index 764e293236b572,31e956bb3b7222..00000000000000
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@@ -1516,23 -1516,48 +1516,48 @@@ int i2c_handle_smbus_host_notify(struc
  }
  EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify);
  
+ static int i2c_allocate_adapter_id(struct i2c_adapter *adap)
+ {
+ 	int id, start, end;
+ 
+ 	if (adap->nr == -1) {
+ 		start = __i2c_first_dynamic_bus_num;
+ 		end = 0;
+ 	} else {
+ 		start = adap->nr;
+ 		end = adap->nr + 1;
+ 	}
+ 
+ 	mutex_lock(&core_lock);
+ 	id = idr_alloc(&i2c_adapter_idr, NULL, start, end, GFP_KERNEL);
+ 	mutex_unlock(&core_lock);
+ 	if (id < 0) {
+ 		if (adap->nr != -1 && id == -ENOSPC)
+ 			id = -EBUSY;
+ 		pr_err("adapter '%s': failed to allocate id: %d\n", adap->name, id);
+ 		return id;
+ 	}
+ 
+ 	adap->nr = id;
+ 
+ 	return 0;
+ }
+ 
  static int i2c_register_adapter(struct i2c_adapter *adap)
  {
- 	int res = -EINVAL;
+ 	int res;
  
  	/* Can't register until after driver model init */
- 	if (WARN_ON(!is_registered)) {
- 		res = -EAGAIN;
- 		goto out_list;
- 	}
+ 	if (WARN_ON(!is_registered))
+ 		return -EAGAIN;
  
  	/* Sanity checks */
  	if (WARN(!adap->name[0], "i2c adapter has no name"))
- 		goto out_list;
+ 		return -EINVAL;
  
  	if (!adap->algo) {
  		pr_err("adapter '%s': no algo supplied!\n", adap->name);
- 		goto out_list;
+ 		return -EINVAL;
  	}
  
  	if (!adap->lock_ops)
@@@ -1553,12 -1578,16 +1578,16 @@@
  	if (res) {
  		pr_err("adapter '%s': can't create Host Notify IRQs (%d)\n",
  		       adap->name, res);
- 		goto out_list;
+ 		return res;
  	}
  
+ 	res = i2c_allocate_adapter_id(adap);
+ 	if (res)
+ 		goto err_remove_irq_domain;
+ 
  	res = dev_set_name(&adap->dev, "i2c-%d", adap->nr);
  	if (res)
- 		goto err_remove_irq_domain;
+ 		goto err_free_id;
  
  	adap->dev.bus = &i2c_bus_type;
  	adap->dev.type = &i2c_adapter_type;
@@@ -1591,7 -1620,7 +1620,11 @@@
  
  	res = i2c_setup_smbus_alert(adap);
  	if (res)
++<<<<<<< HEAD
 +		goto out_reg;
++=======
+ 		goto err_deregister_clients;
++>>>>>>> i2c/i2c/for-next
  
  	dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
  
@@@ -1610,7 -1639,7 +1643,11 @@@
  
  	return 0;
  
++<<<<<<< HEAD
 +out_reg:
++=======
+ err_deregister_clients:
++>>>>>>> i2c/i2c/for-next
  	i2c_deregister_clients(adap);
  	device_del(&adap->dev);
  err_replace_id:
@@@ -1623,36 -1652,17 +1660,46 @@@ err_put_adap
  	init_completion(&adap->dev_released);
  	put_device(&adap->dev);
  	wait_for_completion(&adap->dev_released);
++<<<<<<< HEAD
 +err_remove_irq_domain:
 +	i2c_host_notify_irq_teardown(adap);
 +out_list:
++=======
+ err_free_id:
++>>>>>>> i2c/i2c/for-next
  	mutex_lock(&core_lock);
  	idr_remove(&i2c_adapter_idr, adap->nr);
  	mutex_unlock(&core_lock);
+ err_remove_irq_domain:
+ 	i2c_host_notify_irq_teardown(adap);
+ 
  	return res;
  }
  
  /**
++<<<<<<< HEAD
 + * __i2c_add_numbered_adapter - i2c_add_numbered_adapter where nr is never -1
 + * @adap: the adapter to register (with adap->nr initialized)
 + * Context: can sleep
 + *
 + * See i2c_add_numbered_adapter() for details.
 + */
 +static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
 +{
 +	int id;
 +
 +	mutex_lock(&core_lock);
 +	id = idr_alloc(&i2c_adapter_idr, NULL, adap->nr, adap->nr + 1, GFP_KERNEL);
 +	mutex_unlock(&core_lock);
 +	if (WARN(id < 0, "couldn't get idr"))
 +		return id == -ENOSPC ? -EBUSY : id;
 +
 +	return i2c_register_adapter(adap);
 +}
 +
 +/**
++=======
++>>>>>>> i2c/i2c/for-next
   * i2c_add_adapter - declare i2c adapter, use dynamic bus number
   * @adapter: the adapter to add
   * Context: can sleep
@@@ -1672,17 -1682,8 +1719,22 @@@ int i2c_add_adapter(struct i2c_adapter 
  	int id;
  
  	id = of_alias_get_id(dev->of_node, "i2c");
++<<<<<<< HEAD
 +	if (id >= 0) {
 +		adapter->nr = id;
 +		return __i2c_add_numbered_adapter(adapter);
 +	}
 +
 +	mutex_lock(&core_lock);
 +	id = idr_alloc(&i2c_adapter_idr, NULL,
 +		       __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
 +	mutex_unlock(&core_lock);
 +	if (WARN(id < 0, "couldn't get idr"))
 +		return id;
++=======
+ 	if (id < 0)
+ 		id = -1;
++>>>>>>> i2c/i2c/for-next
  
  	adapter->nr = id;
  
@@@ -1718,7 -1719,7 +1770,7 @@@ int i2c_add_numbered_adapter(struct i2c
  	if (adap->nr == -1) /* -1 means dynamically assign bus id */
  		return i2c_add_adapter(adap);
  
- 	return __i2c_add_numbered_adapter(adap);
+ 	return i2c_register_adapter(adap);
  }
  EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
  

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-06-09 15:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-09 15:24 linux-next: manual merge of the kthread tree with the i2c-host-fixes tree Mark Brown
2026-06-09 15:35 ` Wolfram Sang
2026-06-09 15:36   ` Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox