Re: [PATCH 4/6] PCI: Fix Intel generic reset quirk class code check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[-cc Dexuan, Matthew (bounced)]
[+cc Mathias, since MAINTAINERS mentions USB, Intel, and you in one entry :)]

On Fri, Jun 19, 2015 at 5:42 PM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote:
> We checked for "dev->class == PCI_CLASS_SERIAL_USB", but dev->class
> contains the entire three-byte base class/sub-class/interface, while
> PCI_CLASS_SERIAL_USB is only the two-byte base class/sub-class.
>
> This error meant that we used the Intel device-specific reset on devices
> with class code 0x000c03 instead of those with class code 0x0c03xx.
> 0x000c03 is a reserved value in the 0x00 backwards compatibility base class
> and shouldn't match any devices, so I think reset_intel_generic_dev()
> always failed.
>
> Shift dev->class to discard the interface byte before comparing with
> PCI_CLASS_SERIAL_USB.
>
> Fixes: aeb30016fec3 ("PCI: add Intel USB specific reset method")
> Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> CC: Dexuan Cui <dexuan.cui@xxxxxxxxx>
> CC: Yu Zhao <yu.zhao@xxxxxxxxx>
> ---
>  drivers/pci/quirks.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 8bc60c2..356a401 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -3358,7 +3358,7 @@ static int reset_intel_generic_dev(struct pci_dev *dev, int probe)
>         int pos;
>
>         /* only implement PCI_CLASS_SERIAL_USB at present */
> -       if (dev->class == PCI_CLASS_SERIAL_USB) {
> +       if ((dev->class >> 8) == PCI_CLASS_SERIAL_USB) {

I'm a little bit concerned about this change because it *looks* like
this has always been broken, but I assume it was tested and somebody
would have noticed.

>                 pos = pci_find_capability(dev, PCI_CAP_ID_VNDR);
>                 if (!pos)
>                         return -ENOTTY;
>
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux