tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git 
usb-testing
head:   09aa11cfda9d8186046bcd1adcd6498b688114f4
commit: 96a6d031ca9930938bd66d0052fc7ed2b56e3583 [63/64] usb: typec: mux: Find 
the muxes by also matching against the device node

smatch warnings:
drivers/usb/typec/mux.c:167 typec_mux_match() warn: unsigned 'nval' is never 
less than zero.

vim +/nval +167 drivers/usb/typec/mux.c

   124  
   125  static void *typec_mux_match(struct device_connection *con, int ep, 
void *data)
   126  {
   127          const struct typec_altmode_desc *desc = data;
   128          struct typec_mux *mux;
   129          size_t nval;
   130          bool match;
   131          u16 *val;
   132          int i;
   133  
   134          if (!con->fwnode) {
   135                  list_for_each_entry(mux, &mux_list, entry)
   136                          if (!strcmp(con->endpoint[ep], 
dev_name(mux->dev)))
   137                                  return mux;
   138                  return ERR_PTR(-EPROBE_DEFER);
   139          }
   140  
   141          /*
   142           * Check has the identifier already been "consumed". If it
   143           * has, no need to do any extra connection identification.
   144           */
   145          match = !con->id;
   146          if (match)
   147                  goto find_mux;
   148  
   149          /* Accessory Mode muxes */
   150          if (!desc) {
   151                  match = fwnode_property_present(con->fwnode, 
"accessory");
   152                  if (match)
   153                          goto find_mux;
   154                  return NULL;
   155          }
   156  
   157          /* Alternate Mode muxes */
   158          nval = fwnode_property_read_u16_array(con->fwnode, "svid", 
NULL, 0);
   159          if (nval <= 0)
   160                  return NULL;
   161  
   162          val = kcalloc(nval, sizeof(*val), GFP_KERNEL);
   163          if (!val)
   164                  return ERR_PTR(-ENOMEM);
   165  
   166          nval = fwnode_property_read_u16_array(con->fwnode, "svid", val, 
nval);
 > 167          if (nval < 0) {
   168                  kfree(val);
   169                  return ERR_PTR(nval);
   170          }
   171  
   172          for (i = 0; i < nval; i++) {
   173                  match = val[i] == desc->svid;
   174                  if (match) {
   175                          kfree(val);
   176                          goto find_mux;
   177                  }
   178          }
   179          kfree(val);
   180          return NULL;
   181  
   182  find_mux:
   183          list_for_each_entry(mux, &mux_list, entry)
   184                  if (dev_fwnode(mux->dev) == con->fwnode)
   185                          return mux;
   186  
   187          return match ? ERR_PTR(-EPROBE_DEFER) : NULL;
   188  }
   189  

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

Reply via email to