[coreboot] [PATCH] v3: more uniqueness in the dtc generated struct names
ron minnich
rminnich at gmail.com
Fri Sep 5 10:17:35 CEST 2008
Acked-by: Ronald G. Minnich <rminnich at gmail.com>
not yet tested. But some test builds look good.
ron
On Wed, Sep 3, 2008 at 8:09 PM, Carl-Daniel Hailfinger
<c-d.hailfinger.devel.2006 at gmx.net> wrote:
> Hi Ron,
>
> here's my patch proposal for struct device naming again. It has the
> advantage of adding only 14 lines of code.
>
> Regards,
> Carl-Daniel
>
> On 30.08.2008 00:57, Carl-Daniel Hailfinger wrote:
>> I managed to break dtc while working on PCI bridges:
>> dtc only uses dev_fn as identifier for a PCI device. That gets us a name
>> collision if we have the same dev_fn combination on multiple buses.
>> Either we add a random unique ID to the struct name or we integrate the
>> number of the parent device as well.
>> A third option would be to store the complete hierarchy in the name.
>> I decided to go for integration of parent device name.
>>
>> With the following device tree
>>
>> /{
>> cpus {};
>> domain at 0 {
>> bus at 0 {
>> pci at 0,0 {
>> };
>> pci at 1,1 {
>> };
>> pci at f,0 {
>> bus at 1 {
>> pci at 0,0 {
>> };
>> };
>> };
>> };
>> };
>> };
>>
>>
>> we get the old names:
>> dev_root
>> dev_cpus
>> dev_domain_0
>> dev_bus_0
>> dev_pci_0_0
>> dev_pci_1_1
>> dev_pci_f_0
>> dev_bus_1
>> dev_pci_0_0 COLLISION!!!
>>
>>
>> and the new names:
>> dev_root
>> dev_cpus
>> dev_domain_0
>> dev_domain_0_bus_0
>> dev_bus_0_pci_0_0
>> dev_bus_0_pci_1_1
>> dev_bus_0_pci_f_0
>> dev_pci_f_0_bus_1
>> dev_bus_1_pci_0_0
>>
>> and the third option (not used) would have looked like this:
>> dev_root
>> dev_cpus
>> dev_domain_0
>> dev_domain_0_bus_0
>> dev_domain_0_bus_0_pci_0_0
>> dev_domain_0_bus_0_pci_1_1
>> dev_domain_0_bus_0_pci_f_0
>> dev_domain_0_bus_0_pci_f_0_bus_1
>> dev_domain_0_bus_0_pci_f_0_bus_1_pci_0_0
>>
>>
>> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
>>
>>
>> Index: corebootv3-pci_scan_bus/util/dtc/flattree.c
>> ===================================================================
>> --- corebootv3-pci_scan_bus/util/dtc/flattree.c (Revision 846)
>> +++ corebootv3-pci_scan_bus/util/dtc/flattree.c (Arbeitskopie)
>> @@ -931,6 +931,7 @@
>> emit->endnode(etarget, treelabel);
>> }
>>
>> + //fprintf(f, "//tree->label is %s, tree->parent->label is %s\n", tree->label, tree->parent ? tree->parent->label : NULL);
>> /* now emit the device for this node, with sibling and child pointers etc. */
>> emit->special(f, tree);
>>
>> @@ -1313,8 +1314,23 @@
>> labeltree(struct node *tree)
>> {
>> struct node *child;
>> + char *tmp1;
>> + char *tmp2;
>>
>> + //printf("//tree->label is %s, tree->parent->label is %s\n", tree->label, tree->parent ? tree->parent->label : NULL);
>> tree->label = clean(tree->name, 1);
>> + if (tree->parent && tree->label) {
>> + tmp1 = clean(tree->parent->name, 1);
>> + if (strlen(tmp1)) {
>> + tmp2 = tree->label;
>> + tree->label = malloc(strlen(tmp1) + strlen(tmp2) + 2);
>> + strcpy(tree->label, tmp1);
>> + strcat(tree->label, "_");
>> + strcat(tree->label, tmp2);
>> + free(tmp2);
>> + }
>> + free(tmp1);
>> + }
>>
>> if (tree->next_sibling)
>> labeltree(tree->next_sibling);
>>
>>
>>
>
>
> --
> http://www.hailfinger.org/
>
>
More information about the coreboot
mailing list