lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202601010305.tpY47HE4-lkp@intel.com>
Date: Thu, 1 Jan 2026 03:18:51 +0800
From: kernel test robot <lkp@...el.com>
To: Josua Mayer <josua@...id-run.com>, Ulf Hansson <ulf.hansson@...aro.org>,
	Rob Herring <robh@...nel.org>,
	Krzysztof Kozlowski <krzk@...nel.org>,
	Conor Dooley <conor+dt@...nel.org>,
	Geert Uytterhoeven <geert+renesas@...der.be>,
	Magnus Damm <magnus.damm@...il.com>,
	Wolfram Sang <wsa-dev@...g-engineering.com>,
	Marc Kleine-Budde <mkl@...gutronix.de>,
	Vincent Mailhol <mailhol@...nel.org>, Vinod Koul <vkoul@...nel.org>,
	Kishon Vijay Abraham I <kishon@...nel.org>,
	Peter Rosin <peda@...ntia.se>, Aaro Koskinen <aaro.koskinen@....fi>,
	Andreas Kemnade <andreas@...nade.info>,
	Kevin Hilman <khilman@...libre.com>,
	Roger Quadros <rogerq@...nel.org>, Tony Lindgren <tony@...mide.com>,
	Vignesh R <vigneshr@...com>,
	Janusz Krzysztofik <jmkrzyszt@...il.com>,
	Andi Shyti <andi.shyti@...nel.org>,
	Neil Armstrong <neil.armstrong@...aro.org>
Cc: oe-kbuild-all@...ts.linux.dev,
	Mikhail Anikin <mikhail.anikin@...id-run.com>,
	Yazan Shhady <yazan.shhady@...id-run.com>,
	Jon Nettleton <jon@...id-run.com>, linux-mmc@...r.kernel.org,
	devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
	linux-renesas-soc@...r.kernel.org, linux-can@...r.kernel.org,
	linux-phy@...ts.infradead.org
Subject: Re: [PATCH v4 2/7] mux: Add helper functions for getting optional
 and selected mux-state

Hi Josua,

kernel test robot noticed the following build errors:

[auto build test ERROR on 8f0b4cce4481fb22653697cced8d0d04027cb1e8]

