linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Garzik <jeff@garzik.org>
To: Robert Hancock <hancockr@shaw.ca>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	linux-ide@vger.kernel.org, Andrew Morton <akpm@osdl.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] libata: warn if speed limited due to 40-wire cable (v2)
Date: Fri, 02 Mar 2007 18:33:02 -0500	[thread overview]
Message-ID: <45E8B42E.7010900@garzik.org> (raw)
In-Reply-To: <45DA44B4.6000209@shaw.ca>

Robert Hancock wrote:
> Here's a revised version of my previous patch to warn the user if a
> drive's transfer rate is limited because of a 40-wire cable detection.
> This one hopefully addresses Alan's previous comments - we now do this
> at the very end of the function, and the ugly if condition has been
> cleaned up somewhat. Also, it's been inadvertently tested (it seems that
> pata_amd Nvidia cable detection is broken in current -git..)
> 
> Signed-off-by: Robert Hancock <hancockr@shaw.ca>
> 
> --- linux-2.6.20-git6/drivers/ata/libata-core.c    2007-02-11 
> 17:31:19.000000000 -0600
> +++ linux-2.6.20-git6edit/drivers/ata/libata-core.c    2007-02-13 
> 19:15:58.000000000 -0600
> @@ -3305,19 +3305,7 @@ static void ata_dev_xfermask(struct ata_
>     xfer_mask = ata_pack_xfermask(ap->pio_mask,
>                       ap->mwdma_mask, ap->udma_mask);
> 
> -    /* Apply cable rule here.  Don't apply it early because when
> -     * we handle hot plug the cable type can itself change.
> -     */
> -    if (ap->cbl == ATA_CBL_PATA40)
> -        xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
> -    /* Apply drive side cable rule. Unknown or 80 pin cables reported
> -     * host side are checked drive side as well. Cases where we know a
> -     * 40wire cable is used safely for 80 are not checked here.
> -     */
> -        if (ata_drive_40wire(dev->id) && (ap->cbl == ATA_CBL_PATA_UNK 
> || ap->cbl == ATA_CBL_PATA80))
> -        xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
> -
> -
> +    /* drive modes available */
>     xfer_mask &= ata_pack_xfermask(dev->pio_mask,
>                        dev->mwdma_mask, dev->udma_mask);
>     xfer_mask &= ata_id_xfermask(dev->id);
> @@ -3348,6 +3336,25 @@ static void ata_dev_xfermask(struct ata_
>     if (ap->ops->mode_filter)
>         xfer_mask = ap->ops->mode_filter(ap, dev, xfer_mask);
> 
> +    /* Apply cable rule here.  Don't apply it early because when
> +     * we handle hot plug the cable type can itself change.
> +     * Check this last so that we know if the transfer rate was
> +     * solely limited by the cable.
> +     * Unknown or 80 wire cables reported host side are checked
> +     * drive side as well. Cases where we know a 40wire cable
> +     * is used safely for 80 are not checked here.
> +     */
> +    if (xfer_mask & (0xF8 << ATA_SHIFT_UDMA))
> +        /* UDMA/44 or higher would be available */
> +        if((ap->cbl == ATA_CBL_PATA40) ||
> +               (ata_drive_40wire(dev->id) &&
> +             (ap->cbl == ATA_CBL_PATA_UNK ||
> +                     ap->cbl == ATA_CBL_PATA80))) {
> +                  ata_dev_printk(dev, KERN_WARNING,
> +                 "limited to UDMA/33 due to 40-wire cable\n");
> +            xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
> +        }

it seems broken to manipulate xfer_mask after returning from the 
driver's ->mode_filter hook.

this patch is more than just a speed-limited warning printk, afaics



  parent reply	other threads:[~2007-03-02 23:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-20  0:45 [PATCH] libata: warn if speed limited due to 40-wire cable (v2) Robert Hancock
2007-02-20 13:11 ` Alan
2007-03-02 23:33 ` Jeff Garzik [this message]
2007-03-03  0:54   ` Alan Cox
2007-03-03  0:14     ` Jeff Garzik
2007-03-03 20:28     ` Bill Davidsen
2007-03-04 18:14       ` Stephen Clark
2007-03-04 23:00         ` Bill Davidsen
2007-03-04 23:50           ` Stephen Clark
2007-03-05 15:32             ` Bill Davidsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45E8B42E.7010900@garzik.org \
    --to=jeff@garzik.org \
    --cc=akpm@osdl.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=hancockr@shaw.ca \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).