Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eec59f76 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

libata: allow LLDs w/o any reset method



Some old SFF controllers don't have any way to reset the channel.
Currently, this isn't supported and libata EH causes an oops.  Allow
LLDs w/o any reset method and just assume ATA class in such cases.

Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 7f5e4e8d
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2150,6 +2150,15 @@ int ata_eh_reset(struct ata_link *link, int classify,
			ap->ops->set_piomode(ap, dev);
	}

	if (!softreset && !hardreset) {
		if (verbose)
			ata_link_printk(link, KERN_INFO, "no reset method "
					"available, skipping reset\n");
		if (!(lflags & ATA_LFLAG_ASSUME_CLASS))
			lflags |= ATA_LFLAG_ASSUME_ATA;
		goto done;
	}

	/* Determine which reset to use and record in ehc->i.action.
	 * prereset() may examine and modify it.
	 */
@@ -2254,6 +2263,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
		lflags |= ATA_LFLAG_ASSUME_ATA;
	}

 done:
	ata_link_for_each_dev(dev, link) {
		/* After the reset, the device state is PIO 0 and the
		 * controller state is undefined.  Reset also wakes up