s390: network patches for net-next
Subsystems (4)
cover s390: network patches for net-next
Hi Dave,
here are some s390 related patches for net-next
shortlog:
Stefan Raspl (6)
qeth: Fix retry logic in hardsetup
qeth: Remove unused exports
qeth: Support VEPA mode
qeth: Update Kconfig wording
qeth: Make s390dbf card entries persistent
qeth: Fix HiperSockets performance regression
Thanks,
Frank
PATCH 1/6 qeth: Fix retry logic in hardsetup
From: Stefan Raspl <[email protected]>
The previous code did never retry any idx setup unless retries were done for device offline/online at the beginning of the function.
--- drivers/s390/net/qeth_core_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/s390/net/qeth_core_main.c +3 -3
@@ -4765,14 +4765,14 @@ static struct ccw_driver qeth_ccw_driverint qeth_core_hardsetup_card (struct qeth_card *card) { -int retries =0 ; +int retries =3 ;int rc;QETH_DBF_TEXT (SETUP ,2 ,"hrdsetup" );atomic_set (&card->force_alloc_skb,0 );qeth_update_from_chp_desc (card); retry: -if (retries) +if (retries <3 )QETH_DBF_MESSAGE (2 ,"%s Retrying to do IDX activates.\n" ,dev_name (&card->gdev->dev));ccw_device_set_offline (CARD_DDEV (card));
@@ -4794,7 +4794,7 @@ retriable:return rc; }else if (rc) {QETH_DBF_TEXT_ (SETUP ,2 ,"1err%d" , rc); -if (++retries >3 ) +if (--retries <0 ) goto out;else goto retry;
PATCH 2/6 qeth: Remove unused exports
In reply to [email protected]From: Stefan Raspl <[email protected]>
Remove exports that are not used anywhere else.
--- drivers/s390/net/qeth_core.h | 3 --- drivers/s390/net/qeth_core_main.c | 6 ++---- 2 files changed, 2 insertions(+), 7 deletions(-)
drivers/s390/net/qeth_core.h +0 -3
@@ -909,9 +909,6 @@ struct qeth_cmd_buffer *qeth_wait_for_buint qeth_mdio_read (struct net_device *,int ,int );int qeth_snmp_command (struct qeth_card *,char __user *);int qeth_query_oat_command (struct qeth_card *,char __user *); -struct qeth_cmd_buffer *qeth_get_adapter_cmd (struct qeth_card *,__u32 ,__u32 ); -int qeth_default_setadapterparms_cb (struct qeth_card *,struct qeth_reply *, -unsigned long );int qeth_send_control_data (struct qeth_card *,int ,struct qeth_cmd_buffer *,int (*reply_cb)(struct qeth_card *,struct qeth_reply *,unsigned long ),void *reply_param);
drivers/s390/net/qeth_core_main.c +2 -4
@@ -2868,7 +2868,7 @@ int qeth_send_startlan(struct qeth_card }EXPORT_SYMBOL_GPL (qeth_send_startlan); -int qeth_default_setadapterparms_cb (struct qeth_card *card, +static int qeth_default_setadapterparms_cb (struct qeth_card *card,struct qeth_reply *reply,unsigned long data) {struct qeth_ipa_cmd *cmd;
@@ -2881,7 +2881,6 @@ int qeth_default_setadapterparms_cb(stru cmd->data.setadapterparms.hdr.return_code;return 0 ; } -EXPORT_SYMBOL_GPL (qeth_default_setadapterparms_cb);static int qeth_query_setadapterparms_cb (struct qeth_card *card,struct qeth_reply *reply,unsigned long data)
@@ -2901,7 +2900,7 @@ static int qeth_query_setadapterparms_cbreturn qeth_default_setadapterparms_cb (card, reply, (unsigned long )cmd); } -struct qeth_cmd_buffer *qeth_get_adapter_cmd (struct qeth_card *card, +static struct qeth_cmd_buffer *qeth_get_adapter_cmd (struct qeth_card *card,__u32 command,__u32 cmdlen) {struct qeth_cmd_buffer *iob;
@@ -2917,7 +2916,6 @@ struct qeth_cmd_buffer *qeth_get_adapterreturn iob; } -EXPORT_SYMBOL_GPL (qeth_get_adapter_cmd);int qeth_query_setadapterparms (struct qeth_card *card) {
PATCH 3/6 qeth: Support VEPA mode
In reply to [email protected]From: Stefan Raspl <[email protected]>
The existing port isolation mode 'forward' will now verify that the adjacent switch port supports the required reflective relay (RR) mode. This patch adds the required error handling for the cases where enabling port isolation mode 'forward' can now fail.
Furthermore, once established, we never fall back from one of the port isolation modes to a non-isolated mode without further user-interaction. This includes cases where the isolation mode was enabled successfully, but ceases to work e.g. due to configuration changes at the switch port. Finally, configuring an isolation mode with the device being offline will make onlining the device fail permanently upon errors encountered until either errors are resolved or the isolation mode is changed by the user to a different mode.
--- drivers/s390/net/qeth_core.h | 5 + drivers/s390/net/qeth_core_main.c | 135 +++++++++++++++++++++++--------------- drivers/s390/net/qeth_core_mpc.c | 1 drivers/s390/net/qeth_core_mpc.h | 5 + drivers/s390/net/qeth_core_sys.c | 3 drivers/s390/net/qeth_l2_main.c | 16 ++-- drivers/s390/net/qeth_l3_main.c | 14 +-- 7 files changed, 112 insertions(+), 67 deletions(-)
drivers/s390/net/qeth_core.h +4 -1
@@ -678,6 +678,7 @@ struct qeth_card_options {int performance_stats;int rx_sg_cb;enum qeth_ipa_isolation_modes isolation; +enum qeth_ipa_isolation_modes prev_isolation;int sniffer;enum qeth_cq cq;char hsuid[9 ];
@@ -789,6 +790,7 @@ struct qeth_card {struct qeth_rx rx;struct delayed_work buffer_reclaim_work;int reclaim_index; +struct work_struct close_dev_work; };struct qeth_card_list_struct {
@@ -925,12 +927,13 @@ void qeth_core_get_strings(struct net_devoid qeth_core_get_drvinfo (struct net_device *,struct ethtool_drvinfo *);void qeth_dbf_longtext (debug_info_t *id,int level,char *text, ...);int qeth_core_ethtool_get_settings (struct net_device *,struct ethtool_cmd *); -int qeth_set_access_ctrl_online (struct qeth_card *card); +int qeth_set_access_ctrl_online (struct qeth_card *card,int fallback);int qeth_hdr_chk_and_bounce (struct sk_buff *,int );int qeth_configure_cq (struct qeth_card *,enum qeth_cq );int qeth_hw_trap (struct qeth_card *,enum qeth_diags_trap_action );int qeth_query_ipassists (struct qeth_card *,enum qeth_prot_versions prot);void qeth_trace_features (struct qeth_card *); +void qeth_close_dev (struct qeth_card *);/* exports for OSN */ int qeth_osn_assist (struct net_device *,void *,int );
drivers/s390/net/qeth_core_main.c +84 -51
233 lines not on this page · raw message
drivers/s390/net/qeth_core_mpc.c +1 -0
@@ -204,6 +204,7 @@ static struct ipa_rc_msg qeth_ipa_rc_msg {IPA_RC_INVALID_SETRTG_INDICATOR, "Invalid SETRTG indicator"}, {IPA_RC_MC_ADDR_ALREADY_DEFINED, "Multicast address already defined"}, {IPA_RC_LAN_OFFLINE, "STRTLAN_LAN_DISABLED - LAN offline"}, + {IPA_RC_VEPA_TO_VEB_TRANSITION, "Adj. switch disabled port mode RR"}, {IPA_RC_INVALID_IP_VERSION2, "Invalid IP version"}, {IPA_RC_ENOMEM, "Memory problem"}, {IPA_RC_FFFF, "Unknown Error"}
drivers/s390/net/qeth_core_mpc.h +5 -0
@@ -177,6 +177,7 @@ enum qeth_ipa_return_codes {IPA_RC_INVALID_SETRTG_INDICATOR =0xe012 ,IPA_RC_MC_ADDR_ALREADY_DEFINED =0xe013 ,IPA_RC_LAN_OFFLINE =0xe080 , +IPA_RC_VEPA_TO_VEB_TRANSITION =0xe090 ,IPA_RC_INVALID_IP_VERSION2 =0xf001 ,IPA_RC_ENOMEM =0xfffe ,IPA_RC_FFFF =0xffff
@@ -269,6 +270,9 @@ enum qeth_ipa_set_access_mode_rc {SET_ACCESS_CTRL_RC_ALREADY_ISOLATED =0x0010 ,SET_ACCESS_CTRL_RC_NONE_SHARED_ADAPTER =0x0014 ,SET_ACCESS_CTRL_RC_ACTIVE_CHECKSUM_OFF =0x0018 , +SET_ACCESS_CTRL_RC_REFLREL_UNSUPPORTED =0x0022 , +SET_ACCESS_CTRL_RC_REFLREL_FAILED =0x0024 , + SET_ACCESS_CTRL_RC_REFLREL_DEACT_FAILED = 0x0028, };
@@ -386,6 +390,7 @@ struct qeth_snmp_ureq {/* SET_ACCESS_CONTROL: same format for request and reply */ struct qeth_set_access_ctrl {__u32 subcmd_code; +__u8 reserved[8 ]; } __attribute__((packed));struct qeth_query_oat {
drivers/s390/net/qeth_core_sys.c +2 -1
@@ -513,10 +513,11 @@ static ssize_t qeth_dev_isolation_store( rc = count;/* defer IP assist if device is offline (until discipline->set_online)*/ + card->options.prev_isolation = card->options.isolation; card->options.isolation = isolation;if (card->state ==CARD_STATE_SOFTSETUP || card->state ==CARD_STATE_UP ) { -int ipa_rc =qeth_set_access_ctrl_online (card); +int ipa_rc =qeth_set_access_ctrl_online (card,1 );if (ipa_rc !=0 ) rc = ipa_rc; }
drivers/s390/net/qeth_l2_main.c +9 -7
@@ -1025,9 +1025,14 @@ static int __qeth_l2_set_online(struct c contin:if ((card->info.type ==QETH_CARD_TYPE_OSD ) || - (card->info.type ==QETH_CARD_TYPE_OSX )) + (card->info.type ==QETH_CARD_TYPE_OSX )) {/* configure isolation level */ -qeth_set_access_ctrl_online (card); + rc =qeth_set_access_ctrl_online (card,0 ); +if (rc) { + rc = -ENODEV ; + goto out_remove; + } + }if (card->info.type !=QETH_CARD_TYPE_OSN && card->info.type !=QETH_CARD_TYPE_OSM )
@@ -1144,12 +1149,9 @@ static int qeth_l2_recover(void *ptr)dev_info (&card->gdev->dev,"Device successfully recovered!\n" ); else { -if (rtnl_trylock ()) { -dev_close (card->dev); -rtnl_unlock (); -dev_warn (&card->gdev->dev,"The qeth device driver " +qeth_close_dev (card); +dev_warn (&card->gdev->dev,"The qeth device driver " "failed to recover an error on the device\n" ); - } }qeth_clear_thread_start_bit (card,QETH_RECOVER_THREAD );qeth_clear_thread_running_bit (card,QETH_RECOVER_THREAD );
drivers/s390/net/qeth_l3_main.c +7 -7
@@ -1449,7 +1449,8 @@ static int qeth_l3_start_ipassists(struc {QETH_CARD_TEXT (card,3 ,"strtipas" ); -qeth_set_access_ctrl_online (card);/* go on*/ +if (qeth_set_access_ctrl_online (card,0 )) +return -EIO ;qeth_l3_start_ipa_arp_processing (card);/* go on*/ qeth_l3_start_ipa_ip_fragmentation (card);/* go on*/ qeth_l3_start_ipa_source_mac (card);/* go on*/
@@ -3388,8 +3389,10 @@ contin:QETH_DBF_TEXT_ (SETUP ,2 ,"2err%d" , rc);if (!card->options.sniffer) { rc =qeth_l3_start_ipassists (card); -if (rc) +if (rc) {QETH_DBF_TEXT_ (SETUP ,2 ,"3err%d" , rc); + goto out_remove; + } rc =qeth_l3_setrouting_v4 (card);if (rc)QETH_DBF_TEXT_ (SETUP ,2 ,"4err%d" , rc);
@@ -3511,12 +3514,9 @@ static int qeth_l3_recover(void *ptr)dev_info (&card->gdev->dev,"Device successfully recovered!\n" ); else { -if (rtnl_trylock ()) { -dev_close (card->dev); -rtnl_unlock (); -dev_warn (&card->gdev->dev,"The qeth device driver " +qeth_close_dev (card); +dev_warn (&card->gdev->dev,"The qeth device driver " "failed to recover an error on the device\n" ); - } }qeth_clear_thread_start_bit (card,QETH_RECOVER_THREAD );qeth_clear_thread_running_bit (card,QETH_RECOVER_THREAD );
PATCH 4/6 qeth: Update Kconfig wording
In reply to [email protected]From: Stefan Raspl <[email protected]>
Refer to virtual NICs instead of GuestLANs.
--- drivers/s390/net/Kconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/net/Kconfig +2 -2
@@ -74,8 +74,8 @@ config QETH depends on CCW && NETDEVICES && IP_MULTICAST && QDIO help This driver supports the IBM System z OSA Express adapters - in QDIO mode (all media types), HiperSockets interfaces and VM GuestLAN - interfaces in QDIO and HIPER mode. + in QDIO mode (all media types), HiperSockets interfaces and z/VM + virtual NICs for Guest LAN and VSWITCH. For details please refer to the documentation provided by IBM at <http://www.ibm.com/developerworks/linux/linux390>
PATCH 5/6 qeth: Make s390dbf card entries persistent
In reply to [email protected]From: Stefan Raspl <[email protected]>
As of now, s390dbf entries for the cards are discarded as soon as the device is removed. However, this will also bar us of all chances of getting valuable debug information after a device has been removed. This patch will keep the s390dbf entries around until the qeth module is removed.
--- drivers/s390/net/qeth_core_main.c | 90 ++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 12 deletions(-)
drivers/s390/net/qeth_core_main.c +78 -12
@@ -5122,13 +5122,81 @@ static const struct device_type qeth_osn .groups = qeth_osn_attr_groups, }; +#define DBF_NAME_LEN 20 + +struct qeth_dbf_entry { +char dbf_name[DBF_NAME_LEN ]; +debug_info_t *dbf_info; +struct list_head dbf_list; +}; + +static LIST_HEAD (qeth_dbf_list); +static DEFINE_MUTEX (qeth_dbf_list_mutex); + +static debug_info_t *qeth_get_dbf_entry (char *name) +{ +struct qeth_dbf_entry *entry; +debug_info_t *rc =NULL ; + +mutex_lock (&qeth_dbf_list_mutex); +list_for_each_entry (entry, &qeth_dbf_list, dbf_list) { +if (strcmp (entry->dbf_name, name) ==0 ) { + rc = entry->dbf_info; +break ; + } + } +mutex_unlock (&qeth_dbf_list_mutex); +return rc; +} + +static int qeth_add_dbf_entry (struct qeth_card *card,char *name) +{ +struct qeth_dbf_entry *new_entry; + + card->debug =debug_register (name,2 ,1 ,8 ); +if (!card->debug) { +QETH_DBF_TEXT_ (SETUP ,2 ,"%s" ,"qcdbf" ); + goto err; + } +if (debug_register_view (card->debug, &debug_hex_ascii_view)) + goto err_dbg; + new_entry =kzalloc (sizeof (struct qeth_dbf_entry ),GFP_KERNEL ); +if (!new_entry) + goto err_dbg; +strncpy (new_entry->dbf_name, name,DBF_NAME_LEN ); + new_entry->dbf_info = card->debug; +mutex_lock (&qeth_dbf_list_mutex); +list_add (&new_entry->dbf_list, &qeth_dbf_list); +mutex_unlock (&qeth_dbf_list_mutex); + +return 0 ; + +err_dbg: +debug_unregister (card->debug); +err: +return -ENOMEM ; +} + +static void qeth_clear_dbf_list (void ) +{ +struct qeth_dbf_entry *entry, *tmp; + +mutex_lock (&qeth_dbf_list_mutex); +list_for_each_entry_safe (entry, tmp, &qeth_dbf_list, dbf_list) { +list_del (&entry->dbf_list); +debug_unregister (entry->dbf_info); +kfree (entry); + } +mutex_unlock (&qeth_dbf_list_mutex); +} +static int qeth_core_probe_device (struct ccwgroup_device *gdev) {struct qeth_card *card;struct device *dev;int rc;unsigned long flags; -char dbf_name[20 ]; +char dbf_name[DBF_NAME_LEN ];QETH_DBF_TEXT (SETUP ,2 ,"probedev" );
@@ -5147,13 +5215,12 @@ static int qeth_core_probe_device(structsnprintf (dbf_name,sizeof (dbf_name),"qeth_card_%s" ,dev_name (&gdev->dev)); - card->debug =debug_register (dbf_name,2 ,1 ,8 ); + card->debug =qeth_get_dbf_entry (dbf_name);if (!card->debug) { -QETH_DBF_TEXT_ (SETUP ,2 ,"%s" ,"qcdbf" ); - rc = -ENOMEM ; - goto err_card; + rc =qeth_add_dbf_entry (card, dbf_name); +if (rc) + goto err_card; } -debug_register_view (card->debug, &debug_hex_ascii_view); card->read.ccwdev = gdev->cdev[0 ]; card->write.ccwdev = gdev->cdev[1 ];
@@ -5167,12 +5234,12 @@ static int qeth_core_probe_device(struct rc =qeth_determine_card_type (card);if (rc) {QETH_DBF_TEXT_ (SETUP ,2 ,"3err%d" , rc); - goto err_dbf; + goto err_card; } rc =qeth_setup_card (card);if (rc) {QETH_DBF_TEXT_ (SETUP ,2 ,"2err%d" , rc); - goto err_dbf; + goto err_card; }if (card->info.type ==QETH_CARD_TYPE_OSN )
@@ -5185,7 +5252,7 @@ static int qeth_core_probe_device(structcase QETH_CARD_TYPE_OSM : rc =qeth_core_load_discipline (card,QETH_DISCIPLINE_LAYER2 );if (rc) - goto err_dbf; + goto err_card; rc = card->discipline->setup (card->gdev);if (rc) goto err_disc;
@@ -5204,8 +5271,6 @@ static int qeth_core_probe_device(struct err_disc:qeth_core_free_discipline (card); -err_dbf: -debug_unregister (card->debug); err_card:qeth_core_free_card (card); err_dev:
@@ -5225,7 +5290,6 @@ static void qeth_core_remove_device(struqeth_core_free_discipline (card); } -debug_unregister (card->debug);write_lock_irqsave (&qeth_core_card_list.rwlock, flags);list_del (&card->list);write_unlock_irqrestore (&qeth_core_card_list.rwlock, flags);
@@ -5579,6 +5643,7 @@ static int __init qeth_core_init(void)pr_info ("loading core functions\n" );INIT_LIST_HEAD (&qeth_core_card_list.list); +INIT_LIST_HEAD (&qeth_dbf_list);rwlock_init (&qeth_core_card_list.rwlock);mutex_init (&qeth_mod_mutex);
@@ -5630,6 +5695,7 @@ out_err: static void __exit qeth_core_exit(void) { +qeth_clear_dbf_list ();destroy_workqueue (qeth_wq);ccwgroup_driver_unregister (&qeth_core_ccwgroup_driver);ccw_driver_unregister (&qeth_ccw_driver);
PATCH 6/6 qeth: Fix HiperSockets performance regression
In reply to [email protected]From: Stefan Raspl <[email protected]>
Commit 46d3ceab "tcp: TCP Small Queues" has severly degraded performance for single connection RR workloads on HiperSockets with MTU >=16K due to a conflict of the TCP Small Queues approach with our buffer scan threshold which releases buffers not frequently enough yet. This fix restores performance to the same level as before cited commit.
--- drivers/s390/net/qeth_core_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/s390/net/qeth_core_main.c +1 -1
@@ -4700,7 +4700,7 @@ static int qeth_qdio_establish(struct qe init_data.output_sbal_addr_array = (void **) out_sbal_ptrs; init_data.output_sbal_state_array = card->qdio.out_bufstates; init_data.scan_threshold = - (card->info.type ==QETH_CARD_TYPE_IQD ) ?8 :32 ; + (card->info.type ==QETH_CARD_TYPE_IQD ) ?1 :32 ;if (atomic_cmpxchg (&card->qdio.state,QETH_QDIO_ALLOCATED ,QETH_QDIO_ESTABLISHED ) ==QETH_QDIO_ALLOCATED ) {
David Miller
maintainerFrom: [email protected]
Date: Mon, 21 Jan 2013 13:30:17 +0100
Quoted 1 line
here are some s390 related patches for net-next
All applied, thanks.