Skip to contentSkip to conversation

s390: qeth patches for 2.6.34

PATCH In review [email protected] 2 participants 5 messages Jan 11, 2010 – Jan 12, 2010

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

cover s390: qeth patches for 2.6.34

Hi Dave,

here are a couple of qeth patches for 2.6.34 (net-next).

shortlog:
Ursula Braun (2)
qeth: HiperSockets Network Traffic Analyzer
qeth: avoid recovery during device online setting

Einar Lueck (1)
qeth: default BLKT values for new OSA/3 hardware

Thanks,
Frank

#1 lore raw

PATCH 1/3 qeth: HiperSockets Network Traffic Analyzer

From: Ursula Braun <[email protected]>

New feature to trace HiperSockets network traffic for debugging purposes.

---

 drivers/s390/net/qeth_core.h      |    5 -
 drivers/s390/net/qeth_core_main.c |  130 ++++++++++++++++------------
 drivers/s390/net/qeth_core_mpc.h  |   44 +++++++++
 drivers/s390/net/qeth_core_sys.c  |    8 +
 drivers/s390/net/qeth_l2_main.c   |    3 
 drivers/s390/net/qeth_l3.h        |    2 
 drivers/s390/net/qeth_l3_main.c   |  174 ++++++++++++++++++++++++++++++++------
 drivers/s390/net/qeth_l3_sys.c    |   56 ++++++++++++
 8 files changed, 336 insertions(+), 86 deletions(-)
drivers/s390/net/qeth_core.h +4 -1
@@ -649,6 +649,7 @@ struct qeth_card_options {
 	int performance_stats;
 	int rx_sg_cb;
 	enum qeth_ipa_isolation_modes isolation;
+	int sniffer;
 };
 
 /*
@@ -737,6 +738,7 @@ struct qeth_card {
 	struct qeth_discipline discipline;
 	atomic_t force_alloc_skb;
 	struct service_level qeth_service_level;
+	struct qdio_ssqd_desc ssqd;
 };
 
 struct qeth_card_list_struct {
@@ -811,7 +813,8 @@ int qeth_send_ipa_cmd(struct qeth_card *
 struct qeth_cmd_buffer *qeth_get_ipacmd_buffer(struct qeth_card *,
 			enum qeth_ipa_cmds, enum qeth_prot_versions);
 int qeth_query_setadapterparms(struct qeth_card *);
-int qeth_check_qdio_errors(struct qdio_buffer *, unsigned int, const char *);
+int qeth_check_qdio_errors(struct qeth_card *, struct qdio_buffer *,
+		unsigned int, const char *);
 void qeth_queue_input_buffer(struct qeth_card *, int);
 struct sk_buff *qeth_core_get_next_skb(struct qeth_card *,
 		struct qdio_buffer *, struct qdio_buffer_element **, int *,
drivers/s390/net/qeth_core_main.c +74 -56

227 lines not on this page · raw message

drivers/s390/net/qeth_core_mpc.h +43 -1

80 lines not on this page · raw message

drivers/s390/net/qeth_core_sys.c +5 -3
@@ -118,7 +118,7 @@ static ssize_t qeth_dev_portno_store(str
 {
 	struct qeth_card *card = dev_get_drvdata(dev);
 	char *tmp;
-	unsigned int portno;
+	unsigned int portno, limit;
 
 	if (!card)
 		return -EINVAL;
@@ -128,9 +128,11 @@ static ssize_t qeth_dev_portno_store(str
 		return -EPERM;
 
 	portno = simple_strtoul(buf, &tmp, 16);
-	if (portno > QETH_MAX_PORTNO) {
+	if (portno > QETH_MAX_PORTNO)
+		return -EINVAL;
+	limit = (card->ssqd.pcnt ? card->ssqd.pcnt - 1 : card->ssqd.pcnt);
+	if (portno > limit)
 		return -EINVAL;
-	}
 
 	card->info.portno = portno;
 	return count;
drivers/s390/net/qeth_l2_main.c +2 -1
@@ -769,7 +769,8 @@ static void qeth_l2_qdio_input_handler(s
 		index = i % QDIO_MAX_BUFFERS_PER_Q;
 		buffer = &card->qdio.in_q->bufs[index];
 		if (!(qdio_err &&
-		      qeth_check_qdio_errors(buffer->buffer, qdio_err, "qinerr")))
+		      qeth_check_qdio_errors(card, buffer->buffer, qdio_err,
+					     "qinerr")))
 			qeth_l2_process_inbound_buffer(card, buffer, index);
 		/* clear buffer and give back to hardware */
 		qeth_put_buffer_pool_entry(card, buffer->pool_entry);
drivers/s390/net/qeth_l3.h +2 -0
@@ -13,6 +13,8 @@
 
 #include "qeth_core.h"
 
