Skip to contentSkip to conversation

Latest patches for s390

PATCH New Martin Schwidefsky 1 participant 5 messages Nov 27, 2007

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

cover Latest patches for s390

The following patches have been added to the 2.6.24 queue:

Christian Borntraeger (2):
[S390] dcssblk: prevent early access without own make_request function [S390] Fix compile error on 31bit without preemption

Cornelia Huck (1):
[S390] cio: Issue SenseID per path.

Peter Oberparleiter (1):
[S390] cio: add missing reprobe loop end statement

Signature · 4 lines
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.
#1 lore raw

PATCH 1/4 cio: Issue SenseID per path.

From: Cornelia Huck <[email protected]>

We may receive a unit check for every path when we issue a SenseID. Unfortunately, the channel subsystem will try on a different path every time if we use a lpm of 0xff, which will exhaust our retry counter.

Therefore, revert SenseID to its previous per-path behaviour and just leave out the suspend multipath reconnect.

---

 drivers/s390/cio/device_id.c |   37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)
drivers/s390/cio/device_id.c +28 -9
Index: quilt-2.6/drivers/s390/cio/device_id.c
===================================================================
@@ -113,6 +113,7 @@ __ccw_device_sense_id_start(struct ccw_d
 {
 	struct subchannel *sch;
 	struct ccw1 *ccw;
+	int ret;
 
 	sch = to_subchannel(cdev->dev.parent);
 	/* Setup sense channel program. */
@@ -124,9 +125,25 @@ __ccw_device_sense_id_start(struct ccw_d
 
 	/* Reset device status. */
 	memset(&cdev->private->irb, 0, sizeof(struct irb));
-	cdev->private->flags.intretry = 0;
 
-	return cio_start(sch, ccw, LPM_ANYPATH);
+	/* Try on every path. */
+	ret = -ENODEV;
+	while (cdev->private->imask != 0) {
+		if ((sch->opm & cdev->private->imask) != 0 &&
+		    cdev->private->iretry > 0) {
+			cdev->private->iretry--;
+			/* Reset internal retry indication. */
+			cdev->private->flags.intretry = 0;
+			ret = cio_start (sch, cdev->private->iccws,
+					 cdev->private->imask);
+			/* ret is 0, -EBUSY, -EACCES or -ENODEV */
+			if (ret != -EACCES)
+				return ret;
+		}
+		cdev->private->imask >>= 1;
+		cdev->private->iretry = 5;
+	}
+	return ret;
 }
 
 void
@@ -136,7 +153,8 @@ ccw_device_sense_id_start(struct ccw_dev
 
 	memset (&cdev->private->senseid, 0, sizeof (struct senseid));
 	cdev->private->senseid.cu_type = 0xFFFF;
-	cdev->private->iretry = 3;
+	cdev->private->imask = 0x80;
+	cdev->private->iretry = 5;
 	ret = __ccw_device_sense_id_start(cdev);
 	if (ret && ret != -EBUSY)
 		ccw_device_sense_id_done(cdev, ret);
@@ -252,13 +270,14 @@ ccw_device_sense_id_irq(struct ccw_devic
 		ccw_device_sense_id_done(cdev, ret);
 		break;
 	case -EACCES:		/* channel is not operational. */
+		sch->lpm &= ~cdev->private->imask;
+		cdev->private->imask >>= 1;
+		cdev->private->iretry = 5;
+		/* fall through. */
 	case -EAGAIN:		/* try again. */
-		cdev->private->iretry--;
-		if (cdev->private->iretry > 0) {
-			ret = __ccw_device_sense_id_start(cdev);
-			if (ret == 0 || ret == -EBUSY)
-				break;
-		}
+		ret = __ccw_device_sense_id_start(cdev);
+		if (ret == 0 || ret == -EBUSY)
+			break;
 		/* fall through. */
 	default:		/* Sense ID failed. Try asking VM. */
 		if (MACHINE_IS_VM) {
Signature · 4 lines
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.
#2 lore raw

PATCH 2/4 cio: add missing reprobe loop end statement

In reply to Martin Schwidefsky

From: Peter Oberparleiter <[email protected]>

Add loop end statement to prevent looping over empty subchannel sets.

---

 drivers/s390/cio/css.c |    1 +
 1 file changed, 1 insertion(+)
drivers/s390/cio/css.c +1 -0
Index: quilt-2.6/drivers/s390/cio/css.c
===================================================================
@@ -451,6 +451,7 @@ static int reprobe_subchannel(struct sub
 		break;
 	case -ENXIO:
 	case -ENOMEM:
+	case -EIO:
 		/* These should abort looping */
 		break;
 	default:
Signature · 4 lines
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.
#3 lore raw

PATCH 3/4 dcssblk: prevent early access without own make_request function

In reply to Martin Schwidefsky

From: Christian Borntraeger <[email protected]>

When loading a dcss segment with the dcssblk driver, sometimes the following kind of message appears:

bio too big device dcssblk0 (8 > 0)
Buffer I/O error on device dcssblk0, logical block 172016 ..

The fix is to move the disk registration after setting the make_request function, to avoid calls into generic_make_request for dcssblock without having the make_request function set up properly.

---

 drivers/s390/block/dcssblk.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/block/dcssblk.c +2 -2
Index: quilt-2.6/drivers/s390/block/dcssblk.c
===================================================================
@@ -472,11 +472,11 @@ dcssblk_add_store(struct device *dev, st
 	if (rc)
 		goto unregister_dev;
 
-	add_disk(dev_info->gd);
-
 	blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
 	blk_queue_hardsect_size(dev_info->dcssblk_queue, 4096);
 
+	add_disk(dev_info->gd);
+
 	switch (dev_info->segment_type) {
 		case SEG_TYPE_SR:
 		case SEG_TYPE_ER:
Signature · 4 lines
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.
#4 lore raw

PATCH 4/4 Fix compile error on 31bit without preemption

In reply to Martin Schwidefsky

From: Christian Borntraeger <[email protected]>

Commit b8e7a54cd06b0b0174029ef3a7f5a1415a2c28f2 introduced a compile error if CONFIG_PREEMPT is not set:

arch/s390/kernel/built-in.o: In function `cleanup_io_leave_insn':
/space/kvm/arch/s390/kernel/entry.S:(.text+0xbfce): undefined reference to `preempt_schedule_irq'

This patch hides preempt_schedule_irq if CONFIG_PREEMPT is not set.

---

 arch/s390/kernel/entry.S |    2 ++
 1 file changed, 2 insertions(+)
arch/s390/kernel/entry.S +2 -0
Index: quilt-2.6/arch/s390/kernel/entry.S
===================================================================
@@ -1079,8 +1079,10 @@ cleanup_io_leave_insn:
 .Lexecve_tail:	.long	execve_tail
 .Ljump_table:	.long	pgm_check_table
 .Lschedule:	.long	schedule
+#ifdef CONFIG_PREEMPT
 .Lpreempt_schedule_irq:
 		.long	preempt_schedule_irq
+#endif
 .Ltrace:	.long	syscall_trace
 .Lschedtail:	.long	schedule_tail
 .Lsysc_table:	.long	sys_call_table
Signature · 4 lines
blue skies,
   Martin.

"Reality continues to ruin my life." - Calvin.