diff mbox

[3/6] Convert v4l2 event to struct_size

Message ID 20180607145720.22590-4-willy@infradead.org (mailing list archive)
State New, archived
Headers show

Commit Message

Matthew Wilcox June 7, 2018, 2:57 p.m. UTC
From: Matthew Wilcox <mawilcox@microsoft.com>

Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
---
 drivers/media/v4l2-core/v4l2-event.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

kernel test robot June 8, 2018, 4:03 a.m. UTC | #1
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
diff mbox

Patch

diff --git a/drivers/media/v4l2-core/v4l2-event.c b/drivers/media/v4l2-core/v4l2-event.c
index 968c2eb08b5a..127fe6eb91d9 100644
--- a/drivers/media/v4l2-core/v4l2-event.c
+++ b/drivers/media/v4l2-core/v4l2-event.c
@@ -215,8 +215,7 @@  int v4l2_event_subscribe(struct v4l2_fh *fh,
 	if (elems < 1)
 		elems = 1;
 
-	sev = kvzalloc(sizeof(*sev) + sizeof(struct v4l2_kevent) * elems,
-		       GFP_KERNEL);
+	sev = kvzalloc(struct_size(sev, events, elems), GFP_KERNEL);
 	if (!sev)
 		return -ENOMEM;
 	for (i = 0; i < elems; i++)