]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/bonding/bond_3ad.c
bonding: alloc the structure ad_info dynamically in per slave
[karo-tx-linux.git] / drivers / net / bonding / bond_3ad.c
index 9a0d61e0c188a9f37f51ff2f4520ef34749f1497..24faddddf11e9b46688b149a2c261e747e2774ec 100644 (file)
@@ -157,7 +157,7 @@ static inline struct aggregator *__get_first_agg(struct port *port)
 
        rcu_read_lock();
        first_slave = bond_first_slave_rcu(bond);
-       agg = first_slave ? &(SLAVE_AD_INFO(first_slave).aggregator) : NULL;
+       agg = first_slave ? &(SLAVE_AD_INFO(first_slave)->aggregator) : NULL;
        rcu_read_unlock();
 
        return agg;
@@ -241,7 +241,7 @@ static inline int __check_agg_selection_timer(struct port *port)
  */
 static inline void __get_state_machine_lock(struct port *port)
 {
-       spin_lock_bh(&(SLAVE_AD_INFO(port->slave).state_machine_lock));
+       spin_lock_bh(&(SLAVE_AD_INFO(port->slave)->state_machine_lock));
 }
 
 /**
@@ -250,7 +250,7 @@ static inline void __get_state_machine_lock(struct port *port)
  */
 static inline void __release_state_machine_lock(struct port *port)
 {
-       spin_unlock_bh(&(SLAVE_AD_INFO(port->slave).state_machine_lock));
+       spin_unlock_bh(&(SLAVE_AD_INFO(port->slave)->state_machine_lock));
 }
 
 /**
@@ -350,7 +350,7 @@ static u8 __get_duplex(struct port *port)
 static inline void __initialize_port_locks(struct slave *slave)
 {
        /* make sure it isn't called twice */
-       spin_lock_init(&(SLAVE_AD_INFO(slave).state_machine_lock));
+       spin_lock_init(&(SLAVE_AD_INFO(slave)->state_machine_lock));
 }
 
 /* Conversions */
@@ -688,8 +688,8 @@ static struct aggregator *__get_active_agg(struct aggregator *aggregator)
        struct slave *slave;
 
        bond_for_each_slave_rcu(bond, slave, iter)
-               if (SLAVE_AD_INFO(slave).aggregator.is_active)
-                       return &(SLAVE_AD_INFO(slave).aggregator);
+               if (SLAVE_AD_INFO(slave)->aggregator.is_active)
+                       return &(SLAVE_AD_INFO(slave)->aggregator);
 
        return NULL;
 }
@@ -1293,7 +1293,7 @@ static void ad_port_selection_logic(struct port *port)
        }
        /* search on all aggregators for a suitable aggregator for this port */
        bond_for_each_slave(bond, slave, iter) {
-               aggregator = &(SLAVE_AD_INFO(slave).aggregator);
+               aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
 
                /* keep a free aggregator for later use(if needed) */
                if (!aggregator->lag_ports) {
@@ -1504,7 +1504,7 @@ static void ad_agg_selection_logic(struct aggregator *agg)
        best = (active && agg_device_up(active)) ? active : NULL;
 
        bond_for_each_slave_rcu(bond, slave, iter) {
-               agg = &(SLAVE_AD_INFO(slave).aggregator);
+               agg = &(SLAVE_AD_INFO(slave)->aggregator);
 
                agg->is_active = 0;
 
@@ -1549,7 +1549,7 @@ static void ad_agg_selection_logic(struct aggregator *agg)
                         best->slave ? best->slave->dev->name : "NULL");
 
                bond_for_each_slave_rcu(bond, slave, iter) {
-                       agg = &(SLAVE_AD_INFO(slave).aggregator);
+                       agg = &(SLAVE_AD_INFO(slave)->aggregator);
 
                        pr_debug("Agg=%d; P=%d; a k=%d; p k=%d; Ind=%d; Act=%d\n",
                                 agg->aggregator_identifier, agg->num_of_ports,
@@ -1840,16 +1840,16 @@ void bond_3ad_bind_slave(struct slave *slave)
        struct aggregator *aggregator;
 
        /* check that the slave has not been initialized yet. */
-       if (SLAVE_AD_INFO(slave).port.slave != slave) {
+       if (SLAVE_AD_INFO(slave)->port.slave != slave) {
 
                /* port initialization */
-               port = &(SLAVE_AD_INFO(slave).port);
+               port = &(SLAVE_AD_INFO(slave)->port);
 
                ad_initialize_port(port, bond->params.lacp_fast);
 
                __initialize_port_locks(slave);
                port->slave = slave;
-               port->actor_port_number = SLAVE_AD_INFO(slave).id;
+               port->actor_port_number = SLAVE_AD_INFO(slave)->id;
                /* key is determined according to the link speed, duplex and user key(which
                 * is yet not supported)
                 */
@@ -1874,7 +1874,7 @@ void bond_3ad_bind_slave(struct slave *slave)
                __disable_port(port);
 
                /* aggregator initialization */
-               aggregator = &(SLAVE_AD_INFO(slave).aggregator);
+               aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
 
                ad_initialize_agg(aggregator);
 
@@ -1903,8 +1903,8 @@ void bond_3ad_unbind_slave(struct slave *slave)
        struct slave *slave_iter;
        struct list_head *iter;
 
-       aggregator = &(SLAVE_AD_INFO(slave).aggregator);
-       port = &(SLAVE_AD_INFO(slave).port);
+       aggregator = &(SLAVE_AD_INFO(slave)->aggregator);
+       port = &(SLAVE_AD_INFO(slave)->port);
 
        /* if slave is null, the whole port is not initialized */
        if (!port->slave) {
@@ -1932,7 +1932,7 @@ void bond_3ad_unbind_slave(struct slave *slave)
                    (aggregator->lag_ports->next_port_in_aggregator)) {
                        /* find new aggregator for the related port(s) */
                        bond_for_each_slave(bond, slave_iter, iter) {
-                               new_aggregator = &(SLAVE_AD_INFO(slave_iter).aggregator);
+                               new_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
                                /* if the new aggregator is empty, or it is
                                 * connected to our port only
                                 */
@@ -2010,7 +2010,7 @@ void bond_3ad_unbind_slave(struct slave *slave)
 
        /* find the aggregator that this port is connected to */
        bond_for_each_slave(bond, slave_iter, iter) {
-               temp_aggregator = &(SLAVE_AD_INFO(slave_iter).aggregator);
+               temp_aggregator = &(SLAVE_AD_INFO(slave_iter)->aggregator);
                prev_port = NULL;
                /* search the port in the aggregator's related ports */
                for (temp_port = temp_aggregator->lag_ports; temp_port;
@@ -2076,7 +2076,7 @@ void bond_3ad_state_machine_handler(struct work_struct *work)
        if (BOND_AD_INFO(bond).agg_select_timer &&
            !(--BOND_AD_INFO(bond).agg_select_timer)) {
                slave = bond_first_slave_rcu(bond);
-               port = slave ? &(SLAVE_AD_INFO(slave).port) : NULL;
+               port = slave ? &(SLAVE_AD_INFO(slave)->port) : NULL;
 
                /* select the active aggregator for the bond */
                if (port) {
@@ -2094,7 +2094,7 @@ void bond_3ad_state_machine_handler(struct work_struct *work)
 
        /* for each port run the state machines */
        bond_for_each_slave_rcu(bond, slave, iter) {
-               port = &(SLAVE_AD_INFO(slave).port);
+               port = &(SLAVE_AD_INFO(slave)->port);
                if (!port->slave) {
                        pr_warn_ratelimited("%s: Warning: Found an uninitialized port\n",
                                            bond->dev->name);
@@ -2155,7 +2155,7 @@ static int bond_3ad_rx_indication(struct lacpdu *lacpdu, struct slave *slave,
 
        if (length >= sizeof(struct lacpdu)) {
 
-               port = &(SLAVE_AD_INFO(slave).port);
+               port = &(SLAVE_AD_INFO(slave)->port);
 
                if (!port->slave) {
                        pr_warn_ratelimited("%s: Warning: port of slave %s is uninitialized\n",
@@ -2212,7 +2212,7 @@ void bond_3ad_adapter_speed_changed(struct slave *slave)
 {
        struct port *port;
 
-       port = &(SLAVE_AD_INFO(slave).port);
+       port = &(SLAVE_AD_INFO(slave)->port);
 
        /* if slave is null, the whole port is not initialized */
        if (!port->slave) {
@@ -2245,7 +2245,7 @@ void bond_3ad_adapter_duplex_changed(struct slave *slave)
 {
        struct port *port;
 
-       port = &(SLAVE_AD_INFO(slave).port);
+       port = &(SLAVE_AD_INFO(slave)->port);
 
        /* if slave is null, the whole port is not initialized */
        if (!port->slave) {
@@ -2279,7 +2279,7 @@ void bond_3ad_handle_link_change(struct slave *slave, char link)
 {
        struct port *port;
 
-       port = &(SLAVE_AD_INFO(slave).port);
+       port = &(SLAVE_AD_INFO(slave)->port);
 
        /* if slave is null, the whole port is not initialized */
        if (!port->slave) {
@@ -2347,7 +2347,7 @@ int bond_3ad_set_carrier(struct bonding *bond)
                ret = 0;
                goto out;
        }
-       active = __get_active_agg(&(SLAVE_AD_INFO(first_slave).aggregator));
+       active = __get_active_agg(&(SLAVE_AD_INFO(first_slave)->aggregator));
        if (active) {
                /* are enough slaves available to consider link up? */
                if (active->num_of_ports < bond->params.min_links) {
@@ -2384,7 +2384,7 @@ int __bond_3ad_get_active_agg_info(struct bonding *bond,
        struct port *port;
 
        bond_for_each_slave_rcu(bond, slave, iter) {
-               port = &(SLAVE_AD_INFO(slave).port);
+               port = &(SLAVE_AD_INFO(slave)->port);
                if (port->aggregator && port->aggregator->is_active) {
                        aggregator = port->aggregator;
                        break;
@@ -2444,7 +2444,7 @@ int bond_3ad_xmit_xor(struct sk_buff *skb, struct net_device *dev)
        first_ok_slave = NULL;
 
        bond_for_each_slave_rcu(bond, slave, iter) {
-               agg = SLAVE_AD_INFO(slave).port.aggregator;
+               agg = SLAVE_AD_INFO(slave)->port.aggregator;
                if (!agg || agg->aggregator_identifier != agg_id)
                        continue;
 
@@ -2522,7 +2522,7 @@ void bond_3ad_update_lacp_rate(struct bonding *bond)
 
        lacp_fast = bond->params.lacp_fast;
        bond_for_each_slave(bond, slave, iter) {
-               port = &(SLAVE_AD_INFO(slave).port);
+               port = &(SLAVE_AD_INFO(slave)->port);
                __get_state_machine_lock(port);
                if (lacp_fast)
                        port->actor_oper_port_state |= AD_STATE_LACP_TIMEOUT;