s390: network patches for net-next
Subsystems (5)
cover s390: network patches for net-next
Hi Dave,
I have removed the NET_SKB_PAD patch from the patch set. We will define it in an arch specific header. The new version of the patch will come via the s390 tree. Thx!
shortlog:
Ursula Braun (3)
qeth: show new mac-address if its setting fails
qeth: allow HiperSockets framesize change in suspend
qeth: allow OSA CHPARM change in suspend state
Frank Blaschka (1)
qeth: add more strict MTU checking
Stefan Weil (2)
s390: Fix wrong size in memcmp (netiucv)
s390: Fix possibly wrong size in strncmp (smsgiucv)
Thanks,
Frank
PATCH 1/6 qeth: show new mac-address if its setting fails
From: Ursula Braun <[email protected]>
Setting of a MAC-address may fail because an already used MAC-address is to bet set or because of authorization problems. In those cases qeth issues a message, but the mentioned MAC-address is not the new MAC-address to be set, but the actual MAC-address. This patch chooses now the new MAC-address to be set for the error messages.
---
drivers/s390/net/qeth_l2_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/net/qeth_l2_main.c +2 -2
@@ -573,13 +573,13 @@ static int qeth_l2_send_setmac_cb(structcase IPA_RC_L2_DUP_LAYER3_MAC :dev_warn (&card->gdev->dev,"MAC address %pM already exists\n" , - card->dev->dev_addr); + cmd->data.setdelmac.mac);break ;case IPA_RC_L2_MAC_NOT_AUTH_BY_HYP :case IPA_RC_L2_MAC_NOT_AUTH_BY_ADP :dev_warn (&card->gdev->dev,"MAC address %pM is not authorized\n" , - card->dev->dev_addr); + cmd->data.setdelmac.mac);break ;default :break ;
PATCH 2/6 qeth: add more strict MTU checking
In reply to [email protected]From: Frank Blaschka <[email protected]>
HiperSockets and OSA hardware report a maximum MTU size. Add checking to reject larger MTUs than allowed by hardware.
---
drivers/s390/net/qeth_core_main.c | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-)
drivers/s390/net/qeth_core_main.c +4 -31
@@ -1832,33 +1832,6 @@ static inline int qeth_get_initial_mtu_f } } -static inline int qeth_get_max_mtu_for_card (int cardtype) -{ -switch (cardtype) { - -case QETH_CARD_TYPE_UNKNOWN : -case QETH_CARD_TYPE_OSD : -case QETH_CARD_TYPE_OSN : -case QETH_CARD_TYPE_OSM : -case QETH_CARD_TYPE_OSX : -return 61440 ; -case QETH_CARD_TYPE_IQD : -return 57344 ; -default : -return 1500 ; - } -} - -static inline int qeth_get_mtu_out_of_mpc (int cardtype) -{ -switch (cardtype) { -case QETH_CARD_TYPE_IQD : -return 1 ; -default : -return 0 ; - } -} -static inline int qeth_get_mtu_outof_framesize (int framesize) {switch (framesize) {
@@ -1881,10 +1854,9 @@ static inline int qeth_mtu_is_valid(strucase QETH_CARD_TYPE_OSD :case QETH_CARD_TYPE_OSM :case QETH_CARD_TYPE_OSX : -return ((mtu >=576 ) && (mtu <=61440 ));case QETH_CARD_TYPE_IQD :return ((mtu >=576 ) && - (mtu <= card->info.max_mtu +4096 -32 )); + (mtu <= card->info.max_mtu));case QETH_CARD_TYPE_OSN :case QETH_CARD_TYPE_UNKNOWN :default :
@@ -1907,7 +1879,7 @@ static int qeth_ulp_enable_cb(struct qetmemcpy (&card->token.ulp_filter_r,QETH_ULP_ENABLE_RESP_FILTER_TOKEN (iob->data),QETH_MPC_TOKEN_LENGTH ); -if (qeth_get_mtu_out_of_mpc (card->info.type)) { +if (card->info.type ==QETH_CARD_TYPE_IQD ) {memcpy (&framesize,QETH_ULP_ENABLE_RESP_MAX_MTU (iob->data),2 ); mtu =qeth_get_mtu_outof_framesize (framesize);if (!mtu) {
@@ -1920,7 +1892,8 @@ static int qeth_ulp_enable_cb(struct qet card->qdio.in_buf_size = mtu +2 *PAGE_SIZE ; }else { card->info.initial_mtu =qeth_get_initial_mtu_for_card (card); - card->info.max_mtu =qeth_get_max_mtu_for_card (card->info.type); + card->info.max_mtu = *(__u16 *)QETH_ULP_ENABLE_RESP_MAX_MTU ( + iob->data); card->qdio.in_buf_size =QETH_IN_BUF_SIZE_DEFAULT ; }
PATCH 3/6 qeth: allow HiperSockets framesize change in suspend
In reply to [email protected]From: Ursula Braun <[email protected]>
For HiperSockets the framesize-definition determines the selected mtu-size and the size of the allocated qdio buffers.
A framesize-change may occur while a Linux system with probed HiperSockets device is in suspend state. This patch enables proper resuming of a HiperSockets device in this case.
---
drivers/s390/net/qeth_core_main.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
drivers/s390/net/qeth_core_main.c +9 -1
@@ -1887,8 +1887,16 @@ static int qeth_ulp_enable_cb(struct qetQETH_DBF_TEXT_ (SETUP ,2 ," rc%d" , iob->rc);return 0 ; } - card->info.max_mtu = mtu; +if (card->info.initial_mtu && (card->info.initial_mtu != mtu)) { +/* frame size has changed */ +if (card->dev && + ((card->dev->mtu == card->info.initial_mtu) || + (card->dev->mtu > mtu))) + card->dev->mtu = mtu; +qeth_free_qdio_buffers (card); + } card->info.initial_mtu = mtu; + card->info.max_mtu = mtu; card->qdio.in_buf_size = mtu +2 *PAGE_SIZE ; }else { card->info.initial_mtu =qeth_get_initial_mtu_for_card (card);
PATCH 4/6 qeth: allow OSA CHPARM change in suspend state
In reply to [email protected]From: Ursula Braun <[email protected]>
For OSA the CHPARM-definition determines the number of available outbound queues.
A CHPARM-change may occur while a Linux system with probed OSA device is in suspend state. This patch enables proper resuming of an OSA device in this case.
---
drivers/s390/net/qeth_core_main.c | 104 +++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 41 deletions(-)
drivers/s390/net/qeth_core_main.c +63 -41
@@ -988,16 +988,30 @@ static void qeth_get_channel_path_desc(s chp_dsc = (struct channelPath_dsc *)ccw_device_get_chp_desc (ccwdev,0 );if (chp_dsc !=NULL ) {/* CHPP field bit 6 == 1 -> single queue */ -if ((chp_dsc->chpp &0x02 ) ==0x02 ) +if ((chp_dsc->chpp &0x02 ) ==0x02 ) { +if ((atomic_read (&card->qdio.state) != +QETH_QDIO_UNINITIALIZED ) && + (card->qdio.no_out_queues ==4 )) +/* change from 4 to 1 outbound queues */ +qeth_free_qdio_buffers (card); card->qdio.no_out_queues =1 ; +if (card->qdio.default_out_queue !=0 ) +dev_info (&card->gdev->dev, +"Priority Queueing not supported\n" ); + card->qdio.default_out_queue =0 ; + }else { +if ((atomic_read (&card->qdio.state) != +QETH_QDIO_UNINITIALIZED ) && + (card->qdio.no_out_queues ==1 )) { +/* change from 1 to 4 outbound queues */ +qeth_free_qdio_buffers (card); + card->qdio.default_out_queue =2 ; + } + card->qdio.no_out_queues =4 ; + } card->info.func_level =0x4100 + chp_dsc->desc;kfree (chp_dsc); } -if (card->qdio.no_out_queues ==1 ) { - card->qdio.default_out_queue =0 ; -dev_info (&card->gdev->dev, -"Priority Queueing not supported\n" ); - }QETH_DBF_TEXT_ (SETUP ,2 ,"nr:%x" , card->qdio.no_out_queues);QETH_DBF_TEXT_ (SETUP ,2 ,"lvl:%02x" , card->info.func_level);return ;
@@ -3756,6 +3770,47 @@ static inline int qeth_get_qdio_q_format } } +static void qeth_determine_capabilities (struct qeth_card *card) +{ +int rc; +int length; +char *prcd; +struct ccw_device *ddev; +int ddev_offline =0 ; + +QETH_DBF_TEXT (SETUP ,2 ,"detcapab" ); + ddev =CARD_DDEV (card); +if (!ddev->online) { + ddev_offline =1 ; + rc =ccw_device_set_online (ddev); +if (rc) { +QETH_DBF_TEXT_ (SETUP ,2 ,"3err%d" , rc); + goto out; + } + } + + rc =qeth_read_conf_data (card, (void **) &prcd, &length); +if (rc) { +QETH_DBF_MESSAGE (2 ,"%s qeth_read_conf_data returned %i\n" , +dev_name (&card->gdev->dev), rc); +QETH_DBF_TEXT_ (SETUP ,2 ,"5err%d" , rc); + goto out_offline; + } +qeth_configure_unitaddr (card, prcd); +qeth_configure_blkt_default (card, prcd); +kfree (prcd); + + rc =qdio_get_ssqd_desc (ddev, &card->ssqd); +if (rc) +QETH_DBF_TEXT_ (SETUP ,2 ,"6err%d" , rc); + +out_offline: +if (ddev_offline ==1 ) +ccw_device_set_offline (ddev); +out: +return ; +} +static int qeth_qdio_establish (struct qeth_card *card) {struct qdio_initialize init_data;
@@ -3886,6 +3941,7 @@ int qeth_core_hardsetup_card(struct qethQETH_DBF_TEXT (SETUP ,2 ,"hrdsetup" );atomic_set (&card->force_alloc_skb,0 ); +qeth_get_channel_path_desc (card); retry:if (retries) QETH_DBF_MESSAGE(2, "%s Retrying to do IDX activates.\n",
@@ -3914,6 +3970,7 @@ retriable:else goto retry; } +qeth_determine_capabilities (card);qeth_init_tokens (card);qeth_init_func_level (card); rc =qeth_idx_activate_channel (&card->read, qeth_idx_read_cb);
@@ -4183,41 +4240,6 @@ void qeth_core_free_discipline(struct qe card->discipline.ccwgdriver =NULL ; } -static void qeth_determine_capabilities (struct qeth_card *card) -{ -int rc; -int length; -char *prcd; - -QETH_DBF_TEXT (SETUP ,2 ,"detcapab" ); - rc =ccw_device_set_online (CARD_DDEV (card)); -if (rc) { -QETH_DBF_TEXT_ (SETUP ,2 ,"3err%d" , rc); - goto out; - } - - - rc =qeth_read_conf_data (card, (void **) &prcd, &length); -if (rc) { -QETH_DBF_MESSAGE (2 ,"%s qeth_read_conf_data returned %i\n" , -dev_name (&card->gdev->dev), rc); -QETH_DBF_TEXT_ (SETUP ,2 ,"5err%d" , rc); - goto out_offline; - } -qeth_configure_unitaddr (card, prcd); -qeth_configure_blkt_default (card, prcd); -kfree (prcd); - - rc =qdio_get_ssqd_desc (CARD_DDEV (card), &card->ssqd); -if (rc) -QETH_DBF_TEXT_ (SETUP ,2 ,"6err%d" , rc); - -out_offline: -ccw_device_set_offline (CARD_DDEV (card)); -out: -return ; -} -static int qeth_core_probe_device (struct ccwgroup_device *gdev) {struct qeth_card *card;
PATCH 5/6 s390: Fix wrong size in memcmp (netiucv)
In reply to [email protected]From: Stefan Weil <[email protected]>
This error was reported by cppcheck:drivers/s390/net/netiucv.c:568: error: Using sizeof for array given as function argument returns the size of pointer.
sizeof(ipuser) did not result in 16 (as many programmers would have expected) but sizeof(u8 *), so it is 4 or 8, too small here.
---
drivers/s390/net/netiucv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/s390/net/netiucv.c +1 -1
@@ -565,7 +565,7 @@ static int netiucv_callback_connreq(strustruct iucv_event ev;int rc; -if (memcmp (iucvMagic, ipuser,sizeof (ipuser))) +if (memcmp (iucvMagic, ipuser,16 ))/* ipuser must match iucvMagic. */ return -EINVAL ; rc = -EINVAL ;
PATCH 6/6 s390: Fix possibly wrong size in strncmp (smsgiucv)
In reply to [email protected]From: Stefan Weil <[email protected]>
This error was reported by cppcheck:drivers/s390/net/smsgiucv.c:63: error: Using sizeof for array given as function argument returns the size of pointer.
Although there is no runtime problem as long as sizeof(u8 *) == 8, this misleading code should get fixed.
---
drivers/s390/net/smsgiucv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/s390/net/smsgiucv.c +1 -1
@@ -60,7 +60,7 @@ static struct iucv_handler smsg_handlerstatic int smsg_path_pending (struct iucv_path *path,u8 ipvmid[8 ],u8 ipuser[16 ]) { -if (strncmp (ipvmid,"*MSG " ,sizeof (ipvmid)) !=0 ) +if (strncmp (ipvmid,"*MSG " ,8 ) !=0 )return -EINVAL ;/* Path pending from *MSG. */ return iucv_path_accept (path, &smsg_handler,"SMSGIUCV " ,NULL );
David Miller
maintainerFrom: [email protected]
Date: Wed, 02 Feb 2011 17:04:30 +0100
Quoted 5 lines
Hi Dave,
I have removed the
NET_SKB_PADpatch from the patch set. We will define it in an arch specific header. The new version of the patch will come via the s390 tree. Thx!
All applied, thanks Frank.