Commit e6c15b5f authored by Julian Wiedmann's avatar Julian Wiedmann Committed by David S. Miller

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 70deb016 ("qeth: omit outbound queue 3 for unicast packets in Priority Queuing on HiperSockets").
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 73dc2daf
...@@ -3594,20 +3594,12 @@ static void qeth_qdio_output_handler(struct ccw_device *ccwdev, ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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")) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment