* [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit()
@ 2015-02-02 21:14 Chen Gang S
[not found] ` <54CFE8BE.5030700-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org>
2015-02-04 11:59 ` David Laight
0 siblings, 2 replies; 11+ messages in thread
From: Chen Gang S @ 2015-02-02 21:14 UTC (permalink / raw)
To: marcel-kz+m5ild9QBg9hUCZPvPmw, gustavo-THi1TnShQwVAfugRpC6u6w,
johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w
Cc: David S. Miller, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
hci_test_bit() does not modify 2nd parameter, so it is better to let it
be constant, or may cause build warning. The related warning (with
allmodconfig under xtensa):
net/bluetooth/hci_sock.c: In function 'hci_sock_sendmsg':
net/bluetooth/hci_sock.c:955:8: warning: passing argument 2 of 'hci_test_bit' discards 'const' qualifier from pointer target type [-Wdiscarded-array-qualifiers]
&hci_sec_filter.ocf_mask[ogf])) &&
^
net/bluetooth/hci_sock.c:49:19: note: expected 'void *' but argument is of type 'const __u32 (*)[4] {aka const unsigned int (*)[4]}'
static inline int hci_test_bit(int nr, void *addr)
^
Signed-off-by: Chen Gang <gang.chen.5i5j-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
net/bluetooth/hci_sock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
index 80c5a79..858b53a 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
@@ -46,7 +46,7 @@ struct hci_pinfo {
unsigned short channel;
};
-static inline int hci_test_bit(int nr, void *addr)
+static inline int hci_test_bit(int nr, const void *addr)
{
return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
}
--
1.9.3
^ permalink raw reply related [flat|nested] 11+ messages in thread[parent not found: <54CFE8BE.5030700-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org>]
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() [not found] ` <54CFE8BE.5030700-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org> @ 2015-02-02 21:20 ` Joe Perches [not found] ` <1422912017.30476.28.camel-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Joe Perches @ 2015-02-02 21:20 UTC (permalink / raw) To: Chen Gang S Cc: marcel-kz+m5ild9QBg9hUCZPvPmw, gustavo-THi1TnShQwVAfugRpC6u6w, johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w, David S. Miller, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Tue, 2015-02-03 at 05:14 +0800, Chen Gang S wrote: > hci_test_bit() does not modify 2nd parameter, so it is better to let it > be constant, or may cause build warning. The related warning (with > allmodconfig under xtensa): [] > diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c [] > @@ -46,7 +46,7 @@ struct hci_pinfo { > unsigned short channel; > }; > > -static inline int hci_test_bit(int nr, void *addr) > +static inline int hci_test_bit(int nr, const void *addr) > { > return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); > } It's probably better to use const __u32 * here too, but the real thing I wonder is whether or not there's an issue with one of the 2 uses of this function. One of them passes a unsigned long *, the other a u32 *. $ git grep -w hci_test_bit net/bluetooth/hci_sock.c:static inline int hci_test_bit(int nr, void *addr) net/bluetooth/hci_sock.c: if (!hci_test_bit(flt_event, &flt->event_mask)) net/bluetooth/hci_sock.c: !hci_test_bit(ocf & HCI_FLT_OCF_BITS, net/bluetooth/hci_sock.c- &hci_sec_filter.ocf_mask[ogf])) && hci_sec_filter.ocf_mask is __u32 but flt->event_mask is unsigned long. Any possible issue here on 64-bit systems? --- $ git grep -A4 "struct hci_filter {" include/net/bluetooth/hci_sock.h:struct hci_filter { include/net/bluetooth/hci_sock.h- unsigned long type_mask; include/net/bluetooth/hci_sock.h- unsigned long event_mask[2]; include/net/bluetooth/hci_sock.h- __le16 opcode; include/net/bluetooth/hci_sock.h-}; --- static bool is_filtered_packet(struct sock *sk, struct sk_buff *skb) { struct hci_filter *flt; [...] if (!hci_test_bit(flt_event, &flt->event_mask)) return true; ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <1422912017.30476.28.camel-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>]
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() [not found] ` <1422912017.30476.28.camel-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org> @ 2015-02-03 2:32 ` Chen Gang S 2015-02-03 2:59 ` Chen Gang S 0 siblings, 1 reply; 11+ messages in thread From: Chen Gang S @ 2015-02-03 2:32 UTC (permalink / raw) To: Joe Perches Cc: marcel-kz+m5ild9QBg9hUCZPvPmw, gustavo-THi1TnShQwVAfugRpC6u6w, johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w, David S. Miller, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On 2/3/15 05:20, Joe Perches wrote: > On Tue, 2015-02-03 at 05:14 +0800, Chen Gang S wrote: >> hci_test_bit() does not modify 2nd parameter, so it is better to let it >> be constant, or may cause build warning. The related warning (with >> allmodconfig under xtensa): > [] >> diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c > [] >> @@ -46,7 +46,7 @@ struct hci_pinfo { >> unsigned short channel; >> }; >> >> -static inline int hci_test_bit(int nr, void *addr) >> +static inline int hci_test_bit(int nr, const void *addr) >> { >> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >> } > > It's probably better to use const __u32 * here too, but the > real thing I wonder is whether or not there's an issue with > one of the 2 uses of this function. > > One of them passes a unsigned long *, the other a u32 *. > > $ git grep -w hci_test_bit > net/bluetooth/hci_sock.c:static inline int hci_test_bit(int nr, void *addr) > net/bluetooth/hci_sock.c: if (!hci_test_bit(flt_event, &flt->event_mask)) > net/bluetooth/hci_sock.c: !hci_test_bit(ocf & HCI_FLT_OCF_BITS, > net/bluetooth/hci_sock.c- &hci_sec_filter.ocf_mask[ogf])) && > > hci_sec_filter.ocf_mask is __u32 > but flt->event_mask is unsigned long. > > Any possible issue here on 64-bit systems? > For me, it can not cause issue on 64-bit systems. hci_test_bit() treats 'addr' as "__u32 *", and has to use the pointer to do something. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-03 2:32 ` Chen Gang S @ 2015-02-03 2:59 ` Chen Gang S [not found] ` <54D03996.1070503-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Chen Gang S @ 2015-02-03 2:59 UTC (permalink / raw) To: Joe Perches Cc: marcel, gustavo, johan.hedberg, David S. Miller, linux-bluetooth, netdev@vger.kernel.org, linux-kernel@vger.kernel.org On 2/3/15 10:32, Chen Gang S wrote: > On 2/3/15 05:20, Joe Perches wrote: >> On Tue, 2015-02-03 at 05:14 +0800, Chen Gang S wrote: >>> hci_test_bit() does not modify 2nd parameter, so it is better to let it >>> be constant, or may cause build warning. The related warning (with >>> allmodconfig under xtensa): >> [] >>> diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c >> [] >>> @@ -46,7 +46,7 @@ struct hci_pinfo { >>> unsigned short channel; >>> }; >>> >>> -static inline int hci_test_bit(int nr, void *addr) >>> +static inline int hci_test_bit(int nr, const void *addr) >>> { >>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >>> } >> >> It's probably better to use const __u32 * here too, but the >> real thing I wonder is whether or not there's an issue with >> one of the 2 uses of this function. >> >> One of them passes a unsigned long *, the other a u32 *. >> >> $ git grep -w hci_test_bit >> net/bluetooth/hci_sock.c:static inline int hci_test_bit(int nr, void *addr) >> net/bluetooth/hci_sock.c: if (!hci_test_bit(flt_event, &flt->event_mask)) >> net/bluetooth/hci_sock.c: !hci_test_bit(ocf & HCI_FLT_OCF_BITS, >> net/bluetooth/hci_sock.c- &hci_sec_filter.ocf_mask[ogf])) && >> >> hci_sec_filter.ocf_mask is __u32 >> but flt->event_mask is unsigned long. >> >> Any possible issue here on 64-bit systems? >> > > For me, it can not cause issue on 64-bit systems. hci_test_bit() treats > 'addr' as "__u32 *", and has to use the pointer to do something. > 'event_mask' is intended to type cast to "__u32 *" within 'hci_sock.c'. So for me, "const __u32 *" is better than "const void *" for 2nd parameter of hci_test_bit(). If what I said above is correct, and also if necessary, I shall patch v3 for it. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <54D03996.1070503-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org>]
* RE: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() [not found] ` <54D03996.1070503-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org> @ 2015-02-04 12:13 ` David Laight 0 siblings, 0 replies; 11+ messages in thread From: David Laight @ 2015-02-04 12:13 UTC (permalink / raw) To: 'Chen Gang S', Joe Perches Cc: marcel-kz+m5ild9QBg9hUCZPvPmw@public.gmane.org, gustavo-THi1TnShQwVAfugRpC6u6w@public.gmane.org, johan.hedberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, David S. Miller, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org From: Gang S > On 2/3/15 10:32, Chen Gang S wrote: > > On 2/3/15 05:20, Joe Perches wrote: > >> On Tue, 2015-02-03 at 05:14 +0800, Chen Gang S wrote: > >>> hci_test_bit() does not modify 2nd parameter, so it is better to let it > >>> be constant, or may cause build warning. The related warning (with > >>> allmodconfig under xtensa): > >> [] > >>> diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c > >> [] > >>> @@ -46,7 +46,7 @@ struct hci_pinfo { > >>> unsigned short channel; > >>> }; > >>> > >>> -static inline int hci_test_bit(int nr, void *addr) > >>> +static inline int hci_test_bit(int nr, const void *addr) > >>> { > >>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); > >>> } > >> > >> It's probably better to use const __u32 * here too, but the > >> real thing I wonder is whether or not there's an issue with > >> one of the 2 uses of this function. > >> > >> One of them passes a unsigned long *, the other a u32 *. > >> > >> $ git grep -w hci_test_bit > >> net/bluetooth/hci_sock.c:static inline int hci_test_bit(int nr, void *addr) > >> net/bluetooth/hci_sock.c: if (!hci_test_bit(flt_event, &flt->event_mask)) > >> net/bluetooth/hci_sock.c: !hci_test_bit(ocf & HCI_FLT_OCF_BITS, > >> net/bluetooth/hci_sock.c- &hci_sec_filter.ocf_mask[ogf])) && > >> > >> hci_sec_filter.ocf_mask is __u32 > >> but flt->event_mask is unsigned long. > >> > >> Any possible issue here on 64-bit systems? > >> > > > > For me, it can not cause issue on 64-bit systems. hci_test_bit() treats > > 'addr' as "__u32 *", and has to use the pointer to do something. > > > > 'event_mask' is intended to type cast to "__u32 *" within 'hci_sock.c'. > So for me, "const __u32 *" is better than "const void *" for 2nd > parameter of hci_test_bit(). > > If what I said above is correct, and also if necessary, I shall patch v3 > for it. How are the bits set in the first place? If the array is ever indexed as long [] then the code above is unlikely to be testing the correct bits. David ^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-02 21:14 [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() Chen Gang S [not found] ` <54CFE8BE.5030700-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org> @ 2015-02-04 11:59 ` David Laight 2015-02-04 20:13 ` Sergei Shtylyov 1 sibling, 1 reply; 11+ messages in thread From: David Laight @ 2015-02-04 11:59 UTC (permalink / raw) To: 'Chen Gang S', marcel@holtmann.org, gustavo@padovan.org, johan.hedberg@gmail.com Cc: David S. Miller, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org From: Chen Gang S > -static inline int hci_test_bit(int nr, void *addr) > +static inline int hci_test_bit(int nr, const void *addr) > { > return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); > } Is there a 'standard' function lurking that will do the above. On x86 the cpus 'bit test' instruction will handle bit numbers greater than the word size - so it can be a single instruction. David ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-04 11:59 ` David Laight @ 2015-02-04 20:13 ` Sergei Shtylyov [not found] ` <54D27D68.7040501-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> 0 siblings, 1 reply; 11+ messages in thread From: Sergei Shtylyov @ 2015-02-04 20:13 UTC (permalink / raw) To: David Laight, 'Chen Gang S', marcel@holtmann.org, gustavo@padovan.org, johan.hedberg@gmail.com Cc: David S. Miller, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Hello. On 02/04/2015 02:59 PM, David Laight wrote: >> -static inline int hci_test_bit(int nr, void *addr) >> +static inline int hci_test_bit(int nr, const void *addr) >> { >> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >> } > Is there a 'standard' function lurking that will do the above. > On x86 the cpus 'bit test' instruction will handle bit numbers > greater than the word size - so it can be a single instruction. Of course, there's test_bit(). > David WBR, Sergei ^ permalink raw reply [flat|nested] 11+ messages in thread
[parent not found: <54D27D68.7040501-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>]
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() [not found] ` <54D27D68.7040501-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org> @ 2015-02-04 21:09 ` Marcel Holtmann 2015-02-04 21:47 ` Chen Gang S 0 siblings, 1 reply; 11+ messages in thread From: Marcel Holtmann @ 2015-02-04 21:09 UTC (permalink / raw) To: Sergei Shtylyov Cc: David Laight, Chen Gang S, Gustavo F. Padovan, Johan Hedberg, David S. Miller, linux-bluetooth-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Hi Sergei, >>> -static inline int hci_test_bit(int nr, void *addr) >>> +static inline int hci_test_bit(int nr, const void *addr) >>> { >>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >>> } > >> Is there a 'standard' function lurking that will do the above. >> On x86 the cpus 'bit test' instruction will handle bit numbers >> greater than the word size - so it can be a single instruction. > > Of course, there's test_bit(). we did leave hci_test_bit in the code since there are some userspace facing API that we can not change. Remember that the origin of this code is from 2.4.6 kernel. So we can only change this if you can ensure not to break the userspace API. So might want to write unit tests to ensure working HCI filter before even considering touching this. Regards Marcel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-04 21:09 ` Marcel Holtmann @ 2015-02-04 21:47 ` Chen Gang S 2015-02-05 10:14 ` David Laight 0 siblings, 1 reply; 11+ messages in thread From: Chen Gang S @ 2015-02-04 21:47 UTC (permalink / raw) To: Marcel Holtmann, Sergei Shtylyov Cc: David Laight, Gustavo F. Padovan, Johan Hedberg, David S. Miller, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org On 2/5/15 05:09, Marcel Holtmann wrote: > Hi Sergei, > >>>> -static inline int hci_test_bit(int nr, void *addr) >>>> +static inline int hci_test_bit(int nr, const void *addr) >>>> { >>>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >>>> } >> >>> Is there a 'standard' function lurking that will do the above. >>> On x86 the cpus 'bit test' instruction will handle bit numbers >>> greater than the word size - so it can be a single instruction. >> >> Of course, there's test_bit(). > > we did leave hci_test_bit in the code since there are some userspace facing API that we can not change. Remember that the origin of this code is from 2.4.6 kernel. > > So we can only change this if you can ensure not to break the userspace API. So might want to write unit tests to ensure working HCI filter before even considering touching this. > For me, we have to remain hci_test_bit(), it is for "__u32 *" (which we can not change). The common test_bit() is for "unsigned long *", in this case, I guess it may cause issue under 64-bit environments. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed ^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-04 21:47 ` Chen Gang S @ 2015-02-05 10:14 ` David Laight 2015-02-05 12:20 ` Chen Gang S 0 siblings, 1 reply; 11+ messages in thread From: David Laight @ 2015-02-05 10:14 UTC (permalink / raw) To: 'Chen Gang S', Marcel Holtmann, Sergei Shtylyov Cc: Gustavo F. Padovan, Johan Hedberg, David S. Miller, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org From: Chen Gang S [mailto:gang.chen@sunrus.com.cn] > On 2/5/15 05:09, Marcel Holtmann wrote: > > Hi Sergei, > > > >>>> -static inline int hci_test_bit(int nr, void *addr) > >>>> +static inline int hci_test_bit(int nr, const void *addr) > >>>> { > >>>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); > >>>> } > >> > >>> Is there a 'standard' function lurking that will do the above. > >>> On x86 the cpus 'bit test' instruction will handle bit numbers > >>> greater than the word size - so it can be a single instruction. > >> > >> Of course, there's test_bit(). > > > > we did leave hci_test_bit in the code since there are some userspace facing > > API that we can not change. Remember that the origin of this code is > > from 2.4.6 kernel. > > > > So we can only change this if you can ensure not to break the userspace API. > > So might want to write unit tests to ensure working HCI filter before even > > considering touching this. > > > > For me, we have to remain hci_test_bit(), it is for "__u32 *" (which we > can not change). The common test_bit() is for "unsigned long *", in this > case, I guess it may cause issue under 64-bit environments. Except that half the time you are passing a 'long *' and you haven't explained why this isn't broken on 64bit architectures. Note that on LE systems the size of the accesses used to access a dense bit array don't matter. This is not true of BE systems. David ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() 2015-02-05 10:14 ` David Laight @ 2015-02-05 12:20 ` Chen Gang S 0 siblings, 0 replies; 11+ messages in thread From: Chen Gang S @ 2015-02-05 12:20 UTC (permalink / raw) To: David Laight, Marcel Holtmann, Sergei Shtylyov Cc: Gustavo F. Padovan, Johan Hedberg, David S. Miller, linux-bluetooth@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org On 2/5/15 18:14, David Laight wrote: > From: Chen Gang S [mailto:gang.chen@sunrus.com.cn] >> On 2/5/15 05:09, Marcel Holtmann wrote: >>> Hi Sergei, >>> >>>>>> -static inline int hci_test_bit(int nr, void *addr) >>>>>> +static inline int hci_test_bit(int nr, const void *addr) >>>>>> { >>>>>> return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31)); >>>>>> } >>>> >>>>> Is there a 'standard' function lurking that will do the above. >>>>> On x86 the cpus 'bit test' instruction will handle bit numbers >>>>> greater than the word size - so it can be a single instruction. >>>> >>>> Of course, there's test_bit(). >>> >>> we did leave hci_test_bit in the code since there are some userspace facing >>> API that we can not change. Remember that the origin of this code is >>> from 2.4.6 kernel. >>> >>> So we can only change this if you can ensure not to break the userspace API. >>> So might want to write unit tests to ensure working HCI filter before even >>> considering touching this. >>> >> >> For me, we have to remain hci_test_bit(), it is for "__u32 *" (which we >> can not change). The common test_bit() is for "unsigned long *", in this >> case, I guess it may cause issue under 64-bit environments. > > Except that half the time you are passing a 'long *' and you haven't > explained why this isn't broken on 64bit architectures. > Maybe we are misunderstanding with each other (excuse me for my pool English). What I want to say is: - hci_test_bit() is OK (current implementation can not cause issue for 64-bit machine). - But if we use test_bit(), I guess it will cause issue for 64-bit machine. > Note that on LE systems the size of the accesses used to access a dense > bit array don't matter. This is not true of BE systems. > Yes, what you said above sounds reasonable to me, too. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2015-02-05 12:20 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-02 21:14 [PATCH v2] net: bluetooth: hci_sock: Use 'const void *' instead of 'void *' for 2nd parameter of hci_test_bit() Chen Gang S
[not found] ` <54CFE8BE.5030700-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org>
2015-02-02 21:20 ` Joe Perches
[not found] ` <1422912017.30476.28.camel-6d6DIl74uiNBDgjK7y7TUQ@public.gmane.org>
2015-02-03 2:32 ` Chen Gang S
2015-02-03 2:59 ` Chen Gang S
[not found] ` <54D03996.1070503-/B7AUNIrSHOPt1CcHtbs0g@public.gmane.org>
2015-02-04 12:13 ` David Laight
2015-02-04 11:59 ` David Laight
2015-02-04 20:13 ` Sergei Shtylyov
[not found] ` <54D27D68.7040501-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
2015-02-04 21:09 ` Marcel Holtmann
2015-02-04 21:47 ` Chen Gang S
2015-02-05 10:14 ` David Laight
2015-02-05 12:20 ` Chen Gang S
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).