Message ID | 20250409154356.423512-4-visitorckw@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Introduce parity_odd() and refactor redundant parity code | expand |
On 4/9/2025 5:43 PM, 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/pci/cx18/cx18-av-vbi.c | 12 ++---------- > 1 file changed, 2 insertions(+), 10 deletions(-) > > diff --git a/drivers/media/pci/cx18/cx18-av-vbi.c b/drivers/media/pci/cx18/cx18-av-vbi.c > index 65281d40c681..15b515b95956 100644 > --- a/drivers/media/pci/cx18/cx18-av-vbi.c > +++ b/drivers/media/pci/cx18/cx18-av-vbi.c [...] > @@ -278,7 +270,7 @@ int cx18_av_decode_vbi_line(struct v4l2_subdev *sd, > break; > case 6: > sdid = V4L2_SLICED_CAPTION_525; > - err = !odd_parity(p[0]) || !odd_parity(p[1]); > + err = !parity_odd(p[0]) || !parity_odd(p[1]); No need to call parity_odd() twice here. Instead you could do: err = !parity_odd(p[0] ^ p[1]); This is orthogonal to the change to parity_odd() though. More specific to the new parity_odd() you can now do following as parity_odd() argument is u64: err = !parity_odd(*(u16 *)p); Regards, Arend
On Wed, Apr 09, 2025 at 08:43:09PM +0200, Arend van Spriel wrote: > On 4/9/2025 5:43 PM, 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/pci/cx18/cx18-av-vbi.c | 12 ++---------- > > 1 file changed, 2 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/media/pci/cx18/cx18-av-vbi.c b/drivers/media/pci/cx18/cx18-av-vbi.c > > index 65281d40c681..15b515b95956 100644 > > --- a/drivers/media/pci/cx18/cx18-av-vbi.c > > +++ b/drivers/media/pci/cx18/cx18-av-vbi.c > > [...] > > > @@ -278,7 +270,7 @@ int cx18_av_decode_vbi_line(struct v4l2_subdev *sd, > > break; > > case 6: > > sdid = V4L2_SLICED_CAPTION_525; > > - err = !odd_parity(p[0]) || !odd_parity(p[1]); > > + err = !parity_odd(p[0]) || !parity_odd(p[1]); > > No need to call parity_odd() twice here. Instead you could do: > > err = !parity_odd(p[0] ^ p[1]); > > This is orthogonal to the change to parity_odd() though. More specific to > the new parity_odd() you can now do following as parity_odd() argument is > u64: > > err = !parity_odd(*(u16 *)p); > > Thanks for the feedback! Would you prefer this change to be part of the parity() conversion patch, or in a separate one? Regards, Kuan-Wei
On Wed, 2025-04-09 at 20:43 +0200, Arend van Spriel wrote: > > This is orthogonal to the change to parity_odd() though. More specific > to the new parity_odd() you can now do following as parity_odd() > argument is u64: > > err = !parity_odd(*(u16 *)p); > Can it though? Need to be careful with alignment with that, I'd think. johannes
On April 10, 2025 12:06:52 AM Johannes Berg <johannes@sipsolutions.net> wrote: > On Wed, 2025-04-09 at 20:43 +0200, Arend van Spriel wrote: >> >> This is orthogonal to the change to parity_odd() though. More specific >> to the new parity_odd() you can now do following as parity_odd() >> argument is u64: >> >> err = !parity_odd(*(u16 *)p); > > Can it though? Need to be careful with alignment with that, I'd think. My bad. You are absolutely right. Gr. AvS >
On Thu, Apr 10, 2025 at 07:08:58AM +0200, Arend Van Spriel wrote: > On April 10, 2025 12:06:52 AM Johannes Berg <johannes@sipsolutions.net> wrote: > > > On Wed, 2025-04-09 at 20:43 +0200, Arend van Spriel wrote: > > > > > > This is orthogonal to the change to parity_odd() though. More specific > > > to the new parity_odd() you can now do following as parity_odd() > > > argument is u64: > > > > > > err = !parity_odd(*(u16 *)p); > > > > Can it though? Need to be careful with alignment with that, I'd think. > > My bad. You are absolutely right. > Then maybe we can still go with: err = !parity_odd(p[0] ^ p[1]); I believe this should still be a fairly safe approach? Regards, Kuan-Wei
On April 11, 2025 6:37:35 PM Kuan-Wei Chiu <visitorckw@gmail.com> wrote: > On Thu, Apr 10, 2025 at 07:08:58AM +0200, Arend Van Spriel wrote: >> On April 10, 2025 12:06:52 AM Johannes Berg <johannes@sipsolutions.net> wrote: >> >>> On Wed, 2025-04-09 at 20:43 +0200, Arend van Spriel wrote: >>>> >>>> This is orthogonal to the change to parity_odd() though. More specific >>>> to the new parity_odd() you can now do following as parity_odd() >>>> argument is u64: >>>> >>>> err = !parity_odd(*(u16 *)p); >>> >>> Can it though? Need to be careful with alignment with that, I'd think. >> >> My bad. You are absolutely right. > Then maybe we can still go with: > > err = !parity_odd(p[0] ^ p[1]); > > I believe this should still be a fairly safe approach? Yes. Or whatever the name will be ;-) Regards, Arend
diff --git a/drivers/media/pci/cx18/cx18-av-vbi.c b/drivers/media/pci/cx18/cx18-av-vbi.c index 65281d40c681..15b515b95956 100644 --- a/drivers/media/pci/cx18/cx18-av-vbi.c +++ b/drivers/media/pci/cx18/cx18-av-vbi.c @@ -8,6 +8,7 @@ */ +#include <linux/bitops.h> #include "cx18-driver.h" /* @@ -56,15 +57,6 @@ struct vbi_anc_data { /* u8 fill[]; Variable number of fill bytes */ }; -static int odd_parity(u8 c) -{ - c ^= (c >> 4); - c ^= (c >> 2); - c ^= (c >> 1); - - return c & 1; -} - static int decode_vps(u8 *dst, u8 *p) { static const u8 biphase_tbl[] = { @@ -278,7 +270,7 @@ int cx18_av_decode_vbi_line(struct v4l2_subdev *sd, break; case 6: sdid = V4L2_SLICED_CAPTION_525; - err = !odd_parity(p[0]) || !odd_parity(p[1]); + err = !parity_odd(p[0]) || !parity_odd(p[1]); break; case 9: sdid = V4L2_SLICED_VPS;