diff options
author | Ursula Braun <ursula.braun@de.ibm.com> | 2011-08-07 21:33:48 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-08-13 04:10:15 -0400 |
commit | 99558ea93ce885ab191df2bf8ef964880e3b34a7 (patch) | |
tree | 269d366d8db7f974d27edd569f56c748cb095575 /drivers/s390/net | |
parent | 1d31f52e38dfaf8bd07a6901c86fdd45e03eed24 (diff) |
qeth: do not apply priority queuing to HiperSockets
OSA cards can be configured to support 1 or 4 output queues. This
does not apply to HiperSockets. This patch limits determination of
the configured number of output queues to OSA cards only, but excludes
HiperSockets.
Signed-off-by: Ursula Braun <ursula.braun@de.ibm.com>
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index 4550573c25e5..2b0fb056a51f 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
@@ -995,27 +995,29 @@ static void qeth_get_channel_path_desc(struct qeth_card *card) | |||
995 | ccwdev = card->data.ccwdev; | 995 | ccwdev = card->data.ccwdev; |
996 | chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc(ccwdev, 0); | 996 | chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc(ccwdev, 0); |
997 | if (chp_dsc != NULL) { | 997 | if (chp_dsc != NULL) { |
998 | /* CHPP field bit 6 == 1 -> single queue */ | 998 | if (card->info.type != QETH_CARD_TYPE_IQD) { |
999 | if ((chp_dsc->chpp & 0x02) == 0x02) { | 999 | /* CHPP field bit 6 == 1 -> single queue */ |
1000 | if ((atomic_read(&card->qdio.state) != | 1000 | if ((chp_dsc->chpp & 0x02) == 0x02) { |
1001 | QETH_QDIO_UNINITIALIZED) && | 1001 | if ((atomic_read(&card->qdio.state) != |
1002 | (card->qdio.no_out_queues == 4)) | 1002 | QETH_QDIO_UNINITIALIZED) && |
1003 | /* change from 4 to 1 outbound queues */ | 1003 | (card->qdio.no_out_queues == 4)) |
1004 | qeth_free_qdio_buffers(card); | 1004 | /* change from 4 to 1 outbound queues */ |
1005 | card->qdio.no_out_queues = 1; | 1005 | qeth_free_qdio_buffers(card); |
1006 | if (card->qdio.default_out_queue != 0) | 1006 | card->qdio.no_out_queues = 1; |
1007 | dev_info(&card->gdev->dev, | 1007 | if (card->qdio.default_out_queue != 0) |
1008 | dev_info(&card->gdev->dev, | ||
1008 | "Priority Queueing not supported\n"); | 1009 | "Priority Queueing not supported\n"); |
1009 | card->qdio.default_out_queue = 0; | 1010 | card->qdio.default_out_queue = 0; |
1010 | } else { | 1011 | } else { |
1011 | if ((atomic_read(&card->qdio.state) != | 1012 | if ((atomic_read(&card->qdio.state) != |
1012 | QETH_QDIO_UNINITIALIZED) && | 1013 | QETH_QDIO_UNINITIALIZED) && |
1013 | (card->qdio.no_out_queues == 1)) { | 1014 | (card->qdio.no_out_queues == 1)) { |
1014 | /* change from 1 to 4 outbound queues */ | 1015 | /* change from 1 to 4 outbound queues */ |
1015 | qeth_free_qdio_buffers(card); | 1016 | qeth_free_qdio_buffers(card); |
1016 | card->qdio.default_out_queue = 2; | 1017 | card->qdio.default_out_queue = 2; |
1018 | } | ||
1019 | card->qdio.no_out_queues = 4; | ||
1017 | } | 1020 | } |
1018 | card->qdio.no_out_queues = 4; | ||
1019 | } | 1021 | } |
1020 | card->info.func_level = 0x4100 + chp_dsc->desc; | 1022 | card->info.func_level = 0x4100 + chp_dsc->desc; |
1021 | kfree(chp_dsc); | 1023 | kfree(chp_dsc); |