Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Ursula Braun and committed by
David S. Miller
99558ea9 1d31f52e

+21 -19
+21 -19
drivers/s390/net/qeth_core_main.c
··· 995 995 ccwdev = card->data.ccwdev; 996 996 chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc(ccwdev, 0); 997 997 if (chp_dsc != NULL) { 998 - /* CHPP field bit 6 == 1 -> single queue */ 999 - if ((chp_dsc->chpp & 0x02) == 0x02) { 1000 - if ((atomic_read(&card->qdio.state) != 1001 - QETH_QDIO_UNINITIALIZED) && 1002 - (card->qdio.no_out_queues == 4)) 1003 - /* change from 4 to 1 outbound queues */ 1004 - qeth_free_qdio_buffers(card); 1005 - card->qdio.no_out_queues = 1; 1006 - if (card->qdio.default_out_queue != 0) 1007 - dev_info(&card->gdev->dev, 998 + if (card->info.type != QETH_CARD_TYPE_IQD) { 999 + /* CHPP field bit 6 == 1 -> single queue */ 1000 + if ((chp_dsc->chpp & 0x02) == 0x02) { 1001 + if ((atomic_read(&card->qdio.state) != 1002 + QETH_QDIO_UNINITIALIZED) && 1003 + (card->qdio.no_out_queues == 4)) 1004 + /* change from 4 to 1 outbound queues */ 1005 + qeth_free_qdio_buffers(card); 1006 + card->qdio.no_out_queues = 1; 1007 + if (card->qdio.default_out_queue != 0) 1008 + dev_info(&card->gdev->dev, 1008 1009 "Priority Queueing not supported\n"); 1009 - card->qdio.default_out_queue = 0; 1010 - } else { 1011 - if ((atomic_read(&card->qdio.state) != 1012 - QETH_QDIO_UNINITIALIZED) && 1013 - (card->qdio.no_out_queues == 1)) { 1014 - /* change from 1 to 4 outbound queues */ 1015 - qeth_free_qdio_buffers(card); 1016 - card->qdio.default_out_queue = 2; 1010 + card->qdio.default_out_queue = 0; 1011 + } else { 1012 + if ((atomic_read(&card->qdio.state) != 1013 + QETH_QDIO_UNINITIALIZED) && 1014 + (card->qdio.no_out_queues == 1)) { 1015 + /* change from 1 to 4 outbound queues */ 1016 + qeth_free_qdio_buffers(card); 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 1022 card->info.func_level = 0x4100 + chp_dsc->desc; 1021 1023 kfree(chp_dsc);