mbox series

[0/3] Make PATA transfer mode masks always being 32-bit

Message ID 20220508204139.4961-1-s.shtylyov@omp.ru
Headers show
Series Make PATA transfer mode masks always being 32-bit | expand

Message

Sergey Shtylyov May 8, 2022, 8:41 p.m. UTC
The PATA transfer mode masks (direct and packed) in libata are sometimes
declared as *unsigned int* and sometimes as *unsigned long* (which is a
64-bit type on 64-bit architectures), while the packed mask really only
uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
the uniform 32-bit masks saves siginificant amount of the object code...

Sergey Shtylyov (3):
  ata: make packed transfer mode masks *unsigned int*
  ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
  ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*

 drivers/ata/libata-acpi.c      |  8 +++---
 drivers/ata/libata-core.c      | 38 +++++++++++++-------------
 drivers/ata/pata_acpi.c        |  2 +-
 drivers/ata/pata_ali.c         |  2 +-
 drivers/ata/pata_amd.c         | 14 +++++-----
 drivers/ata/pata_hpt366.c      |  2 +-
 drivers/ata/pata_hpt37x.c      |  6 ++---
 drivers/ata/pata_hpt3x2n.c     |  2 +-
 drivers/ata/pata_pdc2027x.c    |  4 +--
 drivers/ata/pata_serverworks.c |  4 +--
 drivers/ata/pata_sis.c         |  2 +-
 drivers/ata/pata_via.c         |  2 +-
 include/linux/libata.h         | 49 +++++++++++++++++-----------------
 13 files changed, 67 insertions(+), 68 deletions(-)

Comments

Sergey Shtylyov May 9, 2022, 5:57 p.m. UTC | #1
On 5/8/22 11:41 PM, Sergey Shtylyov wrote:

> The PATA transfer mode masks (direct and packed) in libata are sometimes
> declared as *unsigned int* and sometimes as *unsigned long* (which is a
> 64-bit type on 64-bit architectures), while the packed mask really only
> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
> the uniform 32-bit masks saves siginificant amount of the object code...

   Forgot to mention the patchset was against the 'for-next' branch of
Damien's 'libata.git' repo.
   In fact, I did even forgot to use a working branch while preparing the
patches to posting -- did that atop of the real local copy of the 'for-next'
branch. :-/

[...]

MBR, Sergey
Damien Le Moal June 8, 2022, 6:44 a.m. UTC | #2
On 5/9/22 05:41, Sergey Shtylyov wrote:
> The PATA transfer mode masks (direct and packed) in libata are sometimes
> declared as *unsigned int* and sometimes as *unsigned long* (which is a
> 64-bit type on 64-bit architectures), while the packed mask really only
> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
> the uniform 32-bit masks saves siginificant amount of the object code...
> 
> Sergey Shtylyov (3):
>   ata: make packed transfer mode masks *unsigned int*
>   ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
>   ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*
> 
>  drivers/ata/libata-acpi.c      |  8 +++---
>  drivers/ata/libata-core.c      | 38 +++++++++++++-------------
>  drivers/ata/pata_acpi.c        |  2 +-
>  drivers/ata/pata_ali.c         |  2 +-
>  drivers/ata/pata_amd.c         | 14 +++++-----
>  drivers/ata/pata_hpt366.c      |  2 +-
>  drivers/ata/pata_hpt37x.c      |  6 ++---
>  drivers/ata/pata_hpt3x2n.c     |  2 +-
>  drivers/ata/pata_pdc2027x.c    |  4 +--
>  drivers/ata/pata_serverworks.c |  4 +--
>  drivers/ata/pata_sis.c         |  2 +-
>  drivers/ata/pata_via.c         |  2 +-
>  include/linux/libata.h         | 49 +++++++++++++++++-----------------
>  13 files changed, 67 insertions(+), 68 deletions(-)
> 

Are you going to resend this as a single patch ?
Sergey Shtylyov June 10, 2022, 9:20 p.m. UTC | #3
On 6/8/22 9:44 AM, Damien Le Moal wrote:

