Devices with no "reg" nor "dcr-reg" property are given a bus_id which
is the node name alone. This means that if more than one such device
with the same names are present in the system, sysfs will have
collisions when creating the symlinks and will fail registering the
devices.
This works around that problem by assigning successive numbers to such
devices.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
#include <asm/topology.h>
#include <asm/pci-bridge.h>
#include <asm/ppc-pci.h>
#include <asm/topology.h>
#include <asm/pci-bridge.h>
#include <asm/ppc-pci.h>
+#include <asm/atomic.h>
+
/*
* The list of OF IDs below is used for matching bus types in the
/*
* The list of OF IDs below is used for matching bus types in the
+static atomic_t bus_no_reg_magic;
+
/*
*
* OF platform device type definition & base infrastructure
/*
*
* OF platform device type definition & base infrastructure
char *name = dev->dev.bus_id;
const u32 *reg;
u64 addr;
char *name = dev->dev.bus_id;
const u32 *reg;
u64 addr;
/*
* If it's a DCR based device, use 'd' for native DCRs
/*
* If it's a DCR based device, use 'd' for native DCRs
- * No BusID, use the node name and pray
+ * No BusID, use the node name and add a globally incremented
+ * counter (and pray...)
- snprintf(name, BUS_ID_SIZE, "%s", node->name);
+ magic = atomic_add_return(1, &bus_no_reg_magic);
+ snprintf(name, BUS_ID_SIZE, "%s.%d", node->name, magic - 1);
}
struct of_device* of_platform_device_create(struct device_node *np,
}
struct of_device* of_platform_device_create(struct device_node *np,