tree:   https://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git 
pwrseq-lib
head:   06903db00af7968ff4960ab380c45a7788fee1d5
commit: 778d7e6997538601e8ad364188bf007768922bd4 [2/10] power: add power 
sequence library
config: x86_64-lkp (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        git checkout 778d7e6997538601e8ad364188bf007768922bd4
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

>> drivers/power/pwrseq/core.c:62:6: error: redefinition of 'pwrseq_register'
    void pwrseq_register(struct pwrseq *pwrseq)
         ^~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:51:20: note: previous definition of 
'pwrseq_register' was here
    static inline void pwrseq_register(struct pwrseq *pwrseq) {}
                       ^~~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:75:6: error: redefinition of 'pwrseq_unregister'
    void pwrseq_unregister(struct pwrseq *pwrseq)
         ^~~~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:52:20: note: previous definition of 
'pwrseq_unregister' was here
    static inline void pwrseq_unregister(struct pwrseq *pwrseq) {}
                       ^~~~~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:126:16: error: redefinition of 'of_pwrseq_on'
    struct pwrseq *of_pwrseq_on(struct device_node *np)
                   ^~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:53:30: note: previous definition of 
'of_pwrseq_on' was here
    static inline struct pwrseq *of_pwrseq_on(struct device_node *np)
                                 ^~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:162:6: error: redefinition of 'of_pwrseq_off'
    void of_pwrseq_off(struct pwrseq *pwrseq)
         ^~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:57:13: note: previous definition of 
'of_pwrseq_off' was here
    static void of_pwrseq_off(struct pwrseq *pwrseq) {}
                ^~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:183:5: error: redefinition of 'of_pwrseq_on_list'
    int of_pwrseq_on_list(struct device_node *np, struct list_head *head)
        ^~~~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:58:12: note: previous definition of 
'of_pwrseq_on_list' was here
    static int of_pwrseq_on_list(struct device_node *np, struct list_head *head)
               ^~~~~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:214:6: error: redefinition of 
>> 'of_pwrseq_off_list'
    void of_pwrseq_off_list(struct list_head *head)
         ^~~~~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:62:13: note: previous definition of 
'of_pwrseq_off_list' was here
    static void of_pwrseq_off_list(struct list_head *head) {}
                ^~~~~~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:237:5: error: redefinition of 'pwrseq_suspend'
    int pwrseq_suspend(struct pwrseq *p)
        ^~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:63:12: note: previous definition of 
'pwrseq_suspend' was here
    static int pwrseq_suspend(struct pwrseq *p)
               ^~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:264:5: error: redefinition of 'pwrseq_resume'
    int pwrseq_resume(struct pwrseq *p)
        ^~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:67:12: note: previous definition of 
'pwrseq_resume' was here
    static int pwrseq_resume(struct pwrseq *p)
               ^~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:290:5: error: redefinition of 
>> 'pwrseq_suspend_list'
    int pwrseq_suspend_list(struct list_head *head)
        ^~~~~~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:71:12: note: previous definition of 
'pwrseq_suspend_list' was here
    static int pwrseq_suspend_list(struct list_head *head)
               ^~~~~~~~~~~~~~~~~~~
>> drivers/power/pwrseq/core.c:322:5: error: redefinition of 
>> 'pwrseq_resume_list'
    int pwrseq_resume_list(struct list_head *head)
        ^~~~~~~~~~~~~~~~~~
   In file included from drivers/power/pwrseq/core.c:24:0:
   include/linux/power/pwrseq.h:75:12: note: previous definition of 
'pwrseq_resume_list' was here
    static int pwrseq_resume_list(struct list_head *head)
               ^~~~~~~~~~~~~~~~~~
   include/linux/power/pwrseq.h:75:12: warning: 'pwrseq_resume_list' defined 
but not used [-Wunused-function]
   include/linux/power/pwrseq.h:71:12: warning: 'pwrseq_suspend_list' defined 
but not used [-Wunused-function]
    static int pwrseq_suspend_list(struct list_head *head)
               ^~~~~~~~~~~~~~~~~~~
   include/linux/power/pwrseq.h:67:12: warning: 'pwrseq_resume' defined but not 
used [-Wunused-function]
    static int pwrseq_resume(struct pwrseq *p)
               ^~~~~~~~~~~~~
   include/linux/power/pwrseq.h:63:12: warning: 'pwrseq_suspend' defined but 
not used [-Wunused-function]
    static int pwrseq_suspend(struct pwrseq *p)
               ^~~~~~~~~~~~~~
   include/linux/power/pwrseq.h:62:13: warning: 'of_pwrseq_off_list' defined 
but not used [-Wunused-function]
    static void of_pwrseq_off_list(struct list_head *head) {}
                ^~~~~~~~~~~~~~~~~~
   include/linux/power/pwrseq.h:58:12: warning: 'of_pwrseq_on_list' defined but 
not used [-Wunused-function]
    static int of_pwrseq_on_list(struct device_node *np, struct list_head *head)
               ^~~~~~~~~~~~~~~~~
   include/linux/power/pwrseq.h:57:13: warning: 'of_pwrseq_off' defined but not 
used [-Wunused-function]
    static void of_pwrseq_off(struct pwrseq *pwrseq) {}
                ^~~~~~~~~~~~~

vim +/pwrseq_register +62 drivers/power/pwrseq/core.c

    56  
    57  /**
    58   * pwrseq_register - Add pwrseq instance to global pwrseq list
    59   *
    60   * @pwrseq: the pwrseq instance
    61   */
  > 62  void pwrseq_register(struct pwrseq *pwrseq)
    63  {
    64          mutex_lock(&pwrseq_list_mutex);
    65          list_add(&pwrseq->node, &pwrseq_list);
    66          mutex_unlock(&pwrseq_list_mutex);
    67  }
    68  EXPORT_SYMBOL_GPL(pwrseq_register);
    69  
    70  /**
    71   * pwrseq_unregister - Remove pwrseq instance from global pwrseq list
    72   *
    73   * @pwrseq: the pwrseq instance
    74   */
  > 75  void pwrseq_unregister(struct pwrseq *pwrseq)
    76  {
    77          mutex_lock(&pwrseq_list_mutex);
    78          list_del(&pwrseq->node);
    79          mutex_unlock(&pwrseq_list_mutex);
    80  }
    81  EXPORT_SYMBOL_GPL(pwrseq_unregister);
    82  
    83  static struct pwrseq *pwrseq_find_available_instance(struct device_node 
*np)
    84  {
    85          struct pwrseq *pwrseq;
    86  
    87          mutex_lock(&pwrseq_list_mutex);
    88          list_for_each_entry(pwrseq, &pwrseq_list, node) {
    89                  if (pwrseq->used)
    90                          continue;
    91  
    92                  /* compare compatible string for pwrseq node */
    93                  if (of_match_node(pwrseq->pwrseq_of_match_table, np)) {
    94                          pwrseq->used = true;
    95                          mutex_unlock(&pwrseq_list_mutex);
    96                          return pwrseq;
    97                  }
    98  
    99                  /* return generic pwrseq instance */
   100                  if (!strcmp(pwrseq->pwrseq_of_match_table->compatible,
   101                                  "generic")) {
   102                          pr_debug("using generic pwrseq instance for 
%s\n",
   103                                  np->full_name);
   104                          pwrseq->used = true;
   105                          mutex_unlock(&pwrseq_list_mutex);
   106                          return pwrseq;
   107                  }
   108          }
   109          mutex_unlock(&pwrseq_list_mutex);
   110          pr_debug("Can't find any pwrseq instances for %s\n", 
np->full_name);
   111  
   112          return NULL;
   113  }
   114  
   115  /**
   116   * of_pwrseq_on - Carry out power sequence on for device node
   117   *
   118   * @np: the device node would like to power on
   119   *
   120   * Carry out a single device power on.  If multiple devices
   121   * need to be handled, use of_pwrseq_on_list() instead.
   122   *
   123   * Return a pointer to the power sequence instance on success,
   124   * or an error code otherwise.
   125   */
 > 126  struct pwrseq *of_pwrseq_on(struct device_node *np)
   127  {
   128          struct pwrseq *pwrseq;
   129          int ret;
   130  
   131          pwrseq = pwrseq_find_available_instance(np);
   132          if (!pwrseq)
   133                  return ERR_PTR(-ENOENT);
   134  
   135          ret = pwrseq_get(np, pwrseq);
   136          if (ret) {
   137                  /* Mark current pwrseq as unused */
   138                  pwrseq->used = false;
   139                  return ERR_PTR(ret);
   140          }
   141  
   142          ret = pwrseq_on(pwrseq);
   143          if (ret)
   144                  goto pwr_put;
   145  
   146          return pwrseq;
   147  
   148  pwr_put:
   149          pwrseq_put(pwrseq);
   150          return ERR_PTR(ret);
   151  }
   152  EXPORT_SYMBOL_GPL(of_pwrseq_on);
   153  
   154  /**
   155   * of_pwrseq_off - Carry out power sequence off for this pwrseq instance
   156   *
   157   * @pwrseq: the pwrseq instance which related device would like to be 
off
   158   *
   159   * This API is used to power off single device, it is the opposite
   160   * operation for of_pwrseq_on.
   161   */
 > 162  void of_pwrseq_off(struct pwrseq *pwrseq)
   163  {
   164          pwrseq_off(pwrseq);
   165          pwrseq_put(pwrseq);
   166  }
   167  EXPORT_SYMBOL_GPL(of_pwrseq_off);
   168  
   169  /**
   170   * of_pwrseq_on_list - Carry out power sequence on for list
   171   *
   172   * @np: the device node would like to power on
   173   * @head: the list head for pwrseq list on this bus
   174   *
   175   * This API is used to power on multiple devices at single bus.
   176   * If there are several devices on bus (eg, USB bus), uses this
   177   * this API. Otherwise, use of_pwrseq_on instead. After the device
   178   * is powered on successfully, it will be added to pwrseq list for
   179   * this bus. The caller needs to use mutex_lock for concurrent.
   180   *
   181   * Return 0 on success, or an error value otherwise.
   182   */
 > 183  int of_pwrseq_on_list(struct device_node *np, struct list_head *head)
   184  {
   185          struct pwrseq *pwrseq;
   186          struct pwrseq_list_per_dev *pwrseq_list_node;
   187  
   188          pwrseq_list_node = kzalloc(sizeof(*pwrseq_list_node), 
GFP_KERNEL);
   189          if (!pwrseq_list_node)
   190                  return -ENOMEM;
   191  
   192          pwrseq = of_pwrseq_on(np);
   193          if (IS_ERR(pwrseq)) {
   194                  kfree(pwrseq_list_node);
   195                  return PTR_ERR(pwrseq);
   196          }
   197  
   198          pwrseq_list_node->pwrseq = pwrseq;
   199          list_add(&pwrseq_list_node->list, head);
   200  
   201          return 0;
   202  }
   203  EXPORT_SYMBOL_GPL(of_pwrseq_on_list);
   204  
   205  /**
   206   * of_pwrseq_off_list - Carry out power sequence off for the list
   207   *
   208   * @head: the list head for pwrseq instance list on this bus
   209   *
   210   * This API is used to power off all devices on this bus, it is
   211   * the opposite operation for of_pwrseq_on_list.
   212   * The caller needs to use mutex_lock for concurrent.
   213   */
 > 214  void of_pwrseq_off_list(struct list_head *head)
   215  {
   216          struct pwrseq *pwrseq;
   217          struct pwrseq_list_per_dev *pwrseq_list_node, *tmp_node;
   218  
   219          list_for_each_entry_safe(pwrseq_list_node, tmp_node, head, 
list) {
   220                  pwrseq = pwrseq_list_node->pwrseq;
   221                  of_pwrseq_off(pwrseq);
   222                  list_del(&pwrseq_list_node->list);
   223                  kfree(pwrseq_list_node);
   224          }
   225  }
   226  EXPORT_SYMBOL_GPL(of_pwrseq_off_list);
   227  
   228  /**
   229   * pwrseq_suspend - Carry out power sequence suspend for this pwrseq 
instance
   230   *
   231   * @pwrseq: the pwrseq instance
   232   *
   233   * This API is used to do suspend operation on pwrseq instance.
   234   *
   235   * Return 0 on success, or an error value otherwise.
   236   */
 > 237  int pwrseq_suspend(struct pwrseq *p)
   238  {
   239          int ret = 0;
   240  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to