On Aug 12, 2016, at 22:30, Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> wrote: > sunbing <sunbing@xxxxxxxxxxxxxxxxx> writes: >> On Aug 11, 2016, at 23:25, Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> wrote: >> >>> Bing Sun <sunbing@xxxxxxxxxxxxxxxxx> writes: >>>> Fixed sparse parse error: >>>> Expected constant expression in case statement. >>>> >>>> Signed-off-by: Bing Sun <sunbing@xxxxxxxxxxxxxxxxx> >>>> --- >>>> drivers/staging/rtl8723au/os_dep/os_intfs.c | 11 +++++------ >>>> 1 file changed, 5 insertions(+), 6 deletions(-) >>>> >>>> diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c >>>> index b8848c2..f30d5d2 100644 >>>> --- a/drivers/staging/rtl8723au/os_dep/os_intfs.c >>>> +++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c >>>> @@ -283,14 +283,13 @@ static u32 rtw_classify8021d(struct sk_buff *skb) >>>> */ >>>> if (skb->priority >= 256 && skb->priority <= 263) >>>> return skb->priority - 256; >>>> - switch (skb->protocol) { >>>> - case htons(ETH_P_IP): >>>> + >>>> + if (skb->protocol == htons(ETH_P_IP)) { >>>> dscp = ip_hdr(skb)->tos & 0xfc; >>>> - break; >>>> - default: >>>> - return 0; >>>> + return dscp >> 5; >>>> } >>>> - return dscp >> 5; >>>> + >>>> + return 0; >>>> } >>> >>> Pardon me here, but I find it really hard to see how this change is an >>> improvement over the old code in any shape or form. >>> >>> Jes >> >> There is no functional improvement. >> But before this patch, when we do: make C=1 M=drivers/staging/rtl8723au/ >> An error output: >> drivers/staging/rtl8723au//os_dep/os_intfs.c:287:14: error: Expected >> constant expression in case statement >> To avoid sparse parse error, a case statement converts to an if statement. >> So we got this patch. > > Hello > > I understand this part, but it seems to me we are changing the code due > to a broken test case in sparse. Does the warning go away if you use > __constant_htons() instead of htons()? > > Jes Thanks for your guidance. 1. If I use __constant_htons, checkpatch.pl will warning: WARNING: __constant_htons should be htons 2. In os_intfs.c: rtw_classify8021d, there are only one case statement and a default statement. So, convert "switch case" to "if else" is more readable in my opinion. So, I pushed this patch. There are some patches convert use of __constant_htons to htons in kernel logs. Will there be a new patch convert to htons in the future if I use __constant_htons now ? After search through kernel code, there are 158 "case htons(...)" statements and 2 "case __constant_htons(...)" statements. Does this mean we can ignore sparse error and use "case htons(...)" ? It makes me confused. More help, please. Regards. _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel