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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4C2577F2.4030005@garzik.org>
Date:	Fri, 25 Jun 2010 23:45:54 -0400
From:	Jeff Garzik <jeff@...zik.org>
To:	Tejun Heo <tj@...nel.org>
CC:	mingo@...e.hu, tglx@...utronix.de, bphilips@...e.de,
	yinghai@...nel.org, akpm@...ux-foundation.org,
	torvalds@...ux-foundation.org, linux-kernel@...r.kernel.org,
	linux-ide@...r.kernel.org, stern@...land.harvard.edu,
	gregkh@...e.de, khali@...ux-fr.org
Subject: Re: [PATCH 11/12] libata: use IRQ expecting

On 06/25/2010 03:44 AM, Tejun Heo wrote:
> I still think calling unexpect_irq() from ata_qc_complete() is correct
> as ata_qc_complete() is always a good indicator of completion events.

No, it's not.  ata_qc_complete() is an indicator that _one_ completion 
event occurred, not _all_ completion events for that port.

Converting drivers to use ata_qc_complete_multiple() completely misses 
the point:  ata_qc_complete_multiple() is doing exactly the same thing 
as those drivers:  calling ata_qc_complete() in a loop.

ata_qc_complete() is -- as its name implies -- completing a single qc. 
Your patch introduces an unconditional controller-wide unexpect_irq() 
call.  It's a layering violation.

You can trivially trace through ata_qc_complete_multiple() after patch 
#11 is applied, and see the result...  for $N completion bits passed to 
ata_qc_complete_multiple(), you call
	unexpect_irq()
	expect_irq()
in rapid succession $N times, once for each ata_qc_complete() call in 
the loop of ata_qc_complete_multiple().  For something that is not 
needed for modern SATA controllers.

The preferred solution would be something that only touches legacy 
controllers, namely:

*) create ata_port_complete(), with the implementation

	ata_qc_complete()
	unexpect_irq()

*) then call ata_port_complete() in the legacy code that needs 
unexpect_irq()

We don't want to  burden modern SATA drivers with the overhead of 
dealing with silly PATA/SATA1 legacy irq nastiness, particularly the 
ugliness of calling

	unexpect_irq() + expect_irq()

for a number of NCQ commands, in a tight loop!

	Jeff





--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