Re: [PATCH 3/6] Convert v4l2 event to struct_size

From: kbuild test robot
Date: Fri Jun 08 2018 - 00:04:07 EST


Hi Matthew,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.17 next-20180607]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Matthew-Wilcox/More-conversions-to-struct_size/20180608-112654
config: x86_64-randconfig-x017-201822 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

All errors (new ones prefixed by >>):

drivers/media/v4l2-core/v4l2-event.c: In function 'v4l2_event_subscribe':
>> drivers/media/v4l2-core/v4l2-event.c:218:17: error: implicit declaration of function 'struct_size'; did you mean 'resource_size'? [-Werror=implicit-function-declaration]
sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
^~~~~~~~~~~
resource_size
drivers/media/v4l2-core/v4l2-event.c:218:34: error: 'events' undeclared (first use in this function); did you mean 'elems'?
sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
^~~~~~
elems
drivers/media/v4l2-core/v4l2-event.c:218:34: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors

vim +218 drivers/media/v4l2-core/v4l2-event.c

203
204 int v4l2_event_subscribe(struct v4l2_fh *fh,
205 const struct v4l2_event_subscription *sub, unsigned elems,
206 const struct v4l2_subscribed_event_ops *ops)
207 {
208 struct v4l2_subscribed_event *sev, *found_ev;
209 unsigned long flags;
210 unsigned i;
211
212 if (sub->type == V4L2_EVENT_ALL)
213 return -EINVAL;
214
215 if (elems < 1)
216 elems = 1;
217
> 218 sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
219 if (!sev)
220 return -ENOMEM;
221 for (i = 0; i < elems; i++)
222 sev->events[i].sev = sev;
223 sev->type = sub->type;
224 sev->id = sub->id;
225 sev->flags = sub->flags;
226 sev->fh = fh;
227 sev->ops = ops;
228
229 spin_lock_irqsave(&fh->vdev->fh_lock, flags);
230 found_ev = v4l2_event_subscribed(fh, sub->type, sub->id);
231 if (!found_ev)
232 list_add(&sev->list, &fh->subscribed);
233 spin_unlock_irqrestore(&fh->vdev->fh_lock, flags);
234
235 if (found_ev) {
236 kvfree(sev);
237 return 0; /* Already listening */
238 }
239
240 if (sev->ops && sev->ops->add) {
241 int ret = sev->ops->add(sev, elems);
242 if (ret) {
243 sev->ops = NULL;
244 v4l2_event_unsubscribe(fh, sub);
245 return ret;
246 }
247 }
248
249 /* Mark as ready for use */
250 sev->elems = elems;
251
252 return 0;
253 }
254 EXPORT_SYMBOL_GPL(v4l2_event_subscribe);
255

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

Attachment: .config.gz
Description: application/gzip