On Fri, Feb 15, 2019 at 01:33:24PM +0800, kbuild test robot wrote:
> 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.
I'm assuming this means we should not use type 'size_t' in this case.
I'll send a patch where I'll use 'int' instead if 'size_t'.
> 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
thanks,
--
heikki