Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-22 Thread Benoit Taine
On 21/07/2014 17:16, Bjorn Helgaas wrote:
 [+cc Jingoo]
 
 On Fri, Jul 18, 2014 at 12:50 PM, James Bottomley
  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 ...)
 
 I don't feel strongly either way, so I guess I'm OK with this, and in
 the spirit of feeling the pain, I'm willing to handle it.  Jingoo
 proposed similar patches, so it might be nice to give him some credit.
 
 Benoit, how about if you wait until about half-way through the merge
 window after v3.16 releases, generate an up-to-date single patch, and
 post that?  Then we can try to get it in before v3.17-rc1 to minimize
 merge hassles.

Sure, I will do this.

-- 
Benoît Taine
Master cycle intern
Regal Team. LIP6
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-21 Thread Bjorn Helgaas
[+cc Jingoo]

On Fri, Jul 18, 2014 at 12:50 PM, James Bottomley
james.bottom...@hansenpartnership.com wrote:
 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 ...)

I don't feel strongly either way, so I guess I'm OK with this, and in
the spirit of feeling the pain, I'm willing to handle it.  Jingoo
proposed similar patches, so it might be nice to give him some credit.

Benoit, how about if you wait until about half-way through the merge
window after v3.16 releases, generate an up-to-date single patch, and
post that?  Then we can try to get it in before v3.17-rc1 to minimize
merge hassles.

Bjorn
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Benoit Taine
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.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread James Bottomley
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


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread John W. Linville
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. LinvilleSomeday the world will need a hero, and you
linvi...@tuxdriver.com  might be all we have.  Be ready.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Keller, Jacob E
On Fri, 2014-07-18 at 09:28 -0700, James Bottomley wrote:
 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
 
 
 --
 To unsubscribe from this list: send the line unsubscribe netdev in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

I would rather fix the misuses of the macro, than remove it. Could we
possibly make checkpatch smart enough to tell when the macro is misused?

Thanks,
Jake
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Greg KH
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
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread James Bottomley
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


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Joe Perches
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\[\] = /;
}


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Greg KH
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
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread James Bottomley
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


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Dave Airlie

 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

did you check for non-const ones? just to see if we have any of the
broken case in the tree :-)

as for consistency, pci_dev vs usb_device :-P

Dave.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 0/25] Replace DEFINE_PCI_DEVICE_TABLE macro use

2014-07-18 Thread Greg KH
On Sat, Jul 19, 2014 at 07:14:12AM +1000, Dave Airlie wrote:
 
  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
 
 did you check for non-const ones? just to see if we have any of the
 broken case in the tree :-)

I didn't :)

 as for consistency, pci_dev vs usb_device :-P

Read farther down the email...

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel