s390/qeth: streamline control code for promisc mode
We have logic to determine the desired promisc mode in _each_ code path. Change things around so that there is a clean split between (a) high-level code that selects the new mode, and (b) implementations of the various mechanisms to program this mode. This also keeps qeth_promisc_to_bridge() from polluting the debug logs on each RX modeset. Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com> Reviewed-by: Alexandra Winter <wintera@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
2744d81169
commit
59b757a9bf
@@ -439,23 +439,14 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void qeth_promisc_to_bridge(struct qeth_card *card)
|
||||
static void qeth_l2_promisc_to_bridge(struct qeth_card *card, bool enable)
|
||||
{
|
||||
struct net_device *dev = card->dev;
|
||||
enum qeth_ipa_promisc_modes promisc_mode;
|
||||
int role;
|
||||
int rc;
|
||||
|
||||
QETH_CARD_TEXT(card, 3, "pmisc2br");
|
||||
|
||||
if (!card->options.sbp.reflect_promisc)
|
||||
return;
|
||||
promisc_mode = (dev->flags & IFF_PROMISC) ? SET_PROMISC_MODE_ON
|
||||
: SET_PROMISC_MODE_OFF;
|
||||
if (promisc_mode == card->info.promisc_mode)
|
||||
return;
|
||||
|
||||
if (promisc_mode == SET_PROMISC_MODE_ON) {
|
||||
if (enable) {
|
||||
if (card->options.sbp.reflect_promisc_primary)
|
||||
role = QETH_SBP_ROLE_PRIMARY;
|
||||
else
|
||||
@@ -464,14 +455,26 @@ static void qeth_promisc_to_bridge(struct qeth_card *card)
|
||||
role = QETH_SBP_ROLE_NONE;
|
||||
|
||||
rc = qeth_bridgeport_setrole(card, role);
|
||||
QETH_CARD_TEXT_(card, 2, "bpm%c%04x",
|
||||
(promisc_mode == SET_PROMISC_MODE_ON) ? '+' : '-', rc);
|
||||
QETH_CARD_TEXT_(card, 2, "bpm%c%04x", enable ? '+' : '-', rc);
|
||||
if (!rc) {
|
||||
card->options.sbp.role = role;
|
||||
card->info.promisc_mode = promisc_mode;
|
||||
card->info.promisc_mode = enable;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void qeth_l2_set_promisc_mode(struct qeth_card *card)
|
||||
{
|
||||
bool enable = card->dev->flags & IFF_PROMISC;
|
||||
|
||||
if (card->info.promisc_mode == enable)
|
||||
return;
|
||||
|
||||
if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
|
||||
qeth_setadp_promisc_mode(card, enable);
|
||||
else if (card->options.sbp.reflect_promisc)
|
||||
qeth_l2_promisc_to_bridge(card, enable);
|
||||
}
|
||||
|
||||
/* New MAC address is added to the hash table and marked to be written on card
|
||||
* only if there is not in the hash table storage already
|
||||
*
|
||||
@@ -539,10 +542,7 @@ static void qeth_l2_rx_mode_work(struct work_struct *work)
|
||||
}
|
||||
}
|
||||
|
||||
if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
|
||||
qeth_setadp_promisc_mode(card);
|
||||
else
|
||||
qeth_promisc_to_bridge(card);
|
||||
qeth_l2_set_promisc_mode(card);
|
||||
}
|
||||
|
||||
static int qeth_l2_xmit_osn(struct qeth_card *card, struct sk_buff *skb,
|
||||
|
Reference in New Issue
Block a user