>> The PATA transfer mode masks (direct and packed) in libata are sometimes
>> declared as *unsigned int* and sometimes as *unsigned long* (which is a
>> 64-bit type on 64-bit architectures), while the packed mask really only
>> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
>> the uniform 32-bit masks saves siginificant amount of the object code...
>>
>> Sergey Shtylyov (3):
>>   ata: make packed transfer mode masks *unsigned int*
>>   ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
>>   ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*
>>
>>  drivers/ata/libata-acpi.c      |  8 +++---
>>  drivers/ata/libata-core.c      | 38 +++++++++++++-------------
>>  drivers/ata/pata_acpi.c        |  2 +-
>>  drivers/ata/pata_ali.c         |  2 +-
>>  drivers/ata/pata_amd.c         | 14 +++++-----
>>  drivers/ata/pata_hpt366.c      |  2 +-
>>  drivers/ata/pata_hpt37x.c      |  6 ++---
>>  drivers/ata/pata_hpt3x2n.c     |  2 +-
>>  drivers/ata/pata_pdc2027x.c    |  4 +--
>>  drivers/ata/pata_serverworks.c |  4 +--
>>  drivers/ata/pata_sis.c         |  2 +-
>>  drivers/ata/pata_via.c         |  2 +-
>>  include/linux/libata.h         | 49 +++++++++++++++++-----------------
>>  13 files changed, 67 insertions(+), 68 deletions(-)
>>
> 
> Are you going to resend this as a single patch ?

   No, I'd like to avoid that... Please merge as is.

MBR, Sergey
Damien Le Moal June 12, 2022, 11:24 p.m. UTC | #4
On 6/11/22 06:20, Sergey Shtylyov wrote:
> On 6/8/22 9:44 AM, Damien Le Moal wrote:
> 
>>> The PATA transfer mode masks (direct and packed) in libata are sometimes
>>> declared as *unsigned int* and sometimes as *unsigned long* (which is a
>>> 64-bit type on 64-bit architectures), while the packed mask really only
>>> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
>>> the uniform 32-bit masks saves siginificant amount of the object code...
>>>
>>> Sergey Shtylyov (3):
>>>   ata: make packed transfer mode masks *unsigned int*
>>>   ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
>>>   ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*
>>>
>>>  drivers/ata/libata-acpi.c      |  8 +++---
>>>  drivers/ata/libata-core.c      | 38 +++++++++++++-------------
>>>  drivers/ata/pata_acpi.c        |  2 +-
>>>  drivers/ata/pata_ali.c         |  2 +-
>>>  drivers/ata/pata_amd.c         | 14 +++++-----
>>>  drivers/ata/pata_hpt366.c      |  2 +-
>>>  drivers/ata/pata_hpt37x.c      |  6 ++---
>>>  drivers/ata/pata_hpt3x2n.c     |  2 +-
>>>  drivers/ata/pata_pdc2027x.c    |  4 +--
>>>  drivers/ata/pata_serverworks.c |  4 +--
>>>  drivers/ata/pata_sis.c         |  2 +-
>>>  drivers/ata/pata_via.c         |  2 +-
>>>  include/linux/libata.h         | 49 +++++++++++++++++-----------------
>>>  13 files changed, 67 insertions(+), 68 deletions(-)
>>>
>>
>> Are you going to resend this as a single patch ?
> 
>    No, I'd like to avoid that... Please merge as is.

Nope. I still have concerns about this patch structure. And reviewing
again, I think some changes are still missing.
E.g., patch 3 changes struct ata_port_info masks to unsigned int. This is
used in ata_host_alloc_pinfo() to set the port masks, but I do not see
where these are changed to unsigned int too. Which patch does that ? These
should be in the same patch.

I am OK with one patch for the packed mask, and one patch for the
{pio|mwdma|udma}_mask fields. Patch 3 is weird and should at least be
squashed into patch 2.

But given that patch 1 and 2 both touch the same functions, one patch
would be better.

> 
> MBR, Sergey
Sergey Shtylyov June 13, 2022, 7:20 p.m. UTC | #5
Hello!

On 6/13/22 2:24 AM, Damien Le Moal wrote:

>>>> The PATA transfer mode masks (direct and packed) in libata are sometimes
>>>> declared as *unsigned int* and sometimes as *unsigned long* (which is a
>>>> 64-bit type on 64-bit architectures), while the packed mask really only
>>>> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
>>>> the uniform 32-bit masks saves siginificant amount of the object code...
>>>>
>>>> Sergey Shtylyov (3):
>>>>   ata: make packed transfer mode masks *unsigned int*
>>>>   ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
>>>>   ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*
>>>>
>>>>  drivers/ata/libata-acpi.c      |  8 +++---
>>>>  drivers/ata/libata-core.c      | 38 +++++++++++++-------------
>>>>  drivers/ata/pata_acpi.c        |  2 +-
>>>>  drivers/ata/pata_ali.c         |  2 +-
>>>>  drivers/ata/pata_amd.c         | 14 +++++-----
>>>>  drivers/ata/pata_hpt366.c      |  2 +-
>>>>  drivers/ata/pata_hpt37x.c      |  6 ++---
>>>>  drivers/ata/pata_hpt3x2n.c     |  2 +-
>>>>  drivers/ata/pata_pdc2027x.c    |  4 +--
>>>>  drivers/ata/pata_serverworks.c |  4 +--
>>>>  drivers/ata/pata_sis.c         |  2 +-
>>>>  drivers/ata/pata_via.c         |  2 +-
>>>>  include/linux/libata.h         | 49 +++++++++++++++++-----------------
>>>>  13 files changed, 67 insertions(+), 68 deletions(-)
>>>>
>>>
>>> Are you going to resend this as a single patch ?
>>
>>    No, I'd like to avoid that... Please merge as is.
> 
> Nope. I still have concerns about this patch structure. And reviewing
> again, I think some changes are still missing.
> E.g., patch 3 changes struct ata_port_info masks to unsigned int. This is
> used in ata_host_alloc_pinfo() to set the port masks, but I do not see
> where these are changed to unsigned int too. Which patch does that ? These
> should be in the same patch.

   Sigh... they always were *unsigned int*! And I explicitly wrote about that
