Tejun Heo wrote:
> Albert Lee wrote:
>
>>-static void ata_pio_sector(struct ata_queued_cmd *qc, int last)
>>+static void ata_pio_sector(struct ata_queued_cmd *qc, int last, int lock)
>
>
> I think the naming of @lock is a bit confusing here. @clr_hsm_wq or
> @last_sector, maybe?
>
How about "irq_handover"? When set to "true", it means the workqueue is going to
handover the control of the port to the irq handler.
>
>>+ if (lock) {
>>+ tail = 8;
>>+ head = ATA_SECT_SIZE - tail; /* multiple of 8 bytes */
>>+ ap->ops->data_xfer(qc->dev, buf + offset, head,
>>do_write);
>>+ spin_lock_irqsave(ap->lock, irq_flags);
>>+ }
>>+
>>+ ap->ops->data_xfer(qc->dev, buf + offset + head, tail,
>>do_write);
>
>
> Aieee, we have to transfer the whole last sector while holding the spin
> lock and IRQ disabled. That's sad but pushing locking into ->data_xfer
> doesn't sound attractive either. Any better ideas?
>
>
Why need to transfer the last sector as a whole?
Spliting it into 504 (unlocked) + 8 (holding ap->lock) works on my machine...
--
albert
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html