Refactor parity calculations to use the standard parity_odd() helper.
This change eliminates redundant implementations.
Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
---
drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
index 70a4024d461e..5e1b7b1742e4 100644
--- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
+++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
@@ -5,6 +5,7 @@
* Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
*/
+#include <linux/bitops.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/ktime.h>
@@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
static u8 calc_parity(u8 val)
{
- unsigned i;
- unsigned tot = 0;
-
- for (i = 0; i < 7; i++)
- tot += (val & (1 << i)) ? 1 : 0;
- return val | ((tot & 1) ? 0 : 0x80);
+ return val | (parity_odd(val) ? 0 : 0x80);
}
static void vivid_vbi_gen_set_time_of_day(u8 *packet)
--
2.34.1
On 09/04/2025 17:43, Kuan-Wei Chiu wrote:
> Refactor parity calculations to use the standard parity_odd() helper.
> This change eliminates redundant implementations.
>
> Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
> Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
> Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
Regards,
Hans
> ---
> drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> index 70a4024d461e..5e1b7b1742e4 100644
> --- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> +++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> @@ -5,6 +5,7 @@
> * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> */
>
> +#include <linux/bitops.h>
> #include <linux/errno.h>
> #include <linux/kernel.h>
> #include <linux/ktime.h>
> @@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
>
> static u8 calc_parity(u8 val)
> {
> - unsigned i;
> - unsigned tot = 0;
> -
> - for (i = 0; i < 7; i++)
> - tot += (val & (1 << i)) ? 1 : 0;
> - return val | ((tot & 1) ? 0 : 0x80);
> + return val | (parity_odd(val) ? 0 : 0x80);
> }
>
> static void vivid_vbi_gen_set_time_of_day(u8 *packet)
On Wed, Apr 09, 2025 at 11:43:45PM +0800, Kuan-Wei Chiu wrote:
> Refactor parity calculations to use the standard parity_odd() helper.
> This change eliminates redundant implementations.
>
> Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
> Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
> Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
> ---
> drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> index 70a4024d461e..5e1b7b1742e4 100644
> --- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> +++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> @@ -5,6 +5,7 @@
> * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> */
>
> +#include <linux/bitops.h>
> #include <linux/errno.h>
> #include <linux/kernel.h>
> #include <linux/ktime.h>
> @@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
>
> static u8 calc_parity(u8 val)
> {
> - unsigned i;
> - unsigned tot = 0;
> -
> - for (i = 0; i < 7; i++)
> - tot += (val & (1 << i)) ? 1 : 0;
> - return val | ((tot & 1) ? 0 : 0x80);
> + return val | (parity_odd(val) ? 0 : 0x80);
So, if val == 0 than parity_odd(val) is also 0, and this can be
simplified just to:
return parity(val) ? 0 : 0x80;
Or I miss something?
> }
>
> static void vivid_vbi_gen_set_time_of_day(u8 *packet)
> --
> 2.34.1
On Wed, Apr 09, 2025 at 01:03:42PM -0400, Yury Norov wrote:
> On Wed, Apr 09, 2025 at 11:43:45PM +0800, Kuan-Wei Chiu wrote:
> > Refactor parity calculations to use the standard parity_odd() helper.
> > This change eliminates redundant implementations.
> >
> > Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
> > ---
> > drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
> > 1 file changed, 2 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > index 70a4024d461e..5e1b7b1742e4 100644
> > --- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > +++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > @@ -5,6 +5,7 @@
> > * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> > */
> >
> > +#include <linux/bitops.h>
> > #include <linux/errno.h>
> > #include <linux/kernel.h>
> > #include <linux/ktime.h>
> > @@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
> >
> > static u8 calc_parity(u8 val)
> > {
> > - unsigned i;
> > - unsigned tot = 0;
> > -
> > - for (i = 0; i < 7; i++)
> > - tot += (val & (1 << i)) ? 1 : 0;
> > - return val | ((tot & 1) ? 0 : 0x80);
> > + return val | (parity_odd(val) ? 0 : 0x80);
>
> So, if val == 0 than parity_odd(val) is also 0, and this can be
> simplified just to:
> return parity(val) ? 0 : 0x80;
> Or I miss something?
>
If val == 0x01, the return value of calc_parity() will remain 0x01.
If changed to return parity_odd(val) ? 0 : 0x80;, the return value will
be changed to 0x00.
Regards,
Kuan-Wei
> > }
> >
> > static void vivid_vbi_gen_set_time_of_day(u8 *packet)
> > --
> > 2.34.1
On Thu, Apr 10, 2025 at 02:23:09AM +0800, Kuan-Wei Chiu wrote:
> On Wed, Apr 09, 2025 at 01:03:42PM -0400, Yury Norov wrote:
> > On Wed, Apr 09, 2025 at 11:43:45PM +0800, Kuan-Wei Chiu wrote:
> > > Refactor parity calculations to use the standard parity_odd() helper.
> > > This change eliminates redundant implementations.
> > >
> > > Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > > Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > > Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
> > > ---
> > > drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
> > > 1 file changed, 2 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > index 70a4024d461e..5e1b7b1742e4 100644
> > > --- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > +++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > @@ -5,6 +5,7 @@
> > > * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> > > */
> > >
> > > +#include <linux/bitops.h>
> > > #include <linux/errno.h>
> > > #include <linux/kernel.h>
> > > #include <linux/ktime.h>
> > > @@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
> > >
> > > static u8 calc_parity(u8 val)
> > > {
> > > - unsigned i;
> > > - unsigned tot = 0;
> > > -
> > > - for (i = 0; i < 7; i++)
> > > - tot += (val & (1 << i)) ? 1 : 0;
> > > - return val | ((tot & 1) ? 0 : 0x80);
> > > + return val | (parity_odd(val) ? 0 : 0x80);
> >
> > So, if val == 0 than parity_odd(val) is also 0, and this can be
> > simplified just to:
> > return parity(val) ? 0 : 0x80;
> > Or I miss something?
> >
> If val == 0x01, the return value of calc_parity() will remain 0x01.
> If changed to return parity_odd(val) ? 0 : 0x80;, the return value will
> be changed to 0x00.
Sorry, I meant
return val ? 0 : 0x80;
This 'val | (parity_odd(val)' is only false when val == 0, right?
When val != 0, compiler will return true immediately, not even calling
parity().
I think we need a comment from authors.
On Wed, Apr 09, 2025 at 02:41:03PM -0400, Yury Norov wrote:
> On Thu, Apr 10, 2025 at 02:23:09AM +0800, Kuan-Wei Chiu wrote:
> > On Wed, Apr 09, 2025 at 01:03:42PM -0400, Yury Norov wrote:
> > > On Wed, Apr 09, 2025 at 11:43:45PM +0800, Kuan-Wei Chiu wrote:
> > > > Refactor parity calculations to use the standard parity_odd() helper.
> > > > This change eliminates redundant implementations.
> > > >
> > > > Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > > > Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com>
> > > > Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
> > > > ---
> > > > drivers/media/test-drivers/vivid/vivid-vbi-gen.c | 8 ++------
> > > > 1 file changed, 2 insertions(+), 6 deletions(-)
> > > >
> > > > diff --git a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > > index 70a4024d461e..5e1b7b1742e4 100644
> > > > --- a/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > > +++ b/drivers/media/test-drivers/vivid/vivid-vbi-gen.c
> > > > @@ -5,6 +5,7 @@
> > > > * Copyright 2014 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
> > > > */
> > > >
> > > > +#include <linux/bitops.h>
> > > > #include <linux/errno.h>
> > > > #include <linux/kernel.h>
> > > > #include <linux/ktime.h>
> > > > @@ -165,12 +166,7 @@ static const u8 vivid_cc_sequence2[30] = {
> > > >
> > > > static u8 calc_parity(u8 val)
> > > > {
> > > > - unsigned i;
> > > > - unsigned tot = 0;
> > > > -
> > > > - for (i = 0; i < 7; i++)
> > > > - tot += (val & (1 << i)) ? 1 : 0;
> > > > - return val | ((tot & 1) ? 0 : 0x80);
> > > > + return val | (parity_odd(val) ? 0 : 0x80);
> > >
> > > So, if val == 0 than parity_odd(val) is also 0, and this can be
> > > simplified just to:
> > > return parity(val) ? 0 : 0x80;
> > > Or I miss something?
> > >
> > If val == 0x01, the return value of calc_parity() will remain 0x01.
> > If changed to return parity_odd(val) ? 0 : 0x80;, the return value will
> > be changed to 0x00.
>
> Sorry, I meant
> return val ? 0 : 0x80;
>
> This 'val | (parity_odd(val)' is only false when val == 0, right?
> When val != 0, compiler will return true immediately, not even calling
> parity().
>
I'm still confused.
Maybe you're interpreting the code as:
(val | parity(val)) ? 0 : 0x80
But what we're trying to do is:
val | (parity(val) ? 0 : 0x80)
So, for example, if val == 0x06, the return value will be 0x86.
Only returning 0 or 0x80 seems wrong to me.
Or did I misunderstand something?
Regards,
Kuan-Wei
> I think we need a comment from authors.
On Thu, Apr 10, 2025 at 02:56:41AM +0800, Kuan-Wei Chiu wrote: > On Wed, Apr 09, 2025 at 02:41:03PM -0400, Yury Norov wrote: > > On Thu, Apr 10, 2025 at 02:23:09AM +0800, Kuan-Wei Chiu wrote: > > > On Wed, Apr 09, 2025 at 01:03:42PM -0400, Yury Norov wrote: > > > > On Wed, Apr 09, 2025 at 11:43:45PM +0800, Kuan-Wei Chiu wrote: > > > > So, if val == 0 than parity_odd(val) is also 0, and this can be > > > > simplified just to: > > > > return parity(val) ? 0 : 0x80; > > > > Or I miss something? > > > > > > > If val == 0x01, the return value of calc_parity() will remain 0x01. > > > If changed to return parity_odd(val) ? 0 : 0x80;, the return value will > > > be changed to 0x00. > > > > Sorry, I meant > > return val ? 0 : 0x80; > > > > This 'val | (parity_odd(val)' is only false when val == 0, right? > > When val != 0, compiler will return true immediately, not even calling > > parity(). > > > I'm still confused. > > Maybe you're interpreting the code as: > > (val | parity(val)) ? 0 : 0x80 > > But what we're trying to do is: > > val | (parity(val) ? 0 : 0x80) > > So, for example, if val == 0x06, the return value will be 0x86. > Only returning 0 or 0x80 seems wrong to me. > Or did I misunderstand something? I misread the whole construction. Sorry, you're right. Scratch this.
© 2016 - 2025 Red Hat, Inc.