+#define QETH_SNIFF_AVAIL	0x0008
+
 struct qeth_ipaddr {
 	struct list_head entry;
 	enum qeth_ip_types type;
drivers/s390/net/qeth_l3_main.c +150 -24

270 lines not on this page · raw message

drivers/s390/net/qeth_l3_sys.c +56 -0

68 lines not on this page · raw message

#3 lore raw

PATCH 2/3 qeth: avoid recovery during device online setting

In reply to [email protected]

From: Ursula Braun <[email protected]>

If a qeth device is set online, several initialisation steps are performed. If a failure in one of these steps occurs, the qeth device is reset into DOWN state. If due to the failure a qeth recovery is scheduled and started in another thread, this might cause all kinds of conflicts, even a kernel panic. The patch forbids scheduling of a qeth recovery while online processing is performed till the card is in state SOFTSETUP.

---

 drivers/s390/net/qeth_l2_main.c |    1 -
 drivers/s390/net/qeth_l3_main.c |    2 --
 2 files changed, 3 deletions(-)
drivers/s390/net/qeth_l2_main.c +0 -1
@@ -927,7 +927,6 @@ static int __qeth_l2_set_online(struct c
 	QETH_DBF_TEXT(SETUP, 2, "setonlin");
 	QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
 
-	qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
 	recover_flag = card->state;
 	rc = qeth_core_hardsetup_card(card);
 	if (rc) {
drivers/s390/net/qeth_l3_main.c +0 -2
@@ -3338,8 +3338,6 @@ static int __qeth_l3_set_online(struct c
 	QETH_DBF_TEXT(SETUP, 2, "setonlin");
 	QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
 
-	qeth_set_allowed_threads(card, QETH_RECOVER_THREAD, 1);
-
 	recover_flag = card->state;
 	rc = qeth_core_hardsetup_card(card);
 	if (rc) {
#4 lore raw

PATCH 3/3 qeth: default BLKT values for new OSA/3 hardware

In reply to [email protected]

From: Einar Lueck <[email protected]>

Set default BLKT values for new OSA/3 hardware.

---

 drivers/s390/net/qeth_core_main.c |   41 ++++++++++++++++++++++++--------------
 drivers/s390/net/qeth_core_sys.c  |    6 ++---
 2 files changed, 29 insertions(+), 18 deletions(-)
drivers/s390/net/qeth_core_main.c +26 -15
@@ -1362,26 +1362,29 @@ static int qeth_read_conf_data(struct qe
 	return ret;
 }
 
-static int qeth_get_unitaddr(struct qeth_card *card)
+static void qeth_configure_unitaddr(struct qeth_card *card, char *prcd)
 {
-	int length;
-	char *prcd;
-	int rc;
-
-	QETH_DBF_TEXT(SETUP, 2, "getunit");
-	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);
-		return rc;
-	}
+	QETH_DBF_TEXT(SETUP, 2, "cfgunit");
 	card->info.chpid = prcd[30];
 	card->info.unit_addr2 = prcd[31];
 	card->info.cula = prcd[63];
 	card->info.guestlan = ((prcd[0x10] == _ascebc['V']) &&
 			       (prcd[0x11] == _ascebc['M']));
-	kfree(prcd);
-	return 0;
+}
+
+static void qeth_configure_blkt_default(struct qeth_card *card, char *prcd)
+{
+	QETH_DBF_TEXT(SETUP, 2, "cfgblkt");
+
+	if (prcd[74] == 0xF0 && prcd[75] == 0xF0 && prcd[76] == 0xF5) {
+		card->info.blkt.time_total = 250;
+		card->info.blkt.inter_packet = 5;
+		card->info.blkt.inter_packet_jumbo = 15;
+	} else {
+		card->info.blkt.time_total = 0;
+		card->info.blkt.inter_packet = 0;
+		card->info.blkt.inter_packet_jumbo = 0;
+	}
 }
 
 static void qeth_init_tokens(struct qeth_card *card)
@@ -4169,6 +4172,8 @@ void qeth_core_free_discipline(struct qe
 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));
@@ -4177,11 +4182,17 @@ static void qeth_determine_capabilities(
 		goto out;
 	}
 
-	rc = qeth_get_unitaddr(card);
+
+	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)
drivers/s390/net/qeth_core_sys.c +3 -3
@@ -539,7 +539,7 @@ static ssize_t qeth_dev_blkt_total_store
 	struct qeth_card *card = dev_get_drvdata(dev);
 
 	return qeth_dev_blkt_store(card, buf, count,
-				   &card->info.blkt.time_total, 1000);
+				   &card->info.blkt.time_total, 5000);
 }
 
 
@@ -561,7 +561,7 @@ static ssize_t qeth_dev_blkt_inter_store
 	struct qeth_card *card = dev_get_drvdata(dev);
 
 	return qeth_dev_blkt_store(card, buf, count,
-				   &card->info.blkt.inter_packet, 100);
+				   &card->info.blkt.inter_packet, 1000);
 }
 
 static DEVICE_ATTR(inter, 0644, qeth_dev_blkt_inter_show,
@@ -582,7 +582,7 @@ static ssize_t qeth_dev_blkt_inter_jumbo
 	struct qeth_card *card = dev_get_drvdata(dev);
 
 	return qeth_dev_blkt_store(card, buf, count,
-				   &card->info.blkt.inter_packet_jumbo, 100);
+				   &card->info.blkt.inter_packet_jumbo, 1000);
 }
 
 static DEVICE_ATTR(inter_jumbo, 0644, qeth_dev_blkt_inter_jumbo_show,