Message ID | 20201020144655.53251-1-colin.king@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | media: staging: rkisp1: rsz: make const array static, makes object smaller | expand |
From: Colin King > Sent: 20 October 2020 15:47 > > From: Colin Ian King <colin.king@canonical.com> > > Don't populate the const array dev_names on the stack but instead it > static. Makes the object code smaller by 15 bytes. > > Before: > text data bss dec hex filename > 17091 2648 64 19803 4d5b media/rkisp1/rkisp1-resizer.o > > After: > text data bss dec hex filename > 17012 2712 64 19788 4d4c media/rkisp1/rkisp1-resizer.o > > (gcc version 10.2.0) > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/staging/media/rkisp1/rkisp1-resizer.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1- > resizer.c > index 1687d82e6c68..7ca5b47c5bf5 100644 > --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c > +++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c > @@ -763,8 +763,10 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz) > > static int rkisp1_rsz_register(struct rkisp1_resizer *rsz) > { > - const char * const dev_names[] = {RKISP1_RSZ_MP_DEV_NAME, > - RKISP1_RSZ_SP_DEV_NAME}; > + static const char * const dev_names[] = { > + RKISP1_RSZ_MP_DEV_NAME, > + RKISP1_RSZ_SP_DEV_NAME > + }; > struct media_pad *pads = rsz->pads; > struct v4l2_subdev *sd = &rsz->sd; > int ret; Don't look at what that code is actually doing.... It is rather horrid. rkisp1_rsz_register() is called for each entry in an array (twice). The array index is written into rsz->id. The value is then used to select one of the two strings. But rsz->id is actually an enum type. rkisp1_rsz_register() should probably just be called twice with some extra parameters. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
Hi, thanks, Am 20.10.20 um 16:46 schrieb Colin King: > From: Colin Ian King <colin.king@canonical.com> > > Don't populate the const array dev_names on the stack but instead it > static. Makes the object code smaller by 15 bytes. > > Before: > text data bss dec hex filename > 17091 2648 64 19803 4d5b media/rkisp1/rkisp1-resizer.o > > After: > text data bss dec hex filename > 17012 2712 64 19788 4d4c media/rkisp1/rkisp1-resizer.o On the other hand the data segment is 64 bytes bigger. I don't know what is more important to save. Anyway, the rkisp1-capture.c does the same with the names so it is better to be consistent. Thanks, Dafna > > (gcc version 10.2.0) > > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/staging/media/rkisp1/rkisp1-resizer.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1-resizer.c > index 1687d82e6c68..7ca5b47c5bf5 100644 > --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c > +++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c > @@ -763,8 +763,10 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz) > > static int rkisp1_rsz_register(struct rkisp1_resizer *rsz) > { > - const char * const dev_names[] = {RKISP1_RSZ_MP_DEV_NAME, > - RKISP1_RSZ_SP_DEV_NAME}; > + static const char * const dev_names[] = { > + RKISP1_RSZ_MP_DEV_NAME, > + RKISP1_RSZ_SP_DEV_NAME > + }; > struct media_pad *pads = rsz->pads; > struct v4l2_subdev *sd = &rsz->sd; > int ret; >
Am 20.10.20 um 17:29 schrieb David Laight: > From: Colin King >> Sent: 20 October 2020 15:47 >> >> From: Colin Ian King <colin.king@canonical.com> >> >> Don't populate the const array dev_names on the stack but instead it >> static. Makes the object code smaller by 15 bytes. >> >> Before: >> text data bss dec hex filename >> 17091 2648 64 19803 4d5b media/rkisp1/rkisp1-resizer.o >> >> After: >> text data bss dec hex filename >> 17012 2712 64 19788 4d4c media/rkisp1/rkisp1-resizer.o >> >> (gcc version 10.2.0) >> >> Signed-off-by: Colin Ian King <colin.king@canonical.com> >> --- >> drivers/staging/media/rkisp1/rkisp1-resizer.c | 6 ++++-- >> 1 file changed, 4 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1- >> resizer.c >> index 1687d82e6c68..7ca5b47c5bf5 100644 >> --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c >> +++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c >> @@ -763,8 +763,10 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz) >> >> static int rkisp1_rsz_register(struct rkisp1_resizer *rsz) >> { >> - const char * const dev_names[] = {RKISP1_RSZ_MP_DEV_NAME, >> - RKISP1_RSZ_SP_DEV_NAME}; >> + static const char * const dev_names[] = { >> + RKISP1_RSZ_MP_DEV_NAME, >> + RKISP1_RSZ_SP_DEV_NAME >> + }; >> struct media_pad *pads = rsz->pads; >> struct v4l2_subdev *sd = &rsz->sd; >> int ret; > > Don't look at what that code is actually doing.... > It is rather horrid. > rkisp1_rsz_register() is called for each entry in an array (twice). > The array index is written into rsz->id. > The value is then used to select one of the two strings. > But rsz->id is actually an enum type. Hi, Is it that bad to use enum as an array index? we use it in many places in the driver. Thanks, Dafna > > rkisp1_rsz_register() should probably just be called twice with some > extra parameters. > > David > > - > Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK > Registration No: 1397386 (Wales) >
From: Dafna Hirschfeld > Sent: 20 October 2020 18:10 > > Am 20.10.20 um 17:29 schrieb David Laight: > > From: Colin King > >> Sent: 20 October 2020 15:47 > >> > >> From: Colin Ian King <colin.king@canonical.com> > >> ... > >> diff --git a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1- > >> resizer.c > >> index 1687d82e6c68..7ca5b47c5bf5 100644 > >> --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c > >> +++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c > >> @@ -763,8 +763,10 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz) > >> > >> static int rkisp1_rsz_register(struct rkisp1_resizer *rsz) > >> { > >> - const char * const dev_names[] = {RKISP1_RSZ_MP_DEV_NAME, > >> - RKISP1_RSZ_SP_DEV_NAME}; > >> + static const char * const dev_names[] = { > >> + RKISP1_RSZ_MP_DEV_NAME, > >> + RKISP1_RSZ_SP_DEV_NAME > >> + }; > >> struct media_pad *pads = rsz->pads; > >> struct v4l2_subdev *sd = &rsz->sd; > >> int ret; > > > > Don't look at what that code is actually doing.... > > It is rather horrid. > > rkisp1_rsz_register() is called for each entry in an array (twice). > > The array index is written into rsz->id. > > The value is then used to select one of the two strings. > > But rsz->id is actually an enum type. > > Hi, > Is it that bad to use enum as an array index? > we use it in many places in the driver. You'd normally use a constant from the enum to size the array definition. In this case you've an enum, an array [2] and the dev_names[] all of which have to match 'by magic'. There is a loop that half implies you might add a third type. but then the following code only works for the two types. You've complex error recovery in case one of the calls to rkisp1_rsz_register() fails - but since there can only ever be two calls the code could be much simpler. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
diff --git a/drivers/staging/media/rkisp1/rkisp1-resizer.c b/drivers/staging/media/rkisp1/rkisp1-resizer.c index 1687d82e6c68..7ca5b47c5bf5 100644 --- a/drivers/staging/media/rkisp1/rkisp1-resizer.c +++ b/drivers/staging/media/rkisp1/rkisp1-resizer.c @@ -763,8 +763,10 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz) static int rkisp1_rsz_register(struct rkisp1_resizer *rsz) { - const char * const dev_names[] = {RKISP1_RSZ_MP_DEV_NAME, - RKISP1_RSZ_SP_DEV_NAME}; + static const char * const dev_names[] = { + RKISP1_RSZ_MP_DEV_NAME, + RKISP1_RSZ_SP_DEV_NAME + }; struct media_pad *pads = rsz->pads; struct v4l2_subdev *sd = &rsz->sd; int ret;