All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.