s390: qeth patches for 2.6.36
Subsystems (5)
cover s390: qeth patches for 2.6.36
Hi Dave,
this patch set contains qeth + 1 smsgiucv patches for 2.6.36 (net-next).
shortlog:
Ursula Braun (3)
smsgiucv: guarantee single iucv connect in thaw
qeth: specify correct function level for OSN devices
qeth: handle missing z/VM authorization of OSX
Carsten Otte (7)
qeth: Rework qeth_dbf_longtext
qeth: Add new s390 debug feature for each qeth card
qeth: Fold qeth_trace debug area
qeth: Fold qeth_sense debug area
qeth: Fold qeth_misc debug area
qeth: Fold qeth_qerr debug area
qeth: fix use after free for qeth's debug area
Frank Blaschka (1)
qeth: fix page breaks in hw headers
Thanks,
Frank
PATCH 1/11 smsgiucv: guarantee single iucv connect in thaw
From: Ursula Braun <[email protected]>
If another smsgiucv_app device exists, suspend / resume fails with iucv path list corruption, because the same iucv_path_connect is called twice.
The patch introduces a flag to save connect status of the smsgiucv path to make sure iucv_path_connect in smsg_pm_restore_thaw is called only once.
---
drivers/s390/net/smsgiucv.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/s390/net/smsgiucv.c +9 -2
@@ -47,6 +47,7 @@ static struct device *smsg_dev;static DEFINE_SPINLOCK (smsg_list_lock);static LIST_HEAD (smsg_list); +static int iucv_path_connected;static int smsg_path_pending (struct iucv_path *,u8 ipvmid[8 ],u8 ipuser[16 ]);static void smsg_message_pending (struct iucv_path *,struct iucv_message *);
@@ -142,8 +143,10 @@ static int smsg_pm_freeze(struct device#ifdef CONFIG_PM_DEBUG printk (KERN_WARNING "smsg_pm_freeze\n" );#endif -if (smsg_path) +if (smsg_path && iucv_path_connected) {iucv_path_sever (smsg_path,NULL ); + iucv_path_connected =0 ; + }return 0 ; }
@@ -154,7 +157,7 @@ static int smsg_pm_restore_thaw(struct d#ifdef CONFIG_PM_DEBUG printk (KERN_WARNING "smsg_pm_restore_thaw\n" );#endif -if (smsg_path) { +if (smsg_path && iucv_path_connected) {memset (smsg_path,0 ,sizeof (*smsg_path)); smsg_path->msglim =255 ; smsg_path->flags =0 ;
@@ -165,6 +168,8 @@ static int smsg_pm_restore_thaw(struct dprintk (KERN_ERR "iucv_path_connect returned with rc %i\n" , rc);#endif +if (!rc) + iucv_path_connected =1 ;cpcmd ("SET SMSG IUCV" ,NULL ,0 ,NULL ); }return 0 ;
@@ -214,6 +219,8 @@ static int __init smsg_init(void) NULL, NULL, NULL);if (rc) goto out_free_path; +else + iucv_path_connected =1 ; smsg_dev =kzalloc (sizeof (struct device ),GFP_KERNEL );if (!smsg_dev) { rc = -ENOMEM ;
PATCH 2/11 qeth: Rework qeth_dbf_longtext
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch decouples qeth_dbf_longtext from qeth's static debug array. The function only uses one member anyway.
---
drivers/s390/net/qeth_core.h | 4 ++-- drivers/s390/net/qeth_core_main.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/s390/net/qeth_core.h +2 -2
@@ -71,7 +71,7 @@ struct qeth_dbf_info { debug_sprintf_event(qeth_dbf[QETH_DBF_MSG].id, level, text) #define QETH_DBF_TEXT_(name, level, text...) \ - qeth_dbf_longtext(QETH_DBF_##name, level, text) + qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text)#define SENSE_COMMAND_REJECT_BYTE 0#define SENSE_COMMAND_REJECT_FLAG 0x80
@@ -857,7 +857,7 @@ void qeth_core_get_ethtool_stats(struct struct ethtool_stats *, u64 *);void qeth_core_get_strings (struct net_device *,u32 ,u8 *);void qeth_core_get_drvinfo (struct net_device *,struct ethtool_drvinfo *); -void qeth_dbf_longtext (enum qeth_dbf_names dbf_nix,int level,char *text, ...); +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);
drivers/s390/net/qeth_core_main.c +3 -3
@@ -4164,17 +4164,17 @@ static void qeth_unregister_dbf_views(vo } } -void qeth_dbf_longtext (enum qeth_dbf_names dbf_nix,int level,char *fmt, ...) +void qeth_dbf_longtext (debug_info_t *id,int level,char *fmt, ...) {char dbf_txt_buf[32 ];va_list args; -if (level > (qeth_dbf[dbf_nix].id)->level) +if (level > id->level)return ;va_start (args, fmt);vsnprintf (dbf_txt_buf,sizeof (dbf_txt_buf), fmt, args);va_end (args); -debug_text_event (qeth_dbf[dbf_nix].id, level, dbf_txt_buf); +debug_text_event (id, level, dbf_txt_buf); }EXPORT_SYMBOL_GPL (qeth_dbf_longtext);
PATCH 3/11 qeth: Add new s390 debug feature for each qeth card
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch adds a debug area for each qeth card. This debug area will replace various other debug areas that are global for all cards handled by the device driver. On crash dump analysis this makes life easier when trying to find out what's going on with an interface. Also, the forest of debug areas for this device driver is significantly cleared up.
---
drivers/s390/net/qeth_core.h | 13 +++++++++++++ drivers/s390/net/qeth_core_main.c | 21 ++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-)
drivers/s390/net/qeth_core.h +13 -0
@@ -73,6 +73,18 @@ struct qeth_dbf_info { #define QETH_DBF_TEXT_(name, level, text...) \ qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text) +#define QETH_CARD_TEXT (card, level, text) \ + debug_text_event(card->debug, level, text) + +#define QETH_CARD_HEX (card, level, addr, len) \ + debug_event(card->debug, level, (void *)(addr), len) + +#define QETH_CARD_MESSAGE(card, text...) \ + debug_sprintf_event(card->debug, level, text) + +#define QETH_CARD_TEXT_(card, level, text...) \ + qeth_dbf_longtext(card->debug, level, text) +#define SENSE_COMMAND_REJECT_BYTE 0#define SENSE_COMMAND_REJECT_FLAG 0x80#define SENSE_RESETTING_EVENT_BYTE 1
@@ -738,6 +750,7 @@ struct qeth_card {atomic_t force_alloc_skb;struct service_level qeth_service_level;struct qdio_ssqd_desc ssqd; +debug_info_t *debug;struct mutex conf_mutex; };
drivers/s390/net/qeth_core_main.c +18 -3
@@ -4282,6 +4282,7 @@ static int qeth_core_probe_device(structstruct device *dev;int rc;unsigned long flags; +char dbf_name[20 ];QETH_DBF_TEXT (SETUP ,2 ,"probedev" );
@@ -4297,6 +4298,17 @@ static int qeth_core_probe_device(struct rc = -ENOMEM ; goto err_dev; } + +snprintf (dbf_name,sizeof (dbf_name),"qeth_card_%s" , +dev_name (&gdev->dev)); + card->debug =debug_register (dbf_name,2 ,1 ,8 ); +if (!card->debug) { +QETH_DBF_TEXT_ (SETUP ,2 ,"%s" ,"qcdbf" ); + rc = -ENOMEM ; + goto err_card; + } +debug_register_view (card->debug, &debug_hex_ascii_view); + card->read.ccwdev = gdev->cdev[0 ]; card->write.ccwdev = gdev->cdev[1 ]; card->data.ccwdev = gdev->cdev[2 ];
@@ -4309,12 +4321,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_card; + goto err_dbf; } rc =qeth_setup_card (card);if (rc) {QETH_DBF_TEXT_ (SETUP ,2 ,"2err%d" , rc); - goto err_card; + goto err_dbf; }if (card->info.type ==QETH_CARD_TYPE_OSN )
@@ -4322,7 +4334,7 @@ static int qeth_core_probe_device(structelse rc =qeth_core_create_device_attributes (dev);if (rc) - goto err_card; + goto err_dbf;switch (card->info.type) {case QETH_CARD_TYPE_OSN :case QETH_CARD_TYPE_OSM :
@@ -4352,6 +4364,8 @@ err_attr:qeth_core_remove_osn_attributes (dev); elseqeth_core_remove_device_attributes (dev ); +err_dbf: +debug_unregister (card->debug); err_card:qeth_core_free_card (card); err_dev:
@@ -4375,6 +4389,7 @@ static void qeth_core_remove_device(stru }else {qeth_core_remove_device_attributes (&gdev->dev); } +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);
PATCH 4/11 qeth: Fold qeth_trace debug area
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch removes the qeth_trace debug area. All relevant data is logged into either qeth_setup or into each card's own debug area. Superfluous information (such as the card number when logging into the card's own debug area) is removed without replacement.
---
drivers/s390/net/qeth_core.h | 1 drivers/s390/net/qeth_core_main.c | 210 ++++++++++++++++------------------- drivers/s390/net/qeth_l2_main.c | 94 +++++++-------- drivers/s390/net/qeth_l3_main.c | 226 +++++++++++++++++++------------------- 4 files changed, 259 insertions(+), 272 deletions(-)
drivers/s390/net/qeth_core.h +0 -1
@@ -41,7 +41,6 @@enum qeth_dbf_names {QETH_DBF_SETUP ,QETH_DBF_QERR , -QETH_DBF_TRACE ,QETH_DBF_MSG ,QETH_DBF_SENSE ,QETH_DBF_MISC ,
drivers/s390/net/qeth_core_main.c +101 -109
712 lines not on this page · raw message
drivers/s390/net/qeth_l2_main.c +45 -49
318 lines not on this page · raw message
drivers/s390/net/qeth_l3_main.c +113 -113
723 lines not on this page · raw message
PATCH 5/11 qeth: Fold qeth_sense debug area
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch removes the sense debug area completely. Despite the name this debug area makes no sense at all because it's unused completely. Ouch.
---
drivers/s390/net/qeth_core.h | 1 - drivers/s390/net/qeth_core_main.c | 2 -- 2 files changed, 3 deletions(-)
drivers/s390/net/qeth_core.h +0 -1
@@ -42,7 +42,6 @@ enum qeth_dbf_names {QETH_DBF_SETUP ,QETH_DBF_QERR ,QETH_DBF_MSG , -QETH_DBF_SENSE ,QETH_DBF_MISC ,QETH_DBF_CTRL ,QETH_DBF_INFOS /* must be last element */
drivers/s390/net/qeth_core_main.c +0 -2
@@ -36,8 +36,6 @@ struct qeth_dbf_info qeth_dbf[QETH_DBF_I 2, 1, 8, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_MSG] = {"qeth_msg", 8, 1, 128, 3, &debug_sprintf_view, NULL}, - [QETH_DBF_SENSE] = {"qeth_sense", - 2, 1, 64, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_MISC] = {"qeth_misc", 2, 1, 256, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_CTRL] = {"qeth_control",
PATCH 6/11 qeth: Fold qeth_misc debug area
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch removes the misc debug area. Instead of logging the entire skb we just log a pointer to it into the card's local debug area in qeth_core_get_next_skb. Other then that, this debug area is not used anywhere.
---
drivers/s390/net/qeth_core.h | 1 - drivers/s390/net/qeth_core_main.c | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-)
drivers/s390/net/qeth_core.h +0 -1
@@ -42,7 +42,6 @@ enum qeth_dbf_names {QETH_DBF_SETUP ,QETH_DBF_QERR ,QETH_DBF_MSG , -QETH_DBF_MISC ,QETH_DBF_CTRL , QETH_DBF_INFOS /* must be last element */ };
drivers/s390/net/qeth_core_main.c +1 -3
@@ -36,8 +36,6 @@ struct qeth_dbf_info qeth_dbf[QETH_DBF_I 2, 1, 8, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_MSG] = {"qeth_msg", 8, 1, 128, 3, &debug_sprintf_view, NULL}, - [QETH_DBF_MISC] = {"qeth_misc", - 2, 1, 256, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_CTRL] = {"qeth_control", 8, 1, QETH_DBF_CTRL_LEN, 5, &debug_hex_ascii_view, NULL}, };
@@ -4117,7 +4115,7 @@ struct sk_buff *qeth_core_get_next_skb(sQETH_DBF_TEXT (QERR ,2 ,"unexeob" );QETH_DBF_TEXT_ (QERR ,2 ,"%s" ,CARD_BUS_ID (card)); -QETH_DBF_HEX (MISC ,4 , buffer,sizeof (*buffer)); +QETH_CARD_HEX (card,2 , buffer,sizeof (void *));dev_kfree_skb_any (skb); card->stats.rx_errors++;return NULL ;
PATCH 7/11 qeth: Fold qeth_qerr debug area
In reply to [email protected]From: Carsten Otte <[email protected]>
This patch removes the qerr debug area. Most info that goes in here is logged to the card's local debug area already, those duplicates are removed. All other elements are moved to the card's local debug area.
---
drivers/s390/net/qeth_core.h | 1 - drivers/s390/net/qeth_core_main.c | 14 ++++---------- 2 files changed, 4 insertions(+), 11 deletions(-)
drivers/s390/net/qeth_core.h +0 -1
@@ -40,7 +40,6 @@*/ enum qeth_dbf_names {QETH_DBF_SETUP , -QETH_DBF_QERR ,QETH_DBF_MSG ,QETH_DBF_CTRL ,QETH_DBF_INFOS /* must be last element */
drivers/s390/net/qeth_core_main.c +4 -10
@@ -32,8 +32,6 @@ struct qeth_dbf_info qeth_dbf[QETH_DBF_I /* N P A M L V H */ [QETH_DBF_SETUP] = {"qeth_setup", 8, 1, 8, 5, &debug_hex_ascii_view, NULL}, - [QETH_DBF_QERR] = {"qeth_qerr", - 2, 1, 8, 2, &debug_hex_ascii_view, NULL}, [QETH_DBF_MSG] = {"qeth_msg", 8, 1, 128, 3, &debug_sprintf_view, NULL}, [QETH_DBF_CTRL] = {"qeth_control",
@@ -2641,12 +2639,11 @@ int qeth_check_qdio_errors(struct qeth_c {if (qdio_error) {QETH_CARD_TEXT (card,2 , dbftext); -QETH_DBF_TEXT (QERR ,2 , dbftext); -QETH_DBF_TEXT_ (QERR ,2 ," F15=%02X" , +QETH_CARD_TEXT_ (card,2 ," F15=%02X" , buf->element[15 ].flags &0xff ); -QETH_DBF_TEXT_ (QERR ,2 ," F14=%02X" , +QETH_CARD_TEXT_ (card,2 ," F14=%02X" , buf->element[14 ].flags &0xff ); -QETH_DBF_TEXT_ (QERR ,2 ," qerr=%X" , qdio_error); +QETH_CARD_TEXT_ (card,2 ," qerr=%X" , qdio_error);if ((buf->element[15 ].flags &0xff ) ==0x12 ) { card->stats.rx_dropped++;return 0 ;
@@ -3201,7 +3198,7 @@ int qeth_do_send_packet_fast(struct qeth rc =dev_queue_xmit (skb); }else {dev_kfree_skb_any (skb); -QETH_DBF_TEXT (QERR ,2 ,"qrdrop" ); +QETH_CARD_TEXT (card,2 ,"qrdrop" ); } }return 0 ;
@@ -4112,9 +4109,6 @@ struct sk_buff *qeth_core_get_next_skb(sif (skb_len) {if (qeth_is_last_sbale (element)) {QETH_CARD_TEXT (card,4 ,"unexeob" ); -QETH_DBF_TEXT (QERR ,2 ,"unexeob" ); -QETH_DBF_TEXT_ (QERR ,2 ,"%s" , -CARD_BUS_ID (card));QETH_CARD_HEX (card,2 , buffer,sizeof (void *));dev_kfree_skb_any (skb); card->stats.rx_errors++;
PATCH 8/11 qeth: fix use after free for qeths debug area
In reply to [email protected]From: Carsten Otte <[email protected]>
The function qeth_free_buffer_pool is called _after_ the per-card debug area has been released. This debug message is not all that usefull anyway, and thus gets removed.
---
drivers/s390/net/qeth_core_main.c | 1 - 1 file changed, 1 deletion(-)
drivers/s390/net/qeth_core_main.c +0 -1
@@ -973,7 +973,6 @@ static void qeth_free_buffer_pool(struct {struct qeth_buffer_pool_entry *pool_entry, *tmp;int i =0 ; -QETH_CARD_TEXT (card,5 ,"freepool" );list_for_each_entry_safe (pool_entry, tmp, &card->qdio.init_pool.entry_list, init_list){for (i =0 ; i <QETH_MAX_BUFFER_ELEMENTS (card); ++i)
PATCH 9/11 qeth: fix page breaks in hw headers
In reply to [email protected]From: Frank Blaschka <[email protected]>
Turning on memory debugging showed there could be page breaks in hardware headers. OSA does not allow this so we had to add code to bounce the header in case there is a page break. This patch also fixes a problem in case the skb->data part of a fragmented skb spreads multiple pages.
---
drivers/s390/net/qeth_core.h | 1 drivers/s390/net/qeth_core_main.c | 104 ++++++++++++++++---------------------- drivers/s390/net/qeth_l2_main.c | 7 +- drivers/s390/net/qeth_l3_main.c | 26 ++++----- 4 files changed, 65 insertions(+), 73 deletions(-)
drivers/s390/net/qeth_core.h +1 -0
@@ -869,6 +869,7 @@ void qeth_core_get_drvinfo(struct net_devoid 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_hdr_chk_and_bounce (struct sk_buff *,int );/* exports for OSN */ int qeth_osn_assist (struct net_device *,void *,int );
drivers/s390/net/qeth_core_main.c +46 -58
150 lines not on this page · raw message
drivers/s390/net/qeth_l2_main.c +5 -2
@@ -712,10 +712,13 @@ static int qeth_l2_hard_start_xmit(struc goto tx_drop; } -if (card->info.type !=QETH_CARD_TYPE_IQD ) +if (card->info.type !=QETH_CARD_TYPE_IQD ) { +if (qeth_hdr_chk_and_bounce (new_skb, +sizeof (struct qeth_hdr_layer2 ))) + goto tx_drop; rc =qeth_do_send_packet (card, queue, new_skb, hdr, elements); -else + }else rc =qeth_do_send_packet_fast (card, queue, new_skb, hdr, elements, data_offset, hd_len);if (!rc) {
drivers/s390/net/qeth_l3_main.c +13 -13
@@ -2904,19 +2904,11 @@ static inline int qeth_l3_tso_elements(sunsigned long tcpd = (unsigned long )tcp_hdr (skb) +tcp_hdr (skb)->doff *4 ;int tcpd_len = skb->len - (tcpd - (unsigned long )skb->data); -int elements =PFN_UP (tcpd + tcpd_len) -PFN_DOWN (tcpd); +int elements =PFN_UP (tcpd + tcpd_len -1 ) -PFN_DOWN (tcpd); elements +=skb_shinfo (skb)->nr_frags;return elements; } -static inline int qeth_l3_tso_check (struct sk_buff *skb) -{ -int len = ((unsigned long )tcp_hdr (skb) +tcp_hdr (skb)->doff *4 ) - - (unsigned long )skb->data; -return (((unsigned long )skb->data &PAGE_MASK ) != - (((unsigned long )skb->data + len) &PAGE_MASK )); -} -static int qeth_l3_hard_start_xmit (struct sk_buff *skb,struct net_device *dev) {int rc;
@@ -3016,8 +3008,6 @@ static int qeth_l3_hard_start_xmit(struc (cast_type == RTN_UNSPEC)) { hdr = (struct qeth_hdr *)skb_push (new_skb,sizeof (struct qeth_hdr_tso )); -if (qeth_l3_tso_check (new_skb)) -QETH_DBF_MESSAGE (2 ,"tso skb misaligned\n" );memset (hdr,0 ,sizeof (struct qeth_hdr_tso ));qeth_l3_fill_header (card, hdr, new_skb, ipv, cast_type);qeth_tso_fill_header (card, hdr, new_skb);
@@ -3048,10 +3038,20 @@ static int qeth_l3_hard_start_xmit(struc elements_needed += elems; nr_frags =skb_shinfo (new_skb)->nr_frags; -if (card->info.type !=QETH_CARD_TYPE_IQD ) +if (card->info.type !=QETH_CARD_TYPE_IQD ) { +int len; +if (large_send ==QETH_LARGE_SEND_TSO ) + len = ((unsigned long )tcp_hdr (new_skb) + +tcp_hdr (new_skb)->doff *4 ) - + (unsigned long )new_skb->data; +else + len =sizeof (struct qeth_hdr_layer3 ); + +if (qeth_hdr_chk_and_bounce (new_skb, len)) + goto tx_drop; rc =qeth_do_send_packet (card, queue, new_skb, hdr, elements_needed); -else + }else rc =qeth_do_send_packet_fast (card, queue, new_skb, hdr, elements_needed, data_offset,0 );
PATCH 10/11 qeth: specify correct function level for OSN devices
In reply to [email protected]From: Ursula Braun <[email protected]>
OSN devices use the same function level as OSD devices. This patch adds OSN-devices to the initialization function for func_level.
---
drivers/s390/net/qeth_core_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/s390/net/qeth_core_main.c +1 -0
@@ -1390,6 +1390,7 @@ static void qeth_init_func_level(structQETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT ;break ;case QETH_CARD_TYPE_OSD : +case QETH_CARD_TYPE_OSN : card->info.func_level =QETH_IDX_FUNC_LEVEL_OSD ;break ;default :
PATCH 11/11 qeth: handle missing z/VM authorization of OSX
In reply to [email protected]From: Ursula Braun <[email protected]>
For z/VM guest operating systems, OSX CHPIDs can only be used, if LPAR and z/VM userID are explicitly authorized through the Service Element. Issue a message if this SE-authorization is missing.
---
drivers/s390/net/qeth_core_main.c | 8 ++++++-- drivers/s390/net/qeth_core_mpc.h | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-)
drivers/s390/net/qeth_core_main.c +6 -2
@@ -512,6 +512,7 @@ static void qeth_send_control_data_cb(stcase -EIO :qeth_clear_ipacmd_list (card);qeth_schedule_recovery (card); +/* fall through */ default : goto out; }
@@ -1588,15 +1589,18 @@ static void qeth_idx_read_cb(struct qeth "host\n");break ;case QETH_IDX_ACT_ERR_AUTH : +case QETH_IDX_ACT_ERR_AUTH_USER :dev_err (&card->read.ccwdev->dev,"Setting the device online failed because of " -"insufficient LPAR authorization\n" ); +"insufficient authorization\n" );break ;default :QETH_DBF_MESSAGE (2 ,"%s IDX_ACTIVATE on read channel:" " negative reply\n" ,dev_name (&card->read.ccwdev->dev)); } +QETH_CARD_TEXT_ (card,2 ,"idxread%c" , +QETH_IDX_ACT_CAUSE_CODE (iob->data)); goto out; }
@@ -1929,7 +1933,7 @@ static int qeth_ulp_enable_cb(struct qet card->info.link_type = link_type; }else card->info.link_type =0 ; -QETH_DBF_TEXT_ (SETUP ,2 ,"link%d" , link_type); +QETH_DBF_TEXT_ (SETUP ,2 ,"link%d" , card->info.link_type);QETH_DBF_TEXT_ (SETUP ,2 ," rc%d" , iob->rc);return 0 ; }
drivers/s390/net/qeth_core_mpc.h +3 -2
@@ -616,8 +616,9 @@ extern unsigned char IDX_ACTIVATE_WRITE[#define QETH_IS_IDX_ACT_POS_REPLY (buffer) (((buffer)[0x08] & 3) == 2)#define QETH_IDX_REPLY_LEVEL (buffer) (buffer + 0x12)#define QETH_IDX_ACT_CAUSE_CODE (buffer) (buffer)[0x09] -#define QETH_IDX_ACT_ERR_EXCL 0x19 -#define QETH_IDX_ACT_ERR_AUTH 0x1E +#define QETH_IDX_ACT_ERR_EXCL 0x19 +#define QETH_IDX_ACT_ERR_AUTH 0x1E +#define QETH_IDX_ACT_ERR_AUTH_USER 0x20#define PDU_ENCAPSULATION (buffer) \ (buffer + *(buffer + (*(buffer + 0x0b)) + \
David Miller
maintainerFrom: [email protected]
Date: Tue, 22 Jun 2010 10:57:01 +0200
Quoted 3 lines
Hi Dave,
this patch set contains qeth + 1 smsgiucv patches for 2.6.36 (net-next).
All applied to net-next-2.6, thanks!