lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 04 Jul 2008 13:32:17 +0800 From: Zhang Rui <rui.zhang@...el.com> To: Tejun Heo <tj@...nel.org> Cc: linux-pm <linux-pm@...ts.linux-foundation.org>, linux-kernel <linux-kernel@...r.kernel.org>, "Rafael J. Wysocki" <rjw@...k.pl> Subject: Re: [RFC PATCH] AHCI: speed up resume On Fri, 2008-07-04 at 10:48 +0800, Tejun Heo wrote: > Hello, Zhang. > > Zhang Rui wrote: > > During S3 resume, AHCI driver sleeps 1 second to wait for the HBA > reset > > to finish. This is luxurious, :) > > > > According to the AHCI 1.2 spec, We should poll the HOST_CTL > register, > > and return error if the host reset is not finished within 1 second. > > > > Test results show that the HBA reset can be done quickly(in usecs). > > And this patch may save nearly 1 second during resume. > > > > Signed-off-by: Zhang Rui <rui.zhang@...el.com> > > -- > > drivers/ata/ahci.c | 17 ++++++++++++++--- > > 1 file changed, 14 insertions(+), 3 deletions(-) > > > > Index: linux-2.6/drivers/ata/ahci.c > > =================================================================== > > --- linux-2.6.orig/drivers/ata/ahci.c 2007-05-03 11:06:33.000000000 > +0800 > > +++ linux-2.6/drivers/ata/ahci.c 2008-07-02 16:25:54.000000000 > +0800 > > @@ -1073,18 +1073,29 @@ > > > > /* global controller reset */ > > if (!ahci_skip_host_reset) { > > + int delay = msecs_to_jiffies(1000); > > + int timeout; > > + > > tmp = readl(mmio + HOST_CTL); > > if ((tmp & HOST_RESET) == 0) { > > writel(tmp | HOST_RESET, mmio + HOST_CTL); > > readl(mmio + HOST_CTL); /* flush */ > > } > > > > - /* reset must complete within 1 second, or > > + /* > > + * to perform host reset, OS should set HOST_RESET > > + * and poll until this bit is read to be "0" > > + * reset must complete within 1 second, or > > * the hardware should be considered fried. > > */ > > - ssleep(1); > > + timeout = jiffies + delay; > > + while (jiffies < timeout) { > > + tmp = readl(mmio + HOST_CTL); > > + if (!(tmp & HOST_RESET)) > > + break; > > + cpu_relax(); > > + } > > Looks good in principle. Just two things... > > 1. Please don't busy-loop. e.g. No one would notice 10ms delay > between > polls. > > 2. Please use ata_wait_register(). > Thanks for review, refreshed patch attached. :) From: Zhang Rui <rui.zhang@...el.com> During resume, sleep 1 second to wait for the HBA reset to finish is a waste of time. According to the AHCI 1.2 spec, We should poll the HOST_CTL register, and return error if the host reset is not finished within 1 second. Test results show that the HBA reset can be done quickly(in usecs). And this patch may save nearly 1 second during resume. Signed-off-by: Zhang Rui <rui.zhang@...el.com> -- drivers/ata/ahci.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) Index: linux-2.6/drivers/ata/ahci.c =================================================================== --- linux-2.6.orig/drivers/ata/ahci.c 2008-07-04 09:49:05.000000000 +0800 +++ linux-2.6/drivers/ata/ahci.c 2008-07-04 11:31:30.000000000 +0800 @@ -1079,12 +1079,15 @@ readl(mmio + HOST_CTL); /* flush */ } - /* reset must complete within 1 second, or + /* + * to perform host reset, OS should set HOST_RESET + * and poll until this bit is read to be "0". + * reset must complete within 1 second, or * the hardware should be considered fried. */ - ssleep(1); + tmp = ata_wait_register(mmio + HOST_CTL, HOST_RESET, + HOST_RESET, 10, 1000); - tmp = readl(mmio + HOST_CTL); if (tmp & HOST_RESET) { dev_printk(KERN_ERR, host->dev, "controller reset failed (0x%x)\n", tmp); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists