s390/qeth: simplify QoS code
qeth_get_priority_queue() is no longer used for IQD devices, remove the
special-casing of their mcast queue.
This effectively reverts
commit 70deb01662
("qeth: omit outbound queue 3 for unicast packets in Priority Queuing on HiperSockets").
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
73dc2daf11
commit
e6c15b5f34
@ -3594,20 +3594,12 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev,
|
|||||||
netif_wake_subqueue(dev, txq);
|
netif_wake_subqueue(dev, txq);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We cannot use outbound queue 3 for unicast packets on HiperSockets */
|
|
||||||
static inline int qeth_cut_iqd_prio(struct qeth_card *card, int queue_num)
|
|
||||||
{
|
|
||||||
if ((card->info.type == QETH_CARD_TYPE_IQD) && (queue_num == 3))
|
|
||||||
return 2;
|
|
||||||
return queue_num;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: Function assumes that we have 4 outbound queues.
|
* Note: Function assumes that we have 4 outbound queues.
|
||||||
*/
|
*/
|
||||||
int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
|
int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
__be16 *tci;
|
struct vlan_ethhdr *veth = vlan_eth_hdr(skb);
|
||||||
u8 tos;
|
u8 tos;
|
||||||
|
|
||||||
switch (card->qdio.do_prio_queueing) {
|
switch (card->qdio.do_prio_queueing) {
|
||||||
@ -3624,9 +3616,9 @@ int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
|
|||||||
return card->qdio.default_out_queue;
|
return card->qdio.default_out_queue;
|
||||||
}
|
}
|
||||||
if (card->qdio.do_prio_queueing == QETH_PRIO_Q_ING_PREC)
|
if (card->qdio.do_prio_queueing == QETH_PRIO_Q_ING_PREC)
|
||||||
return qeth_cut_iqd_prio(card, ~tos >> 6 & 3);
|
return ~tos >> 6 & 3;
|
||||||
if (tos & IPTOS_MINCOST)
|
if (tos & IPTOS_MINCOST)
|
||||||
return qeth_cut_iqd_prio(card, 3);
|
return 3;
|
||||||
if (tos & IPTOS_RELIABILITY)
|
if (tos & IPTOS_RELIABILITY)
|
||||||
return 2;
|
return 2;
|
||||||
if (tos & IPTOS_THROUGHPUT)
|
if (tos & IPTOS_THROUGHPUT)
|
||||||
@ -3637,12 +3629,11 @@ int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb)
|
|||||||
case QETH_PRIO_Q_ING_SKB:
|
case QETH_PRIO_Q_ING_SKB:
|
||||||
if (skb->priority > 5)
|
if (skb->priority > 5)
|
||||||
return 0;
|
return 0;
|
||||||
return qeth_cut_iqd_prio(card, ~skb->priority >> 1 & 3);
|
return ~skb->priority >> 1 & 3;
|
||||||
case QETH_PRIO_Q_ING_VLAN:
|
case QETH_PRIO_Q_ING_VLAN:
|
||||||
tci = &((struct ethhdr *)skb->data)->h_proto;
|
if (veth->h_vlan_proto == htons(ETH_P_8021Q))
|
||||||
if (be16_to_cpu(*tci) == ETH_P_8021Q)
|
return ~ntohs(veth->h_vlan_TCI) >>
|
||||||
return qeth_cut_iqd_prio(card,
|
(VLAN_PRIO_SHIFT + 1) & 3;
|
||||||
~be16_to_cpu(*(tci + 1)) >> (VLAN_PRIO_SHIFT + 1) & 3);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -242,10 +242,6 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev,
|
|||||||
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
|
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
|
||||||
card->qdio.default_out_queue = 2;
|
card->qdio.default_out_queue = 2;
|
||||||
} else if (sysfs_streq(buf, "no_prio_queueing:3")) {
|
} else if (sysfs_streq(buf, "no_prio_queueing:3")) {
|
||||||
if (card->info.type == QETH_CARD_TYPE_IQD) {
|
|
||||||
rc = -EPERM;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
|
card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING;
|
||||||
card->qdio.default_out_queue = 3;
|
card->qdio.default_out_queue = 3;
|
||||||
} else if (sysfs_streq(buf, "no_prio_queueing")) {
|
} else if (sysfs_streq(buf, "no_prio_queueing")) {
|
||||||
|
Loading…
Reference in New Issue
Block a user