in the commit msg of that patch... :-/

> I am OK with one patch for the packed mask, and one patch for the
> {pio|mwdma|udma}_mask fields. Patch 3 is weird and should at least be
> squashed into patch 2.

   Why? What does *struct* ata_device have to do with *struct* ata_port_info?

> 
> But given that patch 1 and 2 both touch the same functions, one patch
> would be better.

   I specifically aimed at minimizing the patches....

MBR, Sergey
Damien Le Moal June 14, 2022, 5:43 a.m. UTC | #6
On 6/14/22 04:20, Sergey Shtylyov wrote:
> Hello!
> 
> On 6/13/22 2:24 AM, Damien Le Moal wrote:
> 
>>>>> The PATA transfer mode masks (direct and packed) in libata are sometimes
>>>>> declared as *unsigned int* and sometimes as *unsigned long* (which is a
>>>>> 64-bit type on 64-bit architectures), while the packed mask really only
>>>>> uses 20 bits and the PIO/MWDMA/UDMA masks use up to 8 bits. Switching to
>>>>> the uniform 32-bit masks saves siginificant amount of the object code...
>>>>>
>>>>> Sergey Shtylyov (3):
>>>>>   ata: make packed transfer mode masks *unsigned int*
>>>>>   ata: make ata_device::{pio|mwdma|udma}_mask *unsigned int*
>>>>>   ata: make ata_port_info::{pio|mwdma|udma}_mask *unsigned int*
>>>>>
>>>>>  drivers/ata/libata-acpi.c      |  8 +++---
>>>>>  drivers/ata/libata-core.c      | 38 +++++++++++++-------------
>>>>>  drivers/ata/pata_acpi.c        |  2 +-
>>>>>  drivers/ata/pata_ali.c         |  2 +-
>>>>>  drivers/ata/pata_amd.c         | 14 +++++-----
>>>>>  drivers/ata/pata_hpt366.c      |  2 +-
>>>>>  drivers/ata/pata_hpt37x.c      |  6 ++---
>>>>>  drivers/ata/pata_hpt3x2n.c     |  2 +-
>>>>>  drivers/ata/pata_pdc2027x.c    |  4 +--
>>>>>  drivers/ata/pata_serverworks.c |  4 +--
>>>>>  drivers/ata/pata_sis.c         |  2 +-
>>>>>  drivers/ata/pata_via.c         |  2 +-
>>>>>  include/linux/libata.h         | 49 +++++++++++++++++-----------------
>>>>>  13 files changed, 67 insertions(+), 68 deletions(-)
>>>>>
>>>>
>>>> Are you going to resend this as a single patch ?
>>>
>>>    No, I'd like to avoid that... Please merge as is.
>>
>> Nope. I still have concerns about this patch structure. And reviewing
>> again, I think some changes are still missing.
>> E.g., patch 3 changes struct ata_port_info masks to unsigned int. This is
>> used in ata_host_alloc_pinfo() to set the port masks, but I do not see
>> where these are changed to unsigned int too. Which patch does that ? These
>> should be in the same patch.
> 
>    Sigh... they always were *unsigned int*! And I explicitly wrote about that
> in the commit msg of that patch... :-/

Nobody is perfect. I miss/forget stuff from time to time. All you need to
do is to remind me. So no need for the "sigh".

> 
>> I am OK with one patch for the packed mask, and one patch for the
>> {pio|mwdma|udma}_mask fields. Patch 3 is weird and should at least be
>> squashed into patch 2.
> 
>    Why? What does *struct* ata_device have to do with *struct* ata_port_info?
> 
>>
>> But given that patch 1 and 2 both touch the same functions, one patch
>> would be better.
> 
>    I specifically aimed at minimizing the patches....

I do not care about the number of patches it takes to fix/improve
something. I care about what the patches do. And for this case, I prefer
seeing a single patch cleaning up the mess of unsigned long/unsigned int
for all these transfer speed masks so that everything becomes unsigned int
in one go. With multiple patches we still have a messy situation of mixed
unsigned long/unsigned int between patches.

> 
> MBR, Sergey