All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Lord <liml@rtr.ca>
To: Jeff Garzik <jgarzik@pobox.com>, Tejun Heo <htejun@gmail.com>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: IDE/ATA development list <linux-ide@vger.kernel.org>
Subject: Re: [PATCH] libata-core More robust parsing for multi_count(v3)
Date: Wed, 18 Mar 2009 12:24:55 -0400	[thread overview]
Message-ID: <49C12057.7030603@rtr.ca> (raw)
In-Reply-To: <49C11ED4.2030307@rtr.ca>

Mark Lord wrote:
> Make libata more robust when parsing the multi_count
> fields from a drive's identify data.  This prevents us from
> attempting to use dubious multi_count values ad infinitum.
> 
> Reset dev->multi_count to zero and reprobe it each time
> through this routine, as it can change on device reset.
> 
> Also ensure that the reported "maximum" value is valid
> and is a power of two, and that the reported "count" value
> is valid and also a power of two.  And that the "count"
> value is not greater than the "maximum" value.
> 
> Signed-off-by: Mark Lord <mlord@pobox.com>
> 
> --- upstream/drivers/ata/libata-core.c.orig    2009-03-18 
> 11:08:27.000000000 -0400
> +++ new/drivers/ata/libata-core.c    2009-03-18 12:09:31.000000000 -0400
> @@ -2389,6 +2389,7 @@
>     dev->cylinders = 0;
>     dev->heads = 0;
>     dev->sectors = 0;
> +    dev->multi_count = 0;
> 
>     /*
>      * common ATA, ATAPI feature tests
> @@ -2426,8 +2427,16 @@
> 
>         dev->n_sectors = ata_id_n_sectors(id);
> 
> -        if (dev->id[59] & 0x100)
> -            dev->multi_count = dev->id[59] & 0xff;
> +        /* get/validate current R/W Multiple count setting */
> +        if ((dev->id[47] >> 8) == 0x80 && (dev->id[59] & 0x100)) {
> +            unsigned int max = dev->id[47] & 0xff;
> +            unsigned int cnt = dev->id[59] & 0xff;
> +            /* only recognize/allow powers of two here */
> +            if (cnt && cnt <= max && (max & (max - 1)) == 0) {
> +                if ((cnt & (cnt - 1)) == 0)
> +                    dev->multi_count = cnt;
> +            }
> +        }
> 
>         if (ata_id_has_lba(id)) {
>             const char *lba_desc;
..

Note that this patch still allows (dev->multi_count == 1),
as before, though this may or may not be a good idea.

Right now, we should probably just treat "1" the same as "0",
and not use R/W multi commands with that setting.

But at some point, libata will gain HDIO_SET_MULTCOUNT support
and/or a sysfs attr for it.  At which point there's no reason
to force policy on a multi_count of 1.

Opinions?

We can change that behaviour with a second, follow-up, patch if need be.

Cheers

  reply	other threads:[~2009-03-18 16:25 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-18 14:26 [PATCH] libata-core Use more robust parsing for multi_count Mark Lord
2009-03-18 14:32 ` Alan Cox
2009-03-18 15:06   ` Mark Lord
2009-03-18 15:13     ` Mark Lord
2009-03-18 17:09     ` Alan Cox
2009-03-18 15:58 ` Mark Lord
2009-03-18 16:18   ` [PATCH] libata-core More robust parsing for multi_count(v3) Mark Lord
2009-03-18 16:24     ` Mark Lord [this message]
2009-03-19  0:23     ` Tejun Heo
2009-03-19  0:25       ` Tejun Heo
2009-03-19 17:30         ` [PATCH] libata-core More robust parsing for multi_count(v4) Mark Lord
2009-03-19 17:32           ` [PATCH] libata-core More robust parsing for multi_count(v5) Mark Lord
2009-03-19 23:33             ` Tejun Heo
2009-03-20  3:37               ` Mark Lord
2009-03-20 13:13               ` Mark Lord
2009-03-20 13:14                 ` Mark Lord
2009-03-20 14:07                   ` Alan Cox
2009-03-20 15:36                     ` Mark Lord
2009-03-20 23:14                       ` Tejun Heo
2009-03-21  0:54                         ` Jeff Garzik
2009-03-21  2:17                           ` Tejun Heo
2009-03-21 13:54                             ` Mark Lord
2009-03-21 14:02                           ` Alan Cox
2009-03-21 14:59                             ` Mark Lord
2009-03-20 13:38                 ` Alan Cox
2009-04-12 15:10                 ` Mark Lord
2009-04-12 15:18                   ` Alan Cox
2009-04-12 15:31                     ` Jeff Garzik
2009-03-25  2:40             ` Jeff Garzik

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=49C12057.7030603@rtr.ca \
    --to=liml@rtr.ca \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=htejun@gmail.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@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.