tech-userlevel archive

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

Re: [PATCH] pcictl: simplify its usage



Manuel Bouyer wrote:
> 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.

Can I assume, that the 'i' iterator matches the autoconf index?
If yes, then I can compare 'i' with minor(dev).

Christoph



Home | Main Index | Thread Index | Old Index