Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb8a54a7 authored by Timur Tabi's avatar Timur Tabi Committed by David S. Miller
Browse files

phylib: introduce mdiobus_alloc_size()



Introduce function mdiobus_alloc_size() as an alternative to mdiobus_alloc().
Most callers of mdiobus_alloc() also allocate a private data structure, and
then manually point bus->priv to this object.  mdiobus_alloc_size()
combines the two operations into one, which simplifies memory management.

The original mdiobus_alloc() now just calls mdiobus_alloc_size(0).

Signed-off-by: default avatarTimur Tabi <timur@freescale.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1398eee0
Loading
Loading
Loading
Loading
+19 −5
Original line number Original line Diff line number Diff line
@@ -37,22 +37,36 @@
#include <asm/uaccess.h>
#include <asm/uaccess.h>


/**
/**
 * mdiobus_alloc - allocate a mii_bus structure
 * mdiobus_alloc_size - allocate a mii_bus structure
 *
 *
 * Description: called by a bus driver to allocate an mii_bus
 * Description: called by a bus driver to allocate an mii_bus
 * structure to fill in.
 * structure to fill in.
 *
 * 'size' is an an extra amount of memory to allocate for private storage.
 * If non-zero, then bus->priv is points to that memory.
 */
 */
struct mii_bus *mdiobus_alloc(void)
struct mii_bus *mdiobus_alloc_size(size_t size)
{
{
	struct mii_bus *bus;
	struct mii_bus *bus;
	size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN);
	size_t alloc_size;

	/* If we alloc extra space, it should be aligned */
	if (size)
		alloc_size = aligned_size + size;
	else
		alloc_size = sizeof(*bus);


	bus = kzalloc(sizeof(*bus), GFP_KERNEL);
	bus = kzalloc(alloc_size, GFP_KERNEL);
	if (bus != NULL)
	if (bus) {
		bus->state = MDIOBUS_ALLOCATED;
		bus->state = MDIOBUS_ALLOCATED;
		if (size)
			bus->priv = (void *)bus + aligned_size;
	}


	return bus;
	return bus;
}
}
EXPORT_SYMBOL(mdiobus_alloc);
EXPORT_SYMBOL(mdiobus_alloc_size);


/**
/**
 * mdiobus_release - mii_bus device release callback
 * mdiobus_release - mii_bus device release callback
+6 −1
Original line number Original line Diff line number Diff line
@@ -129,7 +129,12 @@ struct mii_bus {
};
};
#define to_mii_bus(d) container_of(d, struct mii_bus, dev)
#define to_mii_bus(d) container_of(d, struct mii_bus, dev)


struct mii_bus *mdiobus_alloc(void);
struct mii_bus *mdiobus_alloc_size(size_t);
static inline struct mii_bus *mdiobus_alloc(void)
{
	return mdiobus_alloc_size(0);
}

int mdiobus_register(struct mii_bus *bus);
int mdiobus_register(struct mii_bus *bus);
void mdiobus_unregister(struct mii_bus *bus);
void mdiobus_unregister(struct mii_bus *bus);
void mdiobus_free(struct mii_bus *bus);
void mdiobus_free(struct mii_bus *bus);