Message ID | 20250409154356.423512-4-visitorckw@gmail.com |
---|---|
State | New |
Headers | show |
Series | Introduce parity_odd() and refactor redundant parity code | expand |
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;