tech-userlevel archive

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

Re: [PATCH] pcictl: simplify its usage



On Thu, Jun 04, 2009 at 10:17:04PM +0200, Christoph Egger wrote:
> Manuel Bouyer wrote:
> > On Thu, Jun 04, 2009 at 08:01:39PM +0200, Manuel Bouyer wrote:
> >> On Thu, Jun 04, 2009 at 07:18:50PM +0200, Matthias Drochner wrote:
> >>> mouse%Rodents-Montreal.ORG@localhost said:
> >>>> But you need /dev/pci in order to have something to open when you
> >>>> don't have a bus number available.
> >>> I didn't follow all the thread, just want to make sure that
> >>> everyone is aware of the fact that the N and the M in
> >>> pcictl /dev/pciN <command> -b M
> >>> are not the same: N is a logical index chosen by autoconf
> >>> and M is the physical bus number.
> >>> This might be not a big issue with a simple PC, but on
> >>> a big box with multiple PCI hierarchies the same physical bus
> >>> number can occur multiple times.
> >> Yes, you're right. The API proposed by Christoph doens't work in
> >> that case. I think it needs to use the autoconf index in this case,
> >> not the physical bus number.
> > 
> > This is the case on a DS20 system:
> > cpu0 at mainbus0: ID 0 (primary), 21264-4
> > cpu0: Architecture extensions: 303<PAT,MVI,FIX,BWX>
> > tsc0 at mainbus0: 21272 Core Logic Chipset, Cchip rev 0
> > tsc0: 8 Dchips, 2 memory buses of 32 bytes
> > tsc0: arrays present: 256MB, 256MB, 0MB, 0MB, Dchip 0 rev 1
> > tsp0 at tsc0
> > pci0 at tsp0 bus 0
> > [...]
> > tsp1 at tsc0
> > pci1 at tsp1 bus 0
> > 
> > both have the same physical bus number (which is stored in sc_bus).
> > What's unique is the autoconf index.
> 
> PCI domains should be unique, too.
> In my patch, I have this snippet:
> 
> +       for (i = 0; i < pci_cd.cd_ndevs; i++) {
> +               pci = pci_cd.cd_devs[i];
> +               if (pci == NULL)
> +                       continue;
> +
> +               sc = device_private(pci);
> +               if (sc != NULL && /* sc->sc_domain == minor(dev) && */
> +                   sc->sc_bus == bdfr->bus)
> +                       break;
> +       }
> +       if (i >= pci_cd.cd_ndevs)
> +               return NULL;
> 
> Note the commented out PCI domain check.
> As Joerg pointed out we don't support PCI domains, therefore I can't
> enable the check which Manuel needs on his machine.

But what we have right now does work !
You just need to use the autoconf index instead of the bus number.

Also, minor(dev) is not the PCI bus domain but the autoconf index.

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--


Home | Main Index | Thread Index | Old Index