From: Lee Trager <Lee@PicturesInMotion.net>
To: Lee Trager <Lee@PicturesInMotion.net>
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>,
linux-ide@vger.kernel.org, Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume
Date: Mon, 21 Aug 2006 19:15:10 -0400 [thread overview]
Message-ID: <44EA3E7E.5030706@PicturesInMotion.net> (raw)
In-Reply-To: <44EA232C.30907@PicturesInMotion.net>
Lee Trager wrote:
> Sergei Shtylyov wrote:
>
>> Hello.
>>
>> Lee Trager wrote:
>>
>>
>>> This patch fixes a problem that when a computer with HPA on it's hard
>>> drive comes out of sleep mode it needs the disks capacity reinitialized.
>>>
>>> This is my first patch to the Linux kernel so if I did anything wrong
>>> please be gentle ;)
>>>
>> Your mailer spoils tabs, so either attach your patch or use the
>> different
>> mailer.
>>
>> [...]
>>
>>
>>> diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c
>>> linux-2.6.18-rc4/drivers/ide/ide.c
>>> --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19
>>> 03:49:03.000000000 -0400
>>> +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000
>>> -0400
>>> @@ -1232,6 +1232,7 @@
>>> struct request rq;
>>> struct request_pm_state rqpm;
>>> ide_task_t args;
>>> + int ide_cmd;
>>>
>>> memset(&rq, 0, sizeof(rq));
>>> memset(&rqpm, 0, sizeof(rqpm));
>>> @@ -1242,7 +1243,15 @@
>>> rqpm.pm_step = ide_pm_state_start_resume;
>>> rqpm.pm_state = PM_EVENT_ON;
>>>
>>> - return ide_do_drive_cmd(drive, &rq, ide_head_wait);
>>> + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait);
>>> +
>>> + /* check to see if this is a hard drive
>>> + * if it is then checkhpa needs to be
>>> + * disabled */
>>> + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id))
>>> + init_idedisk_capacity(drive);
>>> +
>>> + return ide_cmd;
>>> }
>>>
>> Hm, shouldn't this be handled as a separate resume process step?
>>
>> MBR, Sergei
>>
>> -
>> To unsubscribe from this list: send the line "unsubscribe linux-ide" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>>
> Ok I attached it now.
>
> ------------------------------------------------------------------------
>
> diff -Naur linux-2.6.18-rc4-old/include/linux/ide.h linux-2.6.18-rc4/include/linux/ide.h
> --- linux-2.6.18-rc4-old/include/linux/ide.h 2006-08-19 03:49:03.000000000 -0400
> +++ linux-2.6.18-rc4/include/linux/ide.h 2006-08-20 19:13:10.000000000 -0400
> @@ -1201,6 +1201,17 @@
> void ide_register_subdriver(ide_drive_t *, ide_driver_t *);
> void ide_unregister_subdriver(ide_drive_t *, ide_driver_t *);
>
> +/* Bits 10 of command_set_1 and cfs_enable_1 must be equal,
> + * so on non-buggy drives we need test only one.
> + * However, we should also check whether these fields are valid.
> +*/
> +static inline int idedisk_supports_hpa(const struct hd_driveid *id)
> +{
> + return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
> +}
> +
> +extern void init_idedisk_capacity (ide_drive_t *drive);
> +
> #define ON_BOARD 1
> #define NEVER_BOARD 0
>
> diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide-disk.c linux-2.6.18-rc4/drivers/ide/ide-disk.c
> --- linux-2.6.18-rc4-old/drivers/ide/ide-disk.c 2006-08-19 03:49:03.000000000 -0400
> +++ linux-2.6.18-rc4/drivers/ide/ide-disk.c 2006-08-20 19:13:56.000000000 -0400
> @@ -464,16 +464,6 @@
> }
>
> /*
> - * Bits 10 of command_set_1 and cfs_enable_1 must be equal,
> - * so on non-buggy drives we need test only one.
> - * However, we should also check whether these fields are valid.
> - */
> -static inline int idedisk_supports_hpa(const struct hd_driveid *id)
> -{
> - return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
> -}
> -
> -/*
> * The same here.
> */
> static inline int idedisk_supports_lba48(const struct hd_driveid *id)
> @@ -528,7 +518,7 @@
> * in above order (i.e., if value of higher priority is available,
> * reset will be ignored).
> */
> -static void init_idedisk_capacity (ide_drive_t *drive)
> +void init_idedisk_capacity (ide_drive_t *drive)
> {
> struct hd_driveid *id = drive->id;
> /*
> @@ -555,6 +545,8 @@
> }
> }
>
> +EXPORT_SYMBOL(init_idedisk_capacity);
> +
> static sector_t idedisk_capacity (ide_drive_t *drive)
> {
> return drive->capacity64 - drive->sect0;
> diff -Naur linux-2.6.18-rc4-old/drivers/ide/ide.c linux-2.6.18-rc4/drivers/ide/ide.c
> --- linux-2.6.18-rc4-old/drivers/ide/ide.c 2006-08-19 03:49:03.000000000 -0400
> +++ linux-2.6.18-rc4/drivers/ide/ide.c 2006-08-20 19:12:38.000000000 -0400
> @@ -1232,6 +1232,7 @@
> struct request rq;
> struct request_pm_state rqpm;
> ide_task_t args;
> + int ide_cmd;
>
> memset(&rq, 0, sizeof(rq));
> memset(&rqpm, 0, sizeof(rqpm));
> @@ -1242,7 +1243,15 @@
> rqpm.pm_step = ide_pm_state_start_resume;
> rqpm.pm_state = PM_EVENT_ON;
>
> - return ide_do_drive_cmd(drive, &rq, ide_head_wait);
> + ide_cmd = ide_do_drive_cmd(drive, &rq, ide_head_wait);
> +
> + /* check to see if this is a hard drive
> + * if it is then checkhpa needs to be
> + * disabled */
> + if(drive->media == ide_disk && idedisk_supports_hpa(drive->id))
> + init_idedisk_capacity(drive);
> +
> + return ide_cmd;
> }
>
> int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
>
I put it there because honestly I wasn't sure where else to put it.
Anyway it is in the generic_ide_resume() and its something that needs to
be done on an ide disk with HPA on resume.
prev parent reply other threads:[~2006-08-21 23:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-21 0:51 [PATCH] ide: Reinitilize idedisk_capacity for HPA drives on resume Lee Trager
2006-08-21 16:33 ` Sergei Shtylyov
2006-08-21 21:18 ` Lee Trager
2006-08-21 23:15 ` Lee Trager [this message]
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=44EA3E7E.5030706@PicturesInMotion.net \
--to=lee@picturesinmotion.net \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-ide@vger.kernel.org \
--cc=sshtylyov@ru.mvista.com \
/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.