Re: [PATCH v4 2/3] PCI/ASPM: Fix NULL pointer when find parent pcie_link_state

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

 



> I think we also have a problem here:
> 
>    517  static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev)
>    518  {
>    519          struct pcie_link_state *link;
>    520  
>    521          link = kzalloc(sizeof(*link), GFP_KERNEL);
>    522          if (!link)
>    523                  return NULL;
>    524          INIT_LIST_HEAD(&link->sibling);
>    525          INIT_LIST_HEAD(&link->children);
>    526          INIT_LIST_HEAD(&link->link);
>    527          link->pdev = pdev;
>    528          if (pci_pcie_type(pdev) == PCI_EXP_TYPE_DOWNSTREAM) {
>    529                  struct pcie_link_state *parent;
>    530                  parent = pdev->bus->parent->self->link_state;
>    531                  if (!parent) {
>    532                          kfree(link);
>    533                          return NULL;
>    534                  }
>    535                  link->parent = parent;
>    536                  list_add(&link->link, &parent->children);
>    537          }
> 
> Before your patch, we could only see Root Ports or Downstream Ports at line
> 528.  Now we may also see Upstream Ports, so I think that test should be
> changed to "if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ROOT_PORT)".

Good catch, thanks!

> 
> Without this change, I think we would allocate pcie_link_state for the
> 03:00.0 Upstream Port in your example, but it would not be connected to the
> tree of links starting at the 00:1c.0 Root Port.
> 
> Do you agree?

Yes.

I will update it.

Thanks!
Yijing.

> 
> Bjorn
> 
> .
> 


-- 
Thanks!
Yijing

--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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