diff options
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 24 | ||||
-rw-r--r-- | include/linux/phy.h | 7 |
2 files changed, 25 insertions, 6 deletions
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 6c58da2b882c..88cc5db9affd 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c | |||
@@ -37,22 +37,36 @@ | |||
37 | #include <asm/uaccess.h> | 37 | #include <asm/uaccess.h> |
38 | 38 | ||
39 | /** | 39 | /** |
40 | * mdiobus_alloc - allocate a mii_bus structure | 40 | * mdiobus_alloc_size - allocate a mii_bus structure |
41 | * | 41 | * |
42 | * Description: called by a bus driver to allocate an mii_bus | 42 | * Description: called by a bus driver to allocate an mii_bus |
43 | * structure to fill in. | 43 | * structure to fill in. |
44 | * | ||
45 | * 'size' is an an extra amount of memory to allocate for private storage. | ||
46 | * If non-zero, then bus->priv is points to that memory. | ||
44 | */ | 47 | */ |
45 | struct mii_bus *mdiobus_alloc(void) | 48 | struct mii_bus *mdiobus_alloc_size(size_t size) |
46 | { | 49 | { |
47 | struct mii_bus *bus; | 50 | struct mii_bus *bus; |
51 | size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); | ||
52 | size_t alloc_size; | ||
53 | |||
54 | /* If we alloc extra space, it should be aligned */ | ||
55 | if (size) | ||
56 | alloc_size = aligned_size + size; | ||
57 | else | ||
58 | alloc_size = sizeof(*bus); | ||
48 | 59 | ||
49 | bus = kzalloc(sizeof(*bus), GFP_KERNEL); | 60 | bus = kzalloc(alloc_size, GFP_KERNEL); |
50 | if (bus != NULL) | 61 | if (bus) { |
51 | bus->state = MDIOBUS_ALLOCATED; | 62 | bus->state = MDIOBUS_ALLOCATED; |
63 | if (size) | ||
64 | bus->priv = (void *)bus + aligned_size; | ||
65 | } | ||
52 | 66 | ||
53 | return bus; | 67 | return bus; |
54 | } | 68 | } |
55 | EXPORT_SYMBOL(mdiobus_alloc); | 69 | EXPORT_SYMBOL(mdiobus_alloc_size); |
56 | 70 | ||
57 | /** | 71 | /** |
58 | * mdiobus_release - mii_bus device release callback | 72 | * mdiobus_release - mii_bus device release callback |
diff --git a/include/linux/phy.h b/include/linux/phy.h index 79f337c47388..c599f7eca1e7 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h | |||
@@ -129,7 +129,12 @@ struct mii_bus { | |||
129 | }; | 129 | }; |
130 | #define to_mii_bus(d) container_of(d, struct mii_bus, dev) | 130 | #define to_mii_bus(d) container_of(d, struct mii_bus, dev) |
131 | 131 | ||
132 | struct mii_bus *mdiobus_alloc(void); | 132 | struct mii_bus *mdiobus_alloc_size(size_t); |
133 | static inline struct mii_bus *mdiobus_alloc(void) | ||
134 | { | ||
135 | return mdiobus_alloc_size(0); | ||
136 | } | ||
137 | |||
133 | int mdiobus_register(struct mii_bus *bus); | 138 | int mdiobus_register(struct mii_bus *bus); |
134 | void mdiobus_unregister(struct mii_bus *bus); | 139 | void mdiobus_unregister(struct mii_bus *bus); |
135 | void mdiobus_free(struct mii_bus *bus); | 140 | void mdiobus_free(struct mii_bus *bus); |