* [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use @ 2014-07-18 15:26 Benoit Taine 2014-07-18 16:22 ` John W. Linville ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Benoit Taine @ 2014-07-18 15:26 UTC (permalink / raw) To: linux-pci Cc: linux-mips, linux-fbdev, linux-mmc, dri-devel, linux-kernel, benoit.taine, ath5k-devel, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, xen-devel, MPT-FusionLinux.pdl, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto, devel We should prefer `const struct pci_device_id` over `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. This issue was reported by checkpatch. A simplified version of the semantic patch that makes this change is as follows (http://coccinelle.lip6.fr/): // <smpl> @@ identifier i; declarer name DEFINE_PCI_DEVICE_TABLE; initializer z; @@ - DEFINE_PCI_DEVICE_TABLE(i) + const struct pci_device_id i[] = z; // </smpl> I have 103 patches ready, and will only send a few for you to judge if it is useful enough, and to prevent from spamming too much. Thanks. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 15:26 [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use Benoit Taine @ 2014-07-18 16:22 ` John W. Linville 2014-07-18 16:43 ` Greg KH 2014-07-18 16:28 ` James Bottomley 2014-07-21 4:18 ` David Miller 2 siblings, 1 reply; 9+ messages in thread From: John W. Linville @ 2014-07-18 16:22 UTC (permalink / raw) To: Benoit Taine Cc: linux-mips, linux-fbdev, linux-pci, dri-devel, linux-kernel, ath5k-devel, MPT-FusionLinux.pdl, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-mmc, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, xen-devel, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto, devel On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > We should prefer `const struct pci_device_id` over > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > This issue was reported by checkpatch. Honestly, I prefer the macro -- it stands-out more. Maybe the style guidelines and/or checkpatch should change instead? John -- John W. Linville Someday the world will need a hero, and you linville@tuxdriver.com might be all we have. Be ready. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 16:22 ` John W. Linville @ 2014-07-18 16:43 ` Greg KH 2014-07-18 16:54 ` James Bottomley 2014-07-18 18:05 ` Joe Perches 0 siblings, 2 replies; 9+ messages in thread From: Greg KH @ 2014-07-18 16:43 UTC (permalink / raw) To: John W. Linville Cc: linux-mips, linux-fbdev, linux-pci, dri-devel, platform-driver-x86, Benoit Taine, ath5k-devel, linux-acenic, linux-scsi, users, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-wireless, xen-devel, MPT-FusionLinux.pdl, ath9k-devel, wil6210, linux-pcmcia, linux-can, virtualization, netdev, linux-mmc, linux-kernel, e1000-devel, linux-crypto, devel On Fri, Jul 18, 2014 at 12:22:13PM -0400, John W. Linville wrote: > On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > > We should prefer `const struct pci_device_id` over > > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > > This issue was reported by checkpatch. > > Honestly, I prefer the macro -- it stands-out more. Maybe the style > guidelines and/or checkpatch should change instead? The macro is horrid, no other bus has this type of thing just to save a few characters in typing, so why should PCI be "special" in this regard anymore? thanks, greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 16:43 ` Greg KH @ 2014-07-18 16:54 ` James Bottomley 2014-07-18 18:17 ` Greg KH 2014-07-18 18:05 ` Joe Perches 1 sibling, 1 reply; 9+ messages in thread From: James Bottomley @ 2014-07-18 16:54 UTC (permalink / raw) To: Greg KH Cc: linux-mips, linux-fbdev, linux-pci, dri-devel, virtualization, Benoit Taine, ath5k-devel, linux-acenic, linux-scsi, users, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-wireless, xen-devel, MPT-FusionLinux.pdl, ath9k-devel, wil6210, linux-pcmcia, John W. Linville, linux-can, platform-driver-x86, netdev, linux-mmc, linux-kernel, e1000-devel, linux-crypto On Fri, 2014-07-18 at 09:43 -0700, Greg KH wrote: > On Fri, Jul 18, 2014 at 12:22:13PM -0400, John W. Linville wrote: > > On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > > > We should prefer `const struct pci_device_id` over > > > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > > > This issue was reported by checkpatch. > > > > Honestly, I prefer the macro -- it stands-out more. Maybe the style > > guidelines and/or checkpatch should change instead? > > The macro is horrid, no other bus has this type of thing just to save a > few characters in typing OK, so this is the macro: #define DEFINE_PCI_DEVICE_TABLE(_table) \ const struct pci_device_id _table[] Could you explain what's so horrible? The reason it's useful today is that people forget the const (and sometimes the [] making it a true table instead of a pointer). If you use the DEFINE_PCI_DEVICE_TABLE macro, the compile breaks if you use it wrongly (good) and you automatically get the correct annotations. > , so why should PCI be "special" in this regard > anymore? I think the PCI usage dwarfs most other bus types now, so you could turn the question around. However, I don't think majority voting is a good guide to best practise; lets debate the merits for their own sake. James ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 16:54 ` James Bottomley @ 2014-07-18 18:17 ` Greg KH 2014-07-18 18:50 ` James Bottomley 0 siblings, 1 reply; 9+ messages in thread From: Greg KH @ 2014-07-18 18:17 UTC (permalink / raw) To: James Bottomley Cc: John W. Linville, Benoit Taine, linux-mips, linux-fbdev, linux-pci, dri-devel, linux-kernel, ath5k-devel, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-mmc, MPT-FusionLinux.pdl, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, xen-devel, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto On Fri, Jul 18, 2014 at 09:54:32AM -0700, James Bottomley wrote: > On Fri, 2014-07-18 at 09:43 -0700, Greg KH wrote: > > On Fri, Jul 18, 2014 at 12:22:13PM -0400, John W. Linville wrote: > > > On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > > > > We should prefer `const struct pci_device_id` over > > > > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > > > > This issue was reported by checkpatch. > > > > > > Honestly, I prefer the macro -- it stands-out more. Maybe the style > > > guidelines and/or checkpatch should change instead? > > > > The macro is horrid, no other bus has this type of thing just to save a > > few characters in typing > > OK, so this is the macro: > > #define DEFINE_PCI_DEVICE_TABLE(_table) \ > const struct pci_device_id _table[] > > Could you explain what's so horrible? > > The reason it's useful today is that people forget the const (and > sometimes the [] making it a true table instead of a pointer). If you > use the DEFINE_PCI_DEVICE_TABLE macro, the compile breaks if you use it > wrongly (good) and you automatically get the correct annotations. We have almost 1000 more uses of the non-macro version than the "macro" version in the kernel today: $ git grep -w DEFINE_PCI_DEVICE_TABLE | wc -l 262 $ git grep "const struct pci_device_id" | wc -l 1254 My big complaint is that we need to be consistant, either pick one or the other and stick to it. As the macro is the least used, it's easiest to fix up, and it also is more consistant with all other kernel subsystems which do not have such a macro. As there is no need for the __init macro mess anymore, there's no real need for the DEFINE_PCI_DEVICE_TABLE macro either. I think checkpatch will catch the use of non-const users for the id table already today, it catches lots of other uses like this already. > > , so why should PCI be "special" in this regard > > anymore? > > I think the PCI usage dwarfs most other bus types now, so you could turn > the question around. However, I don't think majority voting is a good > guide to best practise; lets debate the merits for their own sake. Not really "dwarf", USB is close with over 700 such structures: $ git grep "const struct usb_device_id" | wc -l 725 And i2c is almost just as big as PCI: $ git grep "const struct i2c_device_id" | wc -l 1223 So again, this macro is not consistent with the majority of PCI drivers, nor with any other type of "device id" declaration in the kernel, which is why I feel it should be removed. And finally, the PCI documentation itself says to not use this macro, so this isn't a "new" thing. From Documentation/PCI/pci.txt: The ID table is an array of struct pci_device_id entries ending with an all-zero entry. Definitions with static const are generally preferred. Use of the deprecated macro DEFINE_PCI_DEVICE_TABLE should be avoided. That wording went into the file last December, when we last talked about this and everyone in that discussion agreed to remove the macro for the above reasons. Consistency matters. thanks, greg k-h ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 18:17 ` Greg KH @ 2014-07-18 18:50 ` James Bottomley 0 siblings, 0 replies; 9+ messages in thread From: James Bottomley @ 2014-07-18 18:50 UTC (permalink / raw) To: Greg KH Cc: John W. Linville, Benoit Taine, linux-mips, linux-fbdev, linux-pci, dri-devel, linux-kernel, ath5k-devel, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-mmc, MPT-FusionLinux.pdl, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, xen-devel, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto On Fri, 2014-07-18 at 11:17 -0700, Greg KH wrote: > On Fri, Jul 18, 2014 at 09:54:32AM -0700, James Bottomley wrote: > > On Fri, 2014-07-18 at 09:43 -0700, Greg KH wrote: > > > On Fri, Jul 18, 2014 at 12:22:13PM -0400, John W. Linville wrote: > > > > On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > > > > > We should prefer `const struct pci_device_id` over > > > > > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > > > > > This issue was reported by checkpatch. > > > > > > > > Honestly, I prefer the macro -- it stands-out more. Maybe the style > > > > guidelines and/or checkpatch should change instead? > > > > > > The macro is horrid, no other bus has this type of thing just to save a > > > few characters in typing > > > > OK, so this is the macro: > > > > #define DEFINE_PCI_DEVICE_TABLE(_table) \ > > const struct pci_device_id _table[] > > > > Could you explain what's so horrible? > > > > The reason it's useful today is that people forget the const (and > > sometimes the [] making it a true table instead of a pointer). If you > > use the DEFINE_PCI_DEVICE_TABLE macro, the compile breaks if you use it > > wrongly (good) and you automatically get the correct annotations. > > We have almost 1000 more uses of the non-macro version than the "macro" > version in the kernel today: > $ git grep -w DEFINE_PCI_DEVICE_TABLE | wc -l > 262 > $ git grep "const struct pci_device_id" | wc -l > 1254 > > My big complaint is that we need to be consistant, either pick one or > the other and stick to it. As the macro is the least used, it's easiest > to fix up, and it also is more consistant with all other kernel > subsystems which do not have such a macro. I've a weak preference for consistency, but not at the expense of hundreds of patches churning the kernel to remove an innocuous macro. Churn costs time and effort. > As there is no need for the __init macro mess anymore, there's no real > need for the DEFINE_PCI_DEVICE_TABLE macro either. I think checkpatch > will catch the use of non-const users for the id table already today, it > catches lots of other uses like this already. > > > > , so why should PCI be "special" in this regard > > > anymore? > > > > I think the PCI usage dwarfs most other bus types now, so you could turn > > the question around. However, I don't think majority voting is a good > > guide to best practise; lets debate the merits for their own sake. > > Not really "dwarf", USB is close with over 700 such structures: > $ git grep "const struct usb_device_id" | wc -l > 725 > > And i2c is almost just as big as PCI: > $ git grep "const struct i2c_device_id" | wc -l > 1223 > > So again, this macro is not consistent with the majority of PCI drivers, > nor with any other type of "device id" declaration in the kernel, which > is why I feel it should be removed. > > And finally, the PCI documentation itself says to not use this macro, so > this isn't a "new" thing. From Documentation/PCI/pci.txt: > > The ID table is an array of struct pci_device_id entries ending with an > all-zero entry. Definitions with static const are generally preferred. > Use of the deprecated macro DEFINE_PCI_DEVICE_TABLE should be avoided. > > That wording went into the file last December, when we last talked about > this and everyone in that discussion agreed to remove the macro for the > above reasons. > > Consistency matters. In this case, I don't think it does that much ... a cut and paste either way (from a macro or non-macro based driver) yields correct code. Since there's no bug here and no apparent way to misuse the macro, why bother? Anyway, it's PCI code ... let the PCI maintainer decide. However, if he does want this do it as one big bang patch via either the PCI or Trivial tree (latter because Jiří has experience doing this, but the former might be useful so the decider feels the pain ...) James ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 16:43 ` Greg KH 2014-07-18 16:54 ` James Bottomley @ 2014-07-18 18:05 ` Joe Perches 1 sibling, 0 replies; 9+ messages in thread From: Joe Perches @ 2014-07-18 18:05 UTC (permalink / raw) To: Greg KH Cc: John W. Linville, Benoit Taine, linux-mips, linux-fbdev, linux-pci, dri-devel, linux-kernel, ath5k-devel, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-mmc, MPT-FusionLinux.pdl, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, xen-devel, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto On Fri, 2014-07-18 at 09:43 -0700, Greg KH wrote: > On Fri, Jul 18, 2014 at 12:22:13PM -0400, John W. Linville wrote: > > On Fri, Jul 18, 2014 at 05:26:47PM +0200, Benoit Taine wrote: > > > We should prefer `const struct pci_device_id` over > > > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > > > This issue was reported by checkpatch. > > scripts/checkpatch.pl | 4 ++-- > > Honestly, I prefer the macro -- it stands-out more. Maybe the style > > guidelines and/or checkpatch should change instead? > > The macro is horrid, no other bus has this type of thing just to save a > few characters in typing, so why should PCI be "special" in this regard > anymore? I think it doesn't matter much. The PCI_DEVICE and PCI_VDEVICE macro uses are somewhat similar and are frequently used with PCI_DEVICE_TABLE, so there's some commonality there. The checkpatch message could be made --strict/CHK instead of WARN so most people would never see it. Of course it could be removed altogether too. I don't care. --- (suggested patch is for -next) 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index dc72a9b..754fbf2 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -3018,8 +3018,8 @@ sub process { # check for uses of DEFINE_PCI_DEVICE_TABLE if ($line =~ /\bDEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=/) { - if (WARN("DEFINE_PCI_DEVICE_TABLE", - "Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) && + if (CHK("DEFINE_PCI_DEVICE_TABLE", + "Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) && $fix) { $fixed[$fixlinenr] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /; } ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 15:26 [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use Benoit Taine 2014-07-18 16:22 ` John W. Linville @ 2014-07-18 16:28 ` James Bottomley 2014-07-21 4:18 ` David Miller 2 siblings, 0 replies; 9+ messages in thread From: James Bottomley @ 2014-07-18 16:28 UTC (permalink / raw) To: Benoit Taine Cc: linux-mips, linux-fbdev, linux-pci, dri-devel, linux-kernel, ath5k-devel, linux-acenic, linux-scsi, linux-rdma, ath10k, linux-hippi, industrypack-devel, linux-mmc, MPT-FusionLinux.pdl, virtualization, ath9k-devel, wil6210, linux-pcmcia, linux-can, xen-devel, platform-driver-x86, netdev, linux-wireless, users, e1000-devel, linux-crypto, devel On Fri, 2014-07-18 at 17:26 +0200, Benoit Taine wrote: > We should prefer `const struct pci_device_id` over > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > This issue was reported by checkpatch. What kernel coding style? checkpatch isn't the arbiter of style, if that's the only problem. The DEFINE_PCI macro was a well reasoned addition when it was added in 2008. The problem was most people were getting the definition wrong. When we converted away from CONFIG_HOTPLUG, having this DEFINE_ meant that only one place needed changing instead of hundreds for PCI tables. The reason people were getting the PCI table wrong was mostly the init section specifiers which are now gone, but it has enough underlying utility (mostly constification) that I don't think we'd want to churn the kernel hugely to make a change to struct pci_table and then have to start detecting and fixing misuses. James ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use 2014-07-18 15:26 [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use Benoit Taine 2014-07-18 16:22 ` John W. Linville 2014-07-18 16:28 ` James Bottomley @ 2014-07-21 4:18 ` David Miller 2 siblings, 0 replies; 9+ messages in thread From: David Miller @ 2014-07-21 4:18 UTC (permalink / raw) To: benoit.taine Cc: linux-pci, ath5k-devel, ath9k-devel, linux-hippi, dri-devel, linux-acenic, wil6210, platform-driver-x86, linux-scsi, linux-kernel, netdev, linux-wireless, linux-mips, users, linux-rdma, virtualization, industrypack-devel, linux-can, linux-mmc, linux-fbdev, ath10k, linux-crypto, MPT-FusionLinux.pdl, devel, xen-devel, linux-pcmcia, e1000-devel From: Benoit Taine <benoit.taine@lip6.fr> Date: Fri, 18 Jul 2014 17:26:47 +0200 > We should prefer `const struct pci_device_id` over > `DEFINE_PCI_DEVICE_TABLE` to meet kernel coding style guidelines. > This issue was reported by checkpatch. > > A simplified version of the semantic patch that makes this change is as > follows (http://coccinelle.lip6.fr/): > > // <smpl> > > @@ > identifier i; > declarer name DEFINE_PCI_DEVICE_TABLE; > initializer z; > @@ > > - DEFINE_PCI_DEVICE_TABLE(i) > + const struct pci_device_id i[] > = z; > > // </smpl> > > I have 103 patches ready, and will only send a few for you to judge if > it is useful enough, and to prevent from spamming too much. I'm fine with this wrt. the networking changes, but I don't think this should be merged via my tree. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-07-21 4:18 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-07-18 15:26 [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use Benoit Taine 2014-07-18 16:22 ` John W. Linville 2014-07-18 16:43 ` Greg KH 2014-07-18 16:54 ` James Bottomley 2014-07-18 18:17 ` Greg KH 2014-07-18 18:50 ` James Bottomley 2014-07-18 18:05 ` Joe Perches 2014-07-18 16:28 ` James Bottomley 2014-07-21 4:18 ` 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).