* [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors @ 2018-10-17 18:06 Nathan Chancellor 2018-10-18 3:23 ` Masahiro Yamada 2018-10-18 3:49 ` [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements Nathan Chancellor 0 siblings, 2 replies; 12+ messages in thread From: Nathan Chancellor @ 2018-10-17 18:06 UTC (permalink / raw) To: Karsten Keil; +Cc: netdev, linux-kernel, Nathan Chancellor Clang warns: drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body [-Werror,-Wempty-body] if (Read_hfc(cs, HFCPCI_INT_S1)); ^ drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a separate line to silence this warning Use the format found in drivers/isdn/hardware/mISDN/hfcpci.c of casting the return of Read_hfc to void, instead of using an empty if statement. While we're at it, Masahiro Yamada pointed out that {Read,Write}_hfc should be using a standard access method in hfc_pci.h. Use the one found in drivers/isdn/hardware/mISDN/hfc_pci.h. Link: https://github.com/ClangBuiltLinux/linux/issues/66 Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> --- drivers/isdn/hisax/hfc_pci.c | 6 +++--- drivers/isdn/hisax/hfc_pci.h | 4 ++-- drivers/isdn/hisax/hfc_sx.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 8e5b03161b2f..a63b9155b697 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -128,7 +128,7 @@ reset_hfcpci(struct IsdnCardState *cs) Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + (void) Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, HFCPCI_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -158,7 +158,7 @@ reset_hfcpci(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcpci.int_m2 = HFCPCI_IRQ_ENABLE; Write_hfc(cs, HFCPCI_INT_M2, cs->hw.hfcpci.int_m2); - if (Read_hfc(cs, HFCPCI_INT_S1)); + (void) Read_hfc(cs, HFCPCI_INT_S1); } /***************************************************/ @@ -1537,7 +1537,7 @@ hfcpci_bh(struct work_struct *work) cs->hw.hfcpci.int_m1 &= ~HFCPCI_INTS_TIMER; Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + (void) Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, 4 | HFCPCI_LOAD_STATE); udelay(10); Write_hfc(cs, HFCPCI_STATES, 4); diff --git a/drivers/isdn/hisax/hfc_pci.h b/drivers/isdn/hisax/hfc_pci.h index 4e58700a3e61..4c3b3ba35726 100644 --- a/drivers/isdn/hisax/hfc_pci.h +++ b/drivers/isdn/hisax/hfc_pci.h @@ -228,8 +228,8 @@ typedef union { } fifo_area; -#define Write_hfc(a, b, c) (*(((u_char *)a->hw.hfcpci.pci_io) + b) = c) -#define Read_hfc(a, b) (*(((u_char *)a->hw.hfcpci.pci_io) + b)) +#define Write_hfc(a, b, c) (writeb(c, (a->hw.hfcpci.pci_io) + b)) +#define Read_hfc(a, b) (readb((a->hw.hfcpci.pci_io) + b)) extern void main_irq_hcpci(struct BCState *bcs); extern void releasehfcpci(struct IsdnCardState *cs); diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c index 4d3b4b2f2612..c4f3f37adfc8 100644 --- a/drivers/isdn/hisax/hfc_sx.c +++ b/drivers/isdn/hisax/hfc_sx.c @@ -381,7 +381,7 @@ reset_hfcsx(struct IsdnCardState *cs) Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + (void) Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, HFCSX_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -411,7 +411,7 @@ reset_hfcsx(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcsx.int_m2 = HFCSX_IRQ_ENABLE; Write_hfc(cs, HFCSX_INT_M2, cs->hw.hfcsx.int_m2); - if (Read_hfc(cs, HFCSX_INT_S2)); + (void) Read_hfc(cs, HFCSX_INT_S2); } /***************************************************/ @@ -1288,7 +1288,7 @@ hfcsx_bh(struct work_struct *work) cs->hw.hfcsx.int_m1 &= ~HFCSX_INTS_TIMER; Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + (void) Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, 4 | HFCSX_LOAD_STATE); udelay(10); -- 2.19.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors 2018-10-17 18:06 [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors Nathan Chancellor @ 2018-10-18 3:23 ` Masahiro Yamada 2018-10-18 3:34 ` Nathan Chancellor 2018-10-18 3:49 ` [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements Nathan Chancellor 1 sibling, 1 reply; 12+ messages in thread From: Masahiro Yamada @ 2018-10-18 3:23 UTC (permalink / raw) To: Nathan Chancellor; +Cc: isdn, Networking, Linux Kernel Mailing List Hi Nathan, On Thu, Oct 18, 2018 at 3:09 AM Nathan Chancellor <natechancellor@gmail.com> wrote: > > Clang warns: > > drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body > [-Werror,-Wempty-body] > if (Read_hfc(cs, HFCPCI_INT_S1)); > ^ > drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a > separate line to silence this warning > > Use the format found in drivers/isdn/hardware/mISDN/hfcpci.c of casting > the return of Read_hfc to void, instead of using an empty if statement. > > While we're at it, Masahiro Yamada pointed out that {Read,Write}_hfc > should be using a standard access method in hfc_pci.h. Use the one found > in drivers/isdn/hardware/mISDN/hfc_pci.h. > > Link: https://github.com/ClangBuiltLinux/linux/issues/66 > Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > --- > drivers/isdn/hisax/hfc_pci.c | 6 +++--- > drivers/isdn/hisax/hfc_pci.h | 4 ++-- > drivers/isdn/hisax/hfc_sx.c | 6 +++--- > 3 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c > index 8e5b03161b2f..a63b9155b697 100644 > --- a/drivers/isdn/hisax/hfc_pci.c > +++ b/drivers/isdn/hisax/hfc_pci.c > @@ -128,7 +128,7 @@ reset_hfcpci(struct IsdnCardState *cs) > Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); > > /* Clear already pending ints */ > - if (Read_hfc(cs, HFCPCI_INT_S1)); > + (void) Read_hfc(cs, HFCPCI_INT_S1); Why is this '(void)' necessary? I see no warning without it. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors 2018-10-18 3:23 ` Masahiro Yamada @ 2018-10-18 3:34 ` Nathan Chancellor 0 siblings, 0 replies; 12+ messages in thread From: Nathan Chancellor @ 2018-10-18 3:34 UTC (permalink / raw) To: Masahiro Yamada; +Cc: isdn, Networking, Linux Kernel Mailing List On Thu, Oct 18, 2018 at 12:23:37PM +0900, Masahiro Yamada wrote: > Hi Nathan, > > On Thu, Oct 18, 2018 at 3:09 AM Nathan Chancellor > <natechancellor@gmail.com> wrote: > > > > Clang warns: > > > > drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body > > [-Werror,-Wempty-body] > > if (Read_hfc(cs, HFCPCI_INT_S1)); > > ^ > > drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a > > separate line to silence this warning > > > > Use the format found in drivers/isdn/hardware/mISDN/hfcpci.c of casting > > the return of Read_hfc to void, instead of using an empty if statement. > > > > While we're at it, Masahiro Yamada pointed out that {Read,Write}_hfc > > should be using a standard access method in hfc_pci.h. Use the one found > > in drivers/isdn/hardware/mISDN/hfc_pci.h. > > > > Link: https://github.com/ClangBuiltLinux/linux/issues/66 > > Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> > > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> > > --- > > drivers/isdn/hisax/hfc_pci.c | 6 +++--- > > drivers/isdn/hisax/hfc_pci.h | 4 ++-- > > drivers/isdn/hisax/hfc_sx.c | 6 +++--- > > 3 files changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c > > index 8e5b03161b2f..a63b9155b697 100644 > > --- a/drivers/isdn/hisax/hfc_pci.c > > +++ b/drivers/isdn/hisax/hfc_pci.c > > @@ -128,7 +128,7 @@ reset_hfcpci(struct IsdnCardState *cs) > > Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); > > > > /* Clear already pending ints */ > > - if (Read_hfc(cs, HFCPCI_INT_S1)); > > + (void) Read_hfc(cs, HFCPCI_INT_S1); > > > > Why is this '(void)' necessary? > It's not. I never tested without it since last time I tried to remove the if statement, GCC complained at me but that was before the readb change like you suggested. I will go ahead and send a v2 with that cleaned up. > I see no warning without it. > > > > -- > Best Regards > Masahiro Yamada Thanks for the review! Nathan ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-17 18:06 [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors Nathan Chancellor 2018-10-18 3:23 ` Masahiro Yamada @ 2018-10-18 3:49 ` Nathan Chancellor 2018-10-18 22:42 ` David Miller 2018-10-19 1:11 ` [PATCH v3] " Nathan Chancellor 1 sibling, 2 replies; 12+ messages in thread From: Nathan Chancellor @ 2018-10-18 3:49 UTC (permalink / raw) To: Karsten Keil, David S. Miller Cc: netdev, linux-kernel, Masahiro Yamada, Nathan Chancellor Clang warns: drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body [-Werror,-Wempty-body] if (Read_hfc(cs, HFCPCI_INT_S1)); ^ drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a separate line to silence this warning In my attempt to hide the warnings because I thought they didn't serve any purpose[1], Masahiro Yamada pointed out that {Read,Write}_hfc in hci_pci.c should be using a standard register access method; otherwise, the compiler will just remove the if statements. For hfc_pci, use the versions of {Read,Write}_hfc found in drivers/isdn/hardware/mISDN/hfc_pCI.h then remove the empty if statements. For hfc_sx, {Read,Write}_hfc are already use a proper register accessor (inb, outb) so just remove the unnecessary if statements. [1]: https://lore.kernel.org/lkml/20181016021454.11953-1-natechancellor@gmail.com/ Link: https://github.com/ClangBuiltLinux/linux/issues/66 Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> --- v1 -> v2: * Remove unnecessary cast to void, just remove if statements (thanks to review from Masahiro). * Clean up commit message. drivers/isdn/hisax/hfc_pci.c | 6 +++--- drivers/isdn/hisax/hfc_pci.h | 4 ++-- drivers/isdn/hisax/hfc_sx.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 8e5b03161b2f..7bcd104e9dfe 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -128,7 +128,7 @@ reset_hfcpci(struct IsdnCardState *cs) Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, HFCPCI_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -158,7 +158,7 @@ reset_hfcpci(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcpci.int_m2 = HFCPCI_IRQ_ENABLE; Write_hfc(cs, HFCPCI_INT_M2, cs->hw.hfcpci.int_m2); - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); } /***************************************************/ @@ -1537,7 +1537,7 @@ hfcpci_bh(struct work_struct *work) cs->hw.hfcpci.int_m1 &= ~HFCPCI_INTS_TIMER; Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, 4 | HFCPCI_LOAD_STATE); udelay(10); Write_hfc(cs, HFCPCI_STATES, 4); diff --git a/drivers/isdn/hisax/hfc_pci.h b/drivers/isdn/hisax/hfc_pci.h index 4e58700a3e61..4c3b3ba35726 100644 --- a/drivers/isdn/hisax/hfc_pci.h +++ b/drivers/isdn/hisax/hfc_pci.h @@ -228,8 +228,8 @@ typedef union { } fifo_area; -#define Write_hfc(a, b, c) (*(((u_char *)a->hw.hfcpci.pci_io) + b) = c) -#define Read_hfc(a, b) (*(((u_char *)a->hw.hfcpci.pci_io) + b)) +#define Write_hfc(a, b, c) (writeb(c, (a->hw.hfcpci.pci_io) + b)) +#define Read_hfc(a, b) (readb((a->hw.hfcpci.pci_io) + b)) extern void main_irq_hcpci(struct BCState *bcs); extern void releasehfcpci(struct IsdnCardState *cs); diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c index 4d3b4b2f2612..12af628d9b2c 100644 --- a/drivers/isdn/hisax/hfc_sx.c +++ b/drivers/isdn/hisax/hfc_sx.c @@ -381,7 +381,7 @@ reset_hfcsx(struct IsdnCardState *cs) Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, HFCSX_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -411,7 +411,7 @@ reset_hfcsx(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcsx.int_m2 = HFCSX_IRQ_ENABLE; Write_hfc(cs, HFCSX_INT_M2, cs->hw.hfcsx.int_m2); - if (Read_hfc(cs, HFCSX_INT_S2)); + Read_hfc(cs, HFCSX_INT_S2); } /***************************************************/ @@ -1288,7 +1288,7 @@ hfcsx_bh(struct work_struct *work) cs->hw.hfcsx.int_m1 &= ~HFCSX_INTS_TIMER; Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, 4 | HFCSX_LOAD_STATE); udelay(10); -- 2.19.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-18 3:49 ` [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements Nathan Chancellor @ 2018-10-18 22:42 ` David Miller 2018-10-19 0:21 ` Nathan Chancellor 2018-10-19 1:11 ` [PATCH v3] " Nathan Chancellor 1 sibling, 1 reply; 12+ messages in thread From: David Miller @ 2018-10-18 22:42 UTC (permalink / raw) To: natechancellor; +Cc: isdn, netdev, linux-kernel, yamada.masahiro From: Nathan Chancellor <natechancellor@gmail.com> Date: Wed, 17 Oct 2018 20:49:36 -0700 > @@ -228,8 +228,8 @@ typedef union { > } fifo_area; > > > -#define Write_hfc(a, b, c) (*(((u_char *)a->hw.hfcpci.pci_io) + b) = c) > -#define Read_hfc(a, b) (*(((u_char *)a->hw.hfcpci.pci_io) + b)) > +#define Write_hfc(a, b, c) (writeb(c, (a->hw.hfcpci.pci_io) + b)) > +#define Read_hfc(a, b) (readb((a->hw.hfcpci.pci_io) + b)) This will add new kinds of warnings. The problem is that readb/writeb/etc. take an __iomem pointer, but pci_io is declared as plain "unsigned char *". It should be something like "void * __iomem" of similar. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-18 22:42 ` David Miller @ 2018-10-19 0:21 ` Nathan Chancellor 2018-10-19 0:23 ` David Miller 0 siblings, 1 reply; 12+ messages in thread From: Nathan Chancellor @ 2018-10-19 0:21 UTC (permalink / raw) To: David Miller; +Cc: isdn, netdev, linux-kernel, yamada.masahiro On Thu, Oct 18, 2018 at 03:42:19PM -0700, David Miller wrote: > From: Nathan Chancellor <natechancellor@gmail.com> > Date: Wed, 17 Oct 2018 20:49:36 -0700 > > > @@ -228,8 +228,8 @@ typedef union { > > } fifo_area; > > > > > > -#define Write_hfc(a, b, c) (*(((u_char *)a->hw.hfcpci.pci_io) + b) = c) > > -#define Read_hfc(a, b) (*(((u_char *)a->hw.hfcpci.pci_io) + b)) > > +#define Write_hfc(a, b, c) (writeb(c, (a->hw.hfcpci.pci_io) + b)) > > +#define Read_hfc(a, b) (readb((a->hw.hfcpci.pci_io) + b)) > > This will add new kinds of warnings. > > The problem is that readb/writeb/etc. take an __iomem pointer, but pci_io > is declared as plain "unsigned char *". It should be something like > "void * __iomem" of similar. Thanks for the review, I went ahead and compiled with the following diff on top of v2 and got no warnings from Clang, GCC, or sparse, does this seem satisfactory for v3? Nathan ======================================================================== diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 7bcd104e9dfe..3dbaee8c604f 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); cs->hw.hfcpci.fifos = NULL; - iounmap((void *)cs->hw.hfcpci.pci_io); + iounmap(cs->hw.hfcpci.pci_io); } /********************************************************************************/ @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); return (0); } - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; + cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); if (!cs->hw.hfcpci.pci_io) { diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h index 338d0408b377..40080e06421c 100644 --- a/drivers/isdn/hisax/hisax.h +++ b/drivers/isdn/hisax/hisax.h @@ -703,7 +703,7 @@ struct hfcPCI_hw { unsigned char nt_mode; int nt_timer; struct pci_dev *dev; - unsigned char *pci_io; /* start of PCI IO memory */ + void __iomem *pci_io; /* start of PCI IO memory */ dma_addr_t dma; /* dma handle for Fifos */ void *fifos; /* FIFO memory */ int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */ ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-19 0:21 ` Nathan Chancellor @ 2018-10-19 0:23 ` David Miller 2018-10-19 0:42 ` Nathan Chancellor 0 siblings, 1 reply; 12+ messages in thread From: David Miller @ 2018-10-19 0:23 UTC (permalink / raw) To: natechancellor; +Cc: isdn, netdev, linux-kernel, yamada.masahiro From: Nathan Chancellor <natechancellor@gmail.com> Date: Thu, 18 Oct 2018 17:21:17 -0700 > Thanks for the review, I went ahead and compiled with the following diff > on top of v2 and got no warnings from Clang, GCC, or sparse, does this > seem satisfactory for v3? Well, one thing I notice. > @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) > pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, > cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); > cs->hw.hfcpci.fifos = NULL; > - iounmap((void *)cs->hw.hfcpci.pci_io); > + iounmap(cs->hw.hfcpci.pci_io); > } Driver uses iounmap(). > @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) > printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); > return (0); > } > - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; > + cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; > printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); But does not use iomap(). You won't need any cast here if it did use iomap() properly. Thanks. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-19 0:23 ` David Miller @ 2018-10-19 0:42 ` Nathan Chancellor 2018-10-19 0:50 ` David Miller 0 siblings, 1 reply; 12+ messages in thread From: Nathan Chancellor @ 2018-10-19 0:42 UTC (permalink / raw) To: David Miller; +Cc: isdn, netdev, linux-kernel, yamada.masahiro On Thu, Oct 18, 2018 at 05:23:10PM -0700, David Miller wrote: > From: Nathan Chancellor <natechancellor@gmail.com> > Date: Thu, 18 Oct 2018 17:21:17 -0700 > > > Thanks for the review, I went ahead and compiled with the following diff > > on top of v2 and got no warnings from Clang, GCC, or sparse, does this > > seem satisfactory for v3? > > Well, one thing I notice. > > > @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) > > pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, > > cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); > > cs->hw.hfcpci.fifos = NULL; > > - iounmap((void *)cs->hw.hfcpci.pci_io); > > + iounmap(cs->hw.hfcpci.pci_io); > > } > > Driver uses iounmap(). > > > @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) > > printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); > > return (0); > > } > > - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; > > + cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; > > printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); > > But does not use iomap(). You won't need any cast here if it did use > iomap() properly. > > Thanks. So this? diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 3dbaee8c604f..ea0e4c6de3fb 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); return (0); } - cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; + cs->hw.hfcpci.pci_io = ioremap(dev_hfcpci->resource[1].start, 256); printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); if (!cs->hw.hfcpci.pci_io) { @@ -1716,7 +1716,6 @@ setup_hfcpci(struct IsdnCard *card) return 0; } pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u32)cs->hw.hfcpci.dma); - cs->hw.hfcpci.pci_io = ioremap((ulong) cs->hw.hfcpci.pci_io, 256); printk(KERN_INFO "HFC-PCI: defined at mem %p fifo %p(%lx) IRQ %d HZ %d\n", cs->hw.hfcpci.pci_io, Full context before the above diff should it be needed: cs->hw.hfcpci.pci_io = (void *)(unsigned long)dev_hfcpci->resource[1].start; printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); if (!cs->hw.hfcpci.pci_io) { printk(KERN_WARNING "HFC-PCI: No IO-Mem for PCI card found\n"); return (0); } /* Allocate memory for FIFOS */ cs->hw.hfcpci.fifos = pci_alloc_consistent(cs->hw.hfcpci.dev, 0x8000, &cs->hw.hfcpci.dma); if (!cs->hw.hfcpci.fifos) { printk(KERN_WARNING "HFC-PCI: Error allocating FIFO memory!\n"); return 0; } if (cs->hw.hfcpci.dma & 0x7fff) { printk(KERN_WARNING "HFC-PCI: Error DMA memory not on 32K boundary (%lx)\n", (u_long)cs->hw.hfcpci.dma); pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); return 0; } pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u32)cs->hw.hfcpci.dma); cs->hw.hfcpci.pci_io = ioremap((ulong) cs->hw.hfcpci.pci_io, 256); Thanks, Nathan ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-19 0:42 ` Nathan Chancellor @ 2018-10-19 0:50 ` David Miller 2018-10-19 1:01 ` Nathan Chancellor 0 siblings, 1 reply; 12+ messages in thread From: David Miller @ 2018-10-19 0:50 UTC (permalink / raw) To: natechancellor; +Cc: isdn, netdev, linux-kernel, yamada.masahiro From: Nathan Chancellor <natechancellor@gmail.com> Date: Thu, 18 Oct 2018 17:42:51 -0700 > On Thu, Oct 18, 2018 at 05:23:10PM -0700, David Miller wrote: >> From: Nathan Chancellor <natechancellor@gmail.com> >> Date: Thu, 18 Oct 2018 17:21:17 -0700 >> >> > Thanks for the review, I went ahead and compiled with the following diff >> > on top of v2 and got no warnings from Clang, GCC, or sparse, does this >> > seem satisfactory for v3? >> >> Well, one thing I notice. >> > >> > @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) >> > pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, >> > cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); >> > cs->hw.hfcpci.fifos = NULL; >> > - iounmap((void *)cs->hw.hfcpci.pci_io); >> > + iounmap(cs->hw.hfcpci.pci_io); >> > } >> >> Driver uses iounmap(). >> >> > @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) >> > printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); >> > return (0); >> > } >> > - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; >> > + cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; >> > printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); >> >> But does not use iomap(). You won't need any cast here if it did use >> iomap() properly. >> >> Thanks. > > So this? That's definitely a lot better, yes! I wonder what exactly it is checking there though. I guess it wants to see if the resource->start value is zero and bail with an error it so. Anyways, this code has been like this for ages and what you are proposing is definitely a significant improvement. Thanks. ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-19 0:50 ` David Miller @ 2018-10-19 1:01 ` Nathan Chancellor 0 siblings, 0 replies; 12+ messages in thread From: Nathan Chancellor @ 2018-10-19 1:01 UTC (permalink / raw) To: David Miller; +Cc: isdn, netdev, linux-kernel, yamada.masahiro On Thu, Oct 18, 2018 at 05:50:58PM -0700, David Miller wrote: > From: Nathan Chancellor <natechancellor@gmail.com> > Date: Thu, 18 Oct 2018 17:42:51 -0700 > > > On Thu, Oct 18, 2018 at 05:23:10PM -0700, David Miller wrote: > >> From: Nathan Chancellor <natechancellor@gmail.com> > >> Date: Thu, 18 Oct 2018 17:21:17 -0700 > >> > >> > Thanks for the review, I went ahead and compiled with the following diff > >> > on top of v2 and got no warnings from Clang, GCC, or sparse, does this > >> > seem satisfactory for v3? > >> > >> Well, one thing I notice. > >> > > > >> > @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) > >> > pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, > >> > cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); > >> > cs->hw.hfcpci.fifos = NULL; > >> > - iounmap((void *)cs->hw.hfcpci.pci_io); > >> > + iounmap(cs->hw.hfcpci.pci_io); > >> > } > >> > >> Driver uses iounmap(). > >> > >> > @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) > >> > printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); > >> > return (0); > >> > } > >> > - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; > >> > + cs->hw.hfcpci.pci_io = (void __iomem *)(unsigned long)dev_hfcpci->resource[1].start; > >> > printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); > >> > >> But does not use iomap(). You won't need any cast here if it did use > >> iomap() properly. > >> > >> Thanks. > > > > So this? > > That's definitely a lot better, yes! > > I wonder what exactly it is checking there though. I guess it wants to see if the > resource->start value is zero and bail with an error it so. > > Anyways, this code has been like this for ages and what you are proposing is > definitely a significant improvement. > > Thanks. I was thinking the same thing. I think ioremap will still error out if start is zero so this should be fine. I'll roll all of this up into v3, thanks a lot for the review! Nathan ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-18 3:49 ` [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements Nathan Chancellor 2018-10-18 22:42 ` David Miller @ 2018-10-19 1:11 ` Nathan Chancellor 2018-10-23 2:25 ` David Miller 1 sibling, 1 reply; 12+ messages in thread From: Nathan Chancellor @ 2018-10-19 1:11 UTC (permalink / raw) To: Karsten Keil, David S. Miller Cc: netdev, linux-kernel, Masahiro Yamada, Nathan Chancellor Clang warns: drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body [-Werror,-Wempty-body] if (Read_hfc(cs, HFCPCI_INT_S1)); ^ drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a separate line to silence this warning In my attempt to hide the warnings because I thought they didn't serve any purpose[1], Masahiro Yamada pointed out that {Read,Write}_hfc in hci_pci.c should be using a standard register access method; otherwise, the compiler will just remove the if statements. For hfc_pci, use the versions of {Read,Write}_hfc found in drivers/isdn/hardware/mISDN/hfc_pCI.h while converting pci_io to be 'void __iomem *' (and clean up ioremap) then remove the empty if statements. For hfc_sx, {Read,Write}_hfc are already use a proper register accessor (inb, outb) so just remove the unnecessary if statements. [1]: https://lore.kernel.org/lkml/20181016021454.11953-1-natechancellor@gmail.com/ Link: https://github.com/ClangBuiltLinux/linux/issues/66 Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> --- v1 -> v2: * Remove unnecessary cast to void, just remove if statements (thanks to review from Masahiro). * Clean up commit message. v2 -> v3: * Convert hfc_pci to properly use readb/writeb to avoid static checker issues. drivers/isdn/hisax/hfc_pci.c | 11 +++++------ drivers/isdn/hisax/hfc_pci.h | 4 ++-- drivers/isdn/hisax/hfc_sx.c | 6 +++--- drivers/isdn/hisax/hisax.h | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c index 8e5b03161b2f..ea0e4c6de3fb 100644 --- a/drivers/isdn/hisax/hfc_pci.c +++ b/drivers/isdn/hisax/hfc_pci.c @@ -86,7 +86,7 @@ release_io_hfcpci(struct IsdnCardState *cs) pci_free_consistent(cs->hw.hfcpci.dev, 0x8000, cs->hw.hfcpci.fifos, cs->hw.hfcpci.dma); cs->hw.hfcpci.fifos = NULL; - iounmap((void *)cs->hw.hfcpci.pci_io); + iounmap(cs->hw.hfcpci.pci_io); } /********************************************************************************/ @@ -128,7 +128,7 @@ reset_hfcpci(struct IsdnCardState *cs) Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, HFCPCI_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -158,7 +158,7 @@ reset_hfcpci(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcpci.int_m2 = HFCPCI_IRQ_ENABLE; Write_hfc(cs, HFCPCI_INT_M2, cs->hw.hfcpci.int_m2); - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); } /***************************************************/ @@ -1537,7 +1537,7 @@ hfcpci_bh(struct work_struct *work) cs->hw.hfcpci.int_m1 &= ~HFCPCI_INTS_TIMER; Write_hfc(cs, HFCPCI_INT_M1, cs->hw.hfcpci.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCPCI_INT_S1)); + Read_hfc(cs, HFCPCI_INT_S1); Write_hfc(cs, HFCPCI_STATES, 4 | HFCPCI_LOAD_STATE); udelay(10); Write_hfc(cs, HFCPCI_STATES, 4); @@ -1692,7 +1692,7 @@ setup_hfcpci(struct IsdnCard *card) printk(KERN_WARNING "HFC-PCI: No IRQ for PCI card found\n"); return (0); } - cs->hw.hfcpci.pci_io = (char *)(unsigned long)dev_hfcpci->resource[1].start; + cs->hw.hfcpci.pci_io = ioremap(dev_hfcpci->resource[1].start, 256); printk(KERN_INFO "HiSax: HFC-PCI card manufacturer: %s card name: %s\n", id_list[i].vendor_name, id_list[i].card_name); if (!cs->hw.hfcpci.pci_io) { @@ -1716,7 +1716,6 @@ setup_hfcpci(struct IsdnCard *card) return 0; } pci_write_config_dword(cs->hw.hfcpci.dev, 0x80, (u32)cs->hw.hfcpci.dma); - cs->hw.hfcpci.pci_io = ioremap((ulong) cs->hw.hfcpci.pci_io, 256); printk(KERN_INFO "HFC-PCI: defined at mem %p fifo %p(%lx) IRQ %d HZ %d\n", cs->hw.hfcpci.pci_io, diff --git a/drivers/isdn/hisax/hfc_pci.h b/drivers/isdn/hisax/hfc_pci.h index 4e58700a3e61..4c3b3ba35726 100644 --- a/drivers/isdn/hisax/hfc_pci.h +++ b/drivers/isdn/hisax/hfc_pci.h @@ -228,8 +228,8 @@ typedef union { } fifo_area; -#define Write_hfc(a, b, c) (*(((u_char *)a->hw.hfcpci.pci_io) + b) = c) -#define Read_hfc(a, b) (*(((u_char *)a->hw.hfcpci.pci_io) + b)) +#define Write_hfc(a, b, c) (writeb(c, (a->hw.hfcpci.pci_io) + b)) +#define Read_hfc(a, b) (readb((a->hw.hfcpci.pci_io) + b)) extern void main_irq_hcpci(struct BCState *bcs); extern void releasehfcpci(struct IsdnCardState *cs); diff --git a/drivers/isdn/hisax/hfc_sx.c b/drivers/isdn/hisax/hfc_sx.c index 4d3b4b2f2612..12af628d9b2c 100644 --- a/drivers/isdn/hisax/hfc_sx.c +++ b/drivers/isdn/hisax/hfc_sx.c @@ -381,7 +381,7 @@ reset_hfcsx(struct IsdnCardState *cs) Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, HFCSX_LOAD_STATE | 2); /* HFC ST 2 */ udelay(10); @@ -411,7 +411,7 @@ reset_hfcsx(struct IsdnCardState *cs) /* Finally enable IRQ output */ cs->hw.hfcsx.int_m2 = HFCSX_IRQ_ENABLE; Write_hfc(cs, HFCSX_INT_M2, cs->hw.hfcsx.int_m2); - if (Read_hfc(cs, HFCSX_INT_S2)); + Read_hfc(cs, HFCSX_INT_S2); } /***************************************************/ @@ -1288,7 +1288,7 @@ hfcsx_bh(struct work_struct *work) cs->hw.hfcsx.int_m1 &= ~HFCSX_INTS_TIMER; Write_hfc(cs, HFCSX_INT_M1, cs->hw.hfcsx.int_m1); /* Clear already pending ints */ - if (Read_hfc(cs, HFCSX_INT_S1)); + Read_hfc(cs, HFCSX_INT_S1); Write_hfc(cs, HFCSX_STATES, 4 | HFCSX_LOAD_STATE); udelay(10); diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h index 338d0408b377..40080e06421c 100644 --- a/drivers/isdn/hisax/hisax.h +++ b/drivers/isdn/hisax/hisax.h @@ -703,7 +703,7 @@ struct hfcPCI_hw { unsigned char nt_mode; int nt_timer; struct pci_dev *dev; - unsigned char *pci_io; /* start of PCI IO memory */ + void __iomem *pci_io; /* start of PCI IO memory */ dma_addr_t dma; /* dma handle for Fifos */ void *fifos; /* FIFO memory */ int last_bfifo_cnt[2]; /* marker saving last b-fifo frame count */ -- 2.19.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3] isdn: hfc_{pci,sx}: Avoid empty body if statements 2018-10-19 1:11 ` [PATCH v3] " Nathan Chancellor @ 2018-10-23 2:25 ` David Miller 0 siblings, 0 replies; 12+ messages in thread From: David Miller @ 2018-10-23 2:25 UTC (permalink / raw) To: natechancellor; +Cc: isdn, netdev, linux-kernel, yamada.masahiro From: Nathan Chancellor <natechancellor@gmail.com> Date: Thu, 18 Oct 2018 18:11:04 -0700 > Clang warns: > > drivers/isdn/hisax/hfc_pci.c:131:34: error: if statement has empty body > [-Werror,-Wempty-body] > if (Read_hfc(cs, HFCPCI_INT_S1)); > ^ > drivers/isdn/hisax/hfc_pci.c:131:34: note: put the semicolon on a > separate line to silence this warning > > In my attempt to hide the warnings because I thought they didn't serve > any purpose[1], Masahiro Yamada pointed out that {Read,Write}_hfc in > hci_pci.c should be using a standard register access method; otherwise, > the compiler will just remove the if statements. > > For hfc_pci, use the versions of {Read,Write}_hfc found in > drivers/isdn/hardware/mISDN/hfc_pCI.h while converting pci_io to be > 'void __iomem *' (and clean up ioremap) then remove the empty if > statements. > > For hfc_sx, {Read,Write}_hfc are already use a proper register accessor > (inb, outb) so just remove the unnecessary if statements. > > [1]: https://lore.kernel.org/lkml/20181016021454.11953-1-natechancellor@gmail.com/ > > Link: https://github.com/ClangBuiltLinux/linux/issues/66 > Suggested-by: Masahiro Yamada <yamada.masahiro@socionext.com> > Signed-off-by: Nathan Chancellor <natechancellor@gmail.com> Applied. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-10-23 2:25 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-10-17 18:06 [PATCH] isdn: hfc_{pci,sx}: Avoid empty body if statements and use proper register accessors Nathan Chancellor 2018-10-18 3:23 ` Masahiro Yamada 2018-10-18 3:34 ` Nathan Chancellor 2018-10-18 3:49 ` [PATCH v2] isdn: hfc_{pci,sx}: Avoid empty body if statements Nathan Chancellor 2018-10-18 22:42 ` David Miller 2018-10-19 0:21 ` Nathan Chancellor 2018-10-19 0:23 ` David Miller 2018-10-19 0:42 ` Nathan Chancellor 2018-10-19 0:50 ` David Miller 2018-10-19 1:01 ` Nathan Chancellor 2018-10-19 1:11 ` [PATCH v3] " Nathan Chancellor 2018-10-23 2:25 ` David Miller
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).