url:    https://github.com/intel-lab-lkp/linux/commits/Josua-Mayer/phy-can-transceiver-rename-temporary-helper-function-to-avoid-conflict/20251229-223153
base:   8f0b4cce4481fb22653697cced8d0d04027cb1e8
patch link:    https://lore.kernel.org/r/20251229-rz-sdio-mux-v4-2-a023e55758fe%40solid-run.com
patch subject: [PATCH v4 2/7] mux: Add helper functions for getting optional and selected mux-state
config: parisc-randconfig-002-20260101 (https://download.01.org/0day-ci/archive/20260101/202601010305.tpY47HE4-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 10.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260101/202601010305.tpY47HE4-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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202601010305.tpY47HE4-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h: In function 'mux_control_put':
>> include/linux/mux/consumer.h:138:9: warning: 'return' with a value, in function returning void [-Wreturn-type]
     138 |  return -EOPNOTSUPP;
         |         ^
   include/linux/mux/consumer.h:136:20: note: declared here
     136 | static inline void mux_control_put(struct mux_control *mux)
         |                    ^~~~~~~~~~~~~~~
   drivers/mux/core.c: At top level:
>> drivers/mux/core.c:302:14: error: redefinition of 'mux_control_states'
     302 | unsigned int mux_control_states(struct mux_control *mux)
         |              ^~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:70:28: note: previous definition of 'mux_control_states' was here
      70 | static inline unsigned int mux_control_states(struct mux_control *mux)
         |                            ^~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:365:5: error: redefinition of 'mux_control_select_delay'
     365 | int mux_control_select_delay(struct mux_control *mux, unsigned int state,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:74:32: note: previous definition of 'mux_control_select_delay' was here
      74 | static inline int __must_check mux_control_select_delay(struct mux_control *mux,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:403:5: error: redefinition of 'mux_state_select_delay'
     403 | int mux_state_select_delay(struct mux_state *mstate, unsigned int delay_us)
         |     ^~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:79:32: note: previous definition of 'mux_state_select_delay' was here
      79 | static inline int __must_check mux_state_select_delay(struct mux_state *mstate,
         |                                ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:425:5: error: redefinition of 'mux_control_try_select_delay'
     425 | int mux_control_try_select_delay(struct mux_control *mux, unsigned int state,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:84:32: note: previous definition of 'mux_control_try_select_delay' was here
      84 | static inline int __must_check mux_control_try_select_delay(struct mux_control *mux,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:459:5: error: redefinition of 'mux_state_try_select_delay'
     459 | int mux_state_try_select_delay(struct mux_state *mstate, unsigned int delay_us)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:90:32: note: previous definition of 'mux_state_try_select_delay' was here
      90 | static inline int __must_check mux_state_try_select_delay(struct mux_state *mstate,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:477:5: error: redefinition of 'mux_control_deselect'
     477 | int mux_control_deselect(struct mux_control *mux)
         |     ^~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:118:19: note: previous definition of 'mux_control_deselect' was here
     118 | static inline int mux_control_deselect(struct mux_control *mux)
         |                   ^~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:503:5: error: redefinition of 'mux_state_deselect'
     503 | int mux_state_deselect(struct mux_state *mstate)
         |     ^~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:122:19: note: previous definition of 'mux_state_deselect' was here
     122 | static inline int mux_state_deselect(struct mux_state *mstate)
         |                   ^~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:625:21: error: redefinition of 'mux_control_get'
     625 | struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
         |                     ^~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:127:35: note: previous definition of 'mux_control_get' was here
     127 | static inline struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
         |                                   ^~~~~~~~~~~~~~~
>> drivers/mux/core.c:638:21: error: redefinition of 'mux_control_get_optional'
     638 | struct mux_control *mux_control_get_optional(struct device *dev, const char *mux_name)
         |                     ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:131:35: note: previous definition of 'mux_control_get_optional' was here
     131 | static inline struct mux_control *mux_control_get_optional(struct device *dev,
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:650:6: error: redefinition of 'mux_control_put'
     650 | void mux_control_put(struct mux_control *mux)
         |      ^~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:136:20: note: previous definition of 'mux_control_put' was here
     136 | static inline void mux_control_put(struct mux_control *mux)
         |                    ^~~~~~~~~~~~~~~
>> drivers/mux/core.c:671:21: error: redefinition of 'devm_mux_control_get'
     671 | struct mux_control *devm_mux_control_get(struct device *dev,
         |                     ^~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:141:35: note: previous definition of 'devm_mux_control_get' was here
     141 | static inline struct mux_control *devm_mux_control_get(struct device *dev, const char *mux_name)
         |                                   ^~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:774:19: error: redefinition of 'devm_mux_state_get'
     774 | struct mux_state *devm_mux_state_get(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:145:33: note: previous definition of 'devm_mux_state_get' was here
     145 | static inline struct mux_state *devm_mux_state_get(struct device *dev, const char *mux_name)
         |                                 ^~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:788:19: error: redefinition of 'devm_mux_state_get_optional'
     788 | struct mux_state *devm_mux_state_get_optional(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:149:33: note: previous definition of 'devm_mux_state_get_optional' was here
     149 | static inline struct mux_state *devm_mux_state_get_optional(struct device *dev,
         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:838:19: error: redefinition of 'devm_mux_state_get_selected'
     838 | struct mux_state *devm_mux_state_get_selected(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:154:33: note: previous definition of 'devm_mux_state_get_selected' was here
     154 | static inline struct mux_state *devm_mux_state_get_selected(struct device *dev,
         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/mux/core.c:854:19: error: redefinition of 'devm_mux_state_get_optional_selected'
     854 | struct mux_state *devm_mux_state_get_optional_selected(struct device *dev,
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/mux/core.c:19:
   include/linux/mux/consumer.h:159:33: note: previous definition of 'devm_mux_state_get_optional_selected' was here
     159 | static inline struct mux_state *devm_mux_state_get_optional_selected(struct device *dev,
         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
   In file included from core.c:19:
   include/linux/mux/consumer.h: In function 'mux_control_put':
>> include/linux/mux/consumer.h:138:9: warning: 'return' with a value, in function returning void [-Wreturn-type]
     138 |  return -EOPNOTSUPP;
         |         ^
   include/linux/mux/consumer.h:136:20: note: declared here
     136 | static inline void mux_control_put(struct mux_control *mux)
         |                    ^~~~~~~~~~~~~~~
   core.c: At top level:
   core.c:302:14: error: redefinition of 'mux_control_states'
     302 | unsigned int mux_control_states(struct mux_control *mux)
         |              ^~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:70:28: note: previous definition of 'mux_control_states' was here
      70 | static inline unsigned int mux_control_states(struct mux_control *mux)
         |                            ^~~~~~~~~~~~~~~~~~
   core.c:365:5: error: redefinition of 'mux_control_select_delay'
     365 | int mux_control_select_delay(struct mux_control *mux, unsigned int state,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:74:32: note: previous definition of 'mux_control_select_delay' was here
      74 | static inline int __must_check mux_control_select_delay(struct mux_control *mux,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~
   core.c:403:5: error: redefinition of 'mux_state_select_delay'
     403 | int mux_state_select_delay(struct mux_state *mstate, unsigned int delay_us)
         |     ^~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:79:32: note: previous definition of 'mux_state_select_delay' was here
      79 | static inline int __must_check mux_state_select_delay(struct mux_state *mstate,
         |                                ^~~~~~~~~~~~~~~~~~~~~~
   core.c:425:5: error: redefinition of 'mux_control_try_select_delay'
     425 | int mux_control_try_select_delay(struct mux_control *mux, unsigned int state,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:84:32: note: previous definition of 'mux_control_try_select_delay' was here
      84 | static inline int __must_check mux_control_try_select_delay(struct mux_control *mux,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   core.c:459:5: error: redefinition of 'mux_state_try_select_delay'
     459 | int mux_state_try_select_delay(struct mux_state *mstate, unsigned int delay_us)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:90:32: note: previous definition of 'mux_state_try_select_delay' was here
      90 | static inline int __must_check mux_state_try_select_delay(struct mux_state *mstate,
         |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~
   core.c:477:5: error: redefinition of 'mux_control_deselect'
     477 | int mux_control_deselect(struct mux_control *mux)
         |     ^~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:118:19: note: previous definition of 'mux_control_deselect' was here
     118 | static inline int mux_control_deselect(struct mux_control *mux)
         |                   ^~~~~~~~~~~~~~~~~~~~
   core.c:503:5: error: redefinition of 'mux_state_deselect'
     503 | int mux_state_deselect(struct mux_state *mstate)
         |     ^~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:122:19: note: previous definition of 'mux_state_deselect' was here
     122 | static inline int mux_state_deselect(struct mux_state *mstate)
         |                   ^~~~~~~~~~~~~~~~~~
   core.c:625:21: error: redefinition of 'mux_control_get'
     625 | struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
         |                     ^~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:127:35: note: previous definition of 'mux_control_get' was here
     127 | static inline struct mux_control *mux_control_get(struct device *dev, const char *mux_name)
         |                                   ^~~~~~~~~~~~~~~
   core.c:638:21: error: redefinition of 'mux_control_get_optional'
     638 | struct mux_control *mux_control_get_optional(struct device *dev, const char *mux_name)
         |                     ^~~~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:131:35: note: previous definition of 'mux_control_get_optional' was here
     131 | static inline struct mux_control *mux_control_get_optional(struct device *dev,
         |                                   ^~~~~~~~~~~~~~~~~~~~~~~~
   core.c:650:6: error: redefinition of 'mux_control_put'
     650 | void mux_control_put(struct mux_control *mux)
         |      ^~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:136:20: note: previous definition of 'mux_control_put' was here
     136 | static inline void mux_control_put(struct mux_control *mux)
         |                    ^~~~~~~~~~~~~~~
   core.c:671:21: error: redefinition of 'devm_mux_control_get'
     671 | struct mux_control *devm_mux_control_get(struct device *dev,
         |                     ^~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:141:35: note: previous definition of 'devm_mux_control_get' was here
     141 | static inline struct mux_control *devm_mux_control_get(struct device *dev, const char *mux_name)
         |                                   ^~~~~~~~~~~~~~~~~~~~
   core.c:774:19: error: redefinition of 'devm_mux_state_get'
     774 | struct mux_state *devm_mux_state_get(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:145:33: note: previous definition of 'devm_mux_state_get' was here
     145 | static inline struct mux_state *devm_mux_state_get(struct device *dev, const char *mux_name)
         |                                 ^~~~~~~~~~~~~~~~~~
   core.c:788:19: error: redefinition of 'devm_mux_state_get_optional'
     788 | struct mux_state *devm_mux_state_get_optional(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   In file included from core.c:19:
   include/linux/mux/consumer.h:149:33: note: previous definition of 'devm_mux_state_get_optional' was here
     149 | static inline struct mux_state *devm_mux_state_get_optional(struct device *dev,
         |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   core.c:838:19: error: redefinition of 'devm_mux_state_get_selected'
     838 | struct mux_state *devm_mux_state_get_selected(struct device *dev, const char *mux_name)
         |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +/mux_control_states +302 drivers/mux/core.c

a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  295  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  296  /**
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  297   * mux_control_states() - Query the number of multiplexer states.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  298   * @mux: The mux-control to query.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  299   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  300   * Return: The number of multiplexer states.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  301   */
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14 @302  unsigned int mux_control_states(struct mux_control *mux)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  303  {
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  304  	return mux->states;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  305  }
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  306  EXPORT_SYMBOL_GPL(mux_control_states);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  307  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  308  /*
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  309   * The mux->lock must be down when calling this function.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  310   */
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  311  static int __mux_control_select(struct mux_control *mux, int state)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  312  {
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  313  	int ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  314  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  315  	if (WARN_ON(state < 0 || state >= mux->states))
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  316  		return -EINVAL;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  317  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  318  	if (mux->cached_state == state)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  319  		return 0;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  320  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  321  	ret = mux_control_set(mux, state);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  322  	if (ret >= 0)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  323  		return 0;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  324  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  325  	/* The mux update failed, try to revert if appropriate... */
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  326  	if (mux->idle_state != MUX_IDLE_AS_IS)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  327  		mux_control_set(mux, mux->idle_state);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  328  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  329  	return ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  330  }
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  331  
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  332  static void mux_control_delay(struct mux_control *mux, unsigned int delay_us)
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  333  {
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  334  	ktime_t delayend;
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  335  	s64 remaining;
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  336  
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  337  	if (!delay_us)
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  338  		return;
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  339  
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  340  	delayend = ktime_add_us(mux->last_change, delay_us);
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  341  	remaining = ktime_us_delta(delayend, ktime_get());
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  342  	if (remaining > 0)
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  343  		fsleep(remaining);
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  344  }
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  345  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  346  /**
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  347   * mux_control_select_delay() - Select the given multiplexer state.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  348   * @mux: The mux-control to request a change of state from.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  349   * @state: The new requested state.
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  350   * @delay_us: The time to delay (in microseconds) if the mux state is changed.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  351   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  352   * On successfully selecting the mux-control state, it will be locked until
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  353   * there is a call to mux_control_deselect(). If the mux-control is already
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  354   * selected when mux_control_select() is called, the caller will be blocked
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  355   * until mux_control_deselect() or mux_state_deselect() is called (by someone
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  356   * else).
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  357   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  358   * Therefore, make sure to call mux_control_deselect() when the operation is
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  359   * complete and the mux-control is free for others to use, but do not call
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  360   * mux_control_deselect() if mux_control_select() fails.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  361   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  362   * Return: 0 when the mux-control state has the requested state or a negative
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  363   * errno on error.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  364   */
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07 @365  int mux_control_select_delay(struct mux_control *mux, unsigned int state,
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  366  			     unsigned int delay_us)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  367  {
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  368  	int ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  369  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  370  	ret = down_killable(&mux->lock);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  371  	if (ret < 0)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  372  		return ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  373  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  374  	ret = __mux_control_select(mux, state);
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  375  	if (ret >= 0)
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  376  		mux_control_delay(mux, delay_us);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  377  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  378  	if (ret < 0)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  379  		up(&mux->lock);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  380  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  381  	return ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  382  }
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  383  EXPORT_SYMBOL_GPL(mux_control_select_delay);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  384  
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  385  /**
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  386   * mux_state_select_delay() - Select the given multiplexer state.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  387   * @mstate: The mux-state to select.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  388   * @delay_us: The time to delay (in microseconds) if the mux state is changed.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  389   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  390   * On successfully selecting the mux-state, its mux-control will be locked
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  391   * until there is a call to mux_state_deselect(). If the mux-control is already
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  392   * selected when mux_state_select() is called, the caller will be blocked
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  393   * until mux_state_deselect() or mux_control_deselect() is called (by someone
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  394   * else).
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  395   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  396   * Therefore, make sure to call mux_state_deselect() when the operation is
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  397   * complete and the mux-control is free for others to use, but do not call
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  398   * mux_state_deselect() if mux_state_select() fails.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  399   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  400   * Return: 0 when the mux-state has been selected or a negative
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  401   * errno on error.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  402   */
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07 @403  int mux_state_select_delay(struct mux_state *mstate, unsigned int delay_us)
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  404  {
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  405  	return mux_control_select_delay(mstate->mux, mstate->state, delay_us);
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  406  }
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  407  EXPORT_SYMBOL_GPL(mux_state_select_delay);
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  408  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  409  /**
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  410   * mux_control_try_select_delay() - Try to select the given multiplexer state.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  411   * @mux: The mux-control to request a change of state from.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  412   * @state: The new requested state.
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  413   * @delay_us: The time to delay (in microseconds) if the mux state is changed.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  414   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  415   * On successfully selecting the mux-control state, it will be locked until
f22d1117b9c3e2 drivers/mux/core.c     Peter Rosin        2022-01-07  416   * mux_control_deselect() is called.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  417   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  418   * Therefore, make sure to call mux_control_deselect() when the operation is
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  419   * complete and the mux-control is free for others to use, but do not call
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  420   * mux_control_deselect() if mux_control_try_select() fails.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  421   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  422   * Return: 0 when the mux-control state has the requested state or a negative
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  423   * errno on error. Specifically -EBUSY if the mux-control is contended.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  424   */
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07 @425  int mux_control_try_select_delay(struct mux_control *mux, unsigned int state,
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  426  				 unsigned int delay_us)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  427  {
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  428  	int ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  429  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  430  	if (down_trylock(&mux->lock))
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  431  		return -EBUSY;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  432  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  433  	ret = __mux_control_select(mux, state);
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  434  	if (ret >= 0)
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  435  		mux_control_delay(mux, delay_us);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  436  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  437  	if (ret < 0)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  438  		up(&mux->lock);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  439  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  440  	return ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  441  }
17b5b576ff5faf drivers/mux/core.c     Vincent Whitchurch 2021-10-07  442  EXPORT_SYMBOL_GPL(mux_control_try_select_delay);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  443  
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  444  /**
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  445   * mux_state_try_select_delay() - Try to select the given multiplexer state.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  446   * @mstate: The mux-state to select.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  447   * @delay_us: The time to delay (in microseconds) if the mux state is changed.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  448   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  449   * On successfully selecting the mux-state, its mux-control will be locked
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  450   * until mux_state_deselect() is called.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  451   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  452   * Therefore, make sure to call mux_state_deselect() when the operation is
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  453   * complete and the mux-control is free for others to use, but do not call
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  454   * mux_state_deselect() if mux_state_try_select() fails.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  455   *
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  456   * Return: 0 when the mux-state has been selected or a negative errno on
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  457   * error. Specifically -EBUSY if the mux-control is contended.
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  458   */
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07 @459  int mux_state_try_select_delay(struct mux_state *mstate, unsigned int delay_us)
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  460  {
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  461  	return mux_control_try_select_delay(mstate->mux, mstate->state, delay_us);
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  462  }
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  463  EXPORT_SYMBOL_GPL(mux_state_try_select_delay);
84564481bc4520 drivers/mux/core.c     Aswath Govindraju  2022-01-07  464  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  465  /**
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  466   * mux_control_deselect() - Deselect the previously selected multiplexer state.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  467   * @mux: The mux-control to deselect.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  468   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  469   * It is required that a single call is made to mux_control_deselect() for
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  470   * each and every successful call made to either of mux_control_select() or
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  471   * mux_control_try_select().
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  472   *
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  473   * Return: 0 on success and a negative errno on error. An error can only
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  474   * occur if the mux has an idle state. Note that even if an error occurs, the
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  475   * mux-control is unlocked and is thus free for the next access.
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  476   */
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14 @477  int mux_control_deselect(struct mux_control *mux)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  478  {
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  479  	int ret = 0;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  480  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  481  	if (mux->idle_state != MUX_IDLE_AS_IS &&
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  482  	    mux->idle_state != mux->cached_state)
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  483  		ret = mux_control_set(mux, mux->idle_state);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  484  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  485  	up(&mux->lock);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  486  
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  487  	return ret;
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  488  }
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  489  EXPORT_SYMBOL_GPL(mux_control_deselect);
a3b02a9c6591ce drivers/mux/mux-core.c Peter Rosin        2017-05-14  490  

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