lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120319163103.GC3694@kroah.com>
Date:	Mon, 19 Mar 2012 09:31:03 -0700
From:	Greg KH <gregkh@...uxfoundation.org>
To:	Gerard Snitselaar <dev@...tselaar.org>
Cc:	devel@...verdev.osuosl.org, fmhess@...rs.sourceforge.net,
	abbotti@....co.uk, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] staging: comedi: resolve section mismatch in s626

On Sun, Mar 18, 2012 at 08:09:25PM -0700, Gerard Snitselaar wrote:
> s626_attach is referencing s626_pci_table which is annotated
> __devinitconst. Put pci vendor/device ids in the s626_board struct and
> use s626_boards instead similar to what is done in gsc_hpdi.
> 
> v2: I had moved the PCI id defines to s626.h earlier, but later
> decided to leave them in s626.c and forgot to move them up above where
> they are being used in s626_boards.
> 
> Signed-off-by: Gerard Snitselaar <dev@...tselaar.org>
> ---
>  drivers/staging/comedi/drivers/s626.c |   27 +++++++++++++++++++--------
>  1 files changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c
> index 23fc64b..e531f1c 100644
> --- a/drivers/staging/comedi/drivers/s626.c
> +++ b/drivers/staging/comedi/drivers/s626.c
> @@ -83,8 +83,17 @@ MODULE_AUTHOR("Gianluca Palli <gpalli@...s.unibo.it>");
>  MODULE_DESCRIPTION("Sensoray 626 Comedi driver module");
>  MODULE_LICENSE("GPL");
>  
> +#define PCI_VENDOR_ID_S626 0x1131
> +#define PCI_DEVICE_ID_S626 0x7146
> +#define PCI_SUBVENDOR_ID_S626 0x6000
> +#define PCI_SUBDEVICE_ID_S626 0x0272
> +
>  struct s626_board {
>         const char *name;
> +       int vendor_id;
> +       int device_id;
> +       int subvendor_id;
> +       int subdevice_id;
>         int ai_chans;
>         int ai_bits;
>         int ao_chans;
> @@ -97,6 +106,10 @@ struct s626_board {
>  static const struct s626_board s626_boards[] = {
>         {
>          .name = "s626",
> +        .vendor_id = PCI_VENDOR_ID_S626,
> +        .device_id = PCI_DEVICE_ID_S626,
> +        .subvendor_id = PCI_SUBVENDOR_ID_S626,
> +        .subdevice_id = PCI_SUBDEVICE_ID_S626,
>          .ai_chans = S626_ADC_CHANNELS,
>          .ai_bits = 14,
>          .ao_chans = S626_DAC_CHANNELS,
> @@ -108,8 +121,6 @@ static const struct s626_board s626_boards[] = {
>  };
>  
>  #define thisboard ((const struct s626_board *)dev->board_ptr)
> -#define PCI_VENDOR_ID_S626 0x1131
> -#define PCI_DEVICE_ID_S626 0x7146
>  
>  /*
>   * For devices with vendor:device id == 0x1131:0x7146 you must specify
> @@ -117,7 +128,7 @@ static const struct s626_board s626_boards[] = {
>   * Philips SAA7146 media/dvb based cards.
>   */
>  static DEFINE_PCI_DEVICE_TABLE(s626_pci_table) = {
> -       {PCI_VENDOR_ID_S626, PCI_DEVICE_ID_S626, 0x6000, 0x0272, 0, 0, 0},
> +       {PCI_VENDOR_ID_S626, PCI_DEVICE_ID_S626, PCI_SUBVENDOR_ID_S626, PCI_SUBDEVICE_ID_S626, 0, 0, 0},
>         {0}
>  };
>  
> @@ -554,17 +565,17 @@ static int s626_attach(struct comedi_device *dev, struct comedi_devconfig *it)
>         resource_size_t resourceStart;
>         dma_addr_t appdma;
>         struct comedi_subdevice *s;
> -       const struct pci_device_id *ids;
>         struct pci_dev *pdev = NULL;
>  
>         if (alloc_private(dev, sizeof(struct s626_private)) < 0)
>                 return -ENOMEM;
>  
> -       for (i = 0; i < (ARRAY_SIZE(s626_pci_table) - 1) && !pdev; i++) {
> -               ids = &s626_pci_table[i];
> +       for (i = 0; i < ARRAY_SIZE(s626_boards) && !pdev; i++) {
>                 do {
> -                       pdev = pci_get_subsys(ids->vendor, ids->device,
> -                                             ids->subvendor, ids->subdevice,
> +                       pdev = pci_get_subsys(s626_boards[i].vendor_id,
> +                                             s626_boards[i].device_id,
> +                                             s626_boards[i].subvendor_id,
> +                                             s626_boards[i].subdevice_id,
>                                               pdev);

Ick, why is this loop even needed?  We are only here if the pci device
is present in the system so this shouldn't be needed at all, right?

Or is this a bit more complex than I am making it out to be?

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