All of lore.kernel.org
 help / color / mirror / Atom feed
From: Charlie Jenkins <charlie@rivosinc.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>,
	Guenter Roeck <linux@roeck-us.net>,
	David Laight <David.Laight@aculab.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Helge Deller <deller@gmx.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Parisc List <linux-parisc@vger.kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Palmer Dabbelt <palmer@rivosinc.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v10] lib: checksum: Use aligned accesses for ip_fast_csum and csum_ipv6_magic tests
Date: Tue, 27 Feb 2024 09:54:49 -0800	[thread overview]
Message-ID: <Zd4h6ZhvLSWfWJG/@ghost> (raw)
In-Reply-To: <c8ddcc98-acb0-4d2d-828a-8dd12e771b5f@csgroup.eu>

On Tue, Feb 27, 2024 at 11:32:19AM +0000, Christophe Leroy wrote:
> 
> 
> Le 27/02/2024 à 11:28, Russell King (Oracle) a écrit :
> > On Tue, Feb 27, 2024 at 06:47:38AM +0000, Christophe Leroy wrote:
> >>
> >>
> >> Le 27/02/2024 à 00:48, Guenter Roeck a écrit :
> >>> On 2/26/24 15:17, Charlie Jenkins wrote:
> >>>> On Mon, Feb 26, 2024 at 10:33:56PM +0000, David Laight wrote:
> >>>>> ...
> >>>>>> I think you misunderstand. "NET_IP_ALIGN offset is what the kernel
> >>>>>> defines to be supported" is a gross misinterpretation. It is not
> >>>>>> "defined to be supported" at all. It is the _preferred_ alignment
> >>>>>> nothing more, nothing less.
> >>>>
> >>>> This distinction is arbitrary in practice, but I am open to being proven
> >>>> wrong if you have data to back up this statement. If the driver chooses
> >>>> to not follow this, then the driver might not work. ARM defines the
> >>>> NET_IP_ALIGN to be 2 to pad out the header to be on the supported
> >>>> alignment. If the driver chooses to pad with one byte instead of 2
> >>>> bytes, the driver may fail to work as the CPU may stall after the
> >>>> misaligned access.
> >>>>
> >>>>>
> >>>>> I'm sure I've seen code that would realign IP headers to a 4 byte
> >>>>> boundary before processing them - but that might not have been in
> >>>>> Linux.
> >>>>>
> >>>>> I'm also sure there are cpu which will fault double length misaligned
> >>>>> memory transfers - which might be used to marginally speed up code.
> >>>>> Assuming more than 4 byte alignment for the IP header is likely
> >>>>> 'wishful thinking'.
> >>>>>
> >>>>> There is plenty of ethernet hardware that can only write frames
> >>>>> to even boundaries and plenty of cpu that fault misaligned accesses.
> >>>>> There are even cases of both on the same silicon die.
> >>>>>
> >>>>> You also pretty much never want a fault handler to fixup misaligned
> >>>>> ethernet frames (or really anything else for that matter).
> >>>>> It is always going to be better to check in the code itself.
> >>>>>
> >>>>> x86 has just made people 'sloppy' :-)
> >>>>>
> >>>>>      David
> >>>>>
> >>>>> -
> >>>>> Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes,
> >>>>> MK1 1PT, UK
> >>>>> Registration No: 1397386 (Wales)
> >>>>>
> >>>>
> >>>> If somebody has a solution they deem to be better, I am happy to change
> >>>> this test case. Otherwise, I would appreciate a maintainer resolving
> >>>> this discussion and apply this fix.
> >>>>
> >>> Agreed.
> >>>
> >>> I do have a couple of patches which add explicit unaligned tests as well as
> >>> corner case tests (which are intended to trigger as many carry overflows
> >>> as possible). Once I get those working reliably, I'll be happy to submit
> >>> them as additional tests.
> >>>
> >>
> >> The functions definitely have to work at least with and without VLAN,
> >> which means the alignment cannot be greater than 4 bytes. That's also
> >> the outcome of the discussion.
> > 
> > Thanks for completely ignoring what I've said. No. The alignment ends up
> > being commonly 2 bytes.
> > 
> > As I've said several times, network drivers do _not_ have to respect
> > NET_IP_ALIGN. There are 32-bit ARM drivers which have a DMA engine in
> > them which can only DMA to a 32-bit aligned address. This means that
> > the start of the ethernet header is placed at a 32-bit aligned address
> > making the IP header misaligned to 32-bit.
> > 
> > I don't see what is so difficult to understand about this... but it
> > seems that my comments on this are being ignored time and time again,
> > and I can only think that those who are ignoring my comments have
> > some alterior motive here.
> > 
> 
> I'm sorry for this misunderstanding. I'm not ignoring what you said at 
> all. I understood that ARM is able to handle unaligned accesses with 
> some exception handlers at worst case and that DMA constraints may lead 
> to the IP header beeing on a 2 bytes alignment only.
> 
> However I also understood from others that some architectures can't 
> handle such a 2 bytes only alignments.
> 
> It's been suggested during the discussion that alignment tests should be 
> added later in a follow-up patch. So for the time being I'm trying to 
> find a compromise and get the existing tests working on all platforms 
> but with a smaller alignment than the 16-bytes alignment brought by 
> Charlie's v10 patch. And a 4 bytes alignment seemed to me to be a good 
> compromise for this fix. The idea is also to make the fix as minimal as 
> possible, unlike Charlie's patch that is churning up the tests quite 
> heavily.

Do you have a list of platforms this is failing on? I haven't seen any
reports that haven't been fixed.

- Charlie

> 
> But maybe I misunderstood some of the discussion and indeed 2 bytes 
> alignment would work on all platforms and only an odd alignment is 
> problematic ?

WARNING: multiple messages have this Message-ID (diff)
From: Charlie Jenkins <charlie@rivosinc.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: "Russell King (Oracle)" <linux@armlinux.org.uk>,
	Guenter Roeck <linux@roeck-us.net>,
	David Laight <David.Laight@aculab.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Helge Deller <deller@gmx.de>,
	"James E.J. Bottomley" <James.Bottomley@hansenpartnership.com>,
	Parisc List <linux-parisc@vger.kernel.org>,
	Arnd Bergmann <arnd@arndb.de>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Palmer Dabbelt <palmer@rivosinc.com>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v10] lib: checksum: Use aligned accesses for ip_fast_csum and csum_ipv6_magic tests
Date: Tue, 27 Feb 2024 09:54:49 -0800	[thread overview]
Message-ID: <Zd4h6ZhvLSWfWJG/@ghost> (raw)
In-Reply-To: <c8ddcc98-acb0-4d2d-828a-8dd12e771b5f@csgroup.eu>

On Tue, Feb 27, 2024 at 11:32:19AM +0000, Christophe Leroy wrote:
> 
> 
> Le 27/02/2024 à 11:28, Russell King (Oracle) a écrit :
> > On Tue, Feb 27, 2024 at 06:47:38AM +0000, Christophe Leroy wrote:
> >>
> >>
> >> Le 27/02/2024 à 00:48, Guenter Roeck a écrit :
> >>> On 2/26/24 15:17, Charlie Jenkins wrote:
> >>>> On Mon, Feb 26, 2024 at 10:33:56PM +0000, David Laight wrote:
> >>>>> ...
> >>>>>> I think you misunderstand. "NET_IP_ALIGN offset is what the kernel
> >>>>>> defines to be supported" is a gross misinterpretation. It is not
> >>>>>> "defined to be supported" at all. It is the _preferred_ alignment
> >>>>>> nothing more, nothing less.
> >>>>
> >>>> This distinction is arbitrary in practice, but I am open to being proven
> >>>> wrong if you have data to back up this statement. If the driver chooses
> >>>> to not follow this, then the driver might not work. ARM defines the
> >>>> NET_IP_ALIGN to be 2 to pad out the header to be on the supported
> >>>> alignment. If the driver chooses to pad with one byte instead of 2
> >>>> bytes, the driver may fail to work as the CPU may stall after the
> >>>> misaligned access.
> >>>>
> >>>>>
> >>>>> I'm sure I've seen code that would realign IP headers to a 4 byte
> >>>>> boundary before processing them - but that might not have been in
> >>>>> Linux.
> >>>>>
> >>>>> I'm also sure there are cpu which will fault double length misaligned
> >>>>> memory transfers - which might be used to marginally speed up code.
> >>>>> Assuming more than 4 byte alignment for the IP header is likely
> >>>>> 'wishful thinking'.
> >>>>>
> >>>>> There is plenty of ethernet hardware that can only write frames
> >>>>> to even boundaries and plenty of cpu that fault misaligned accesses.
> >>>>> There are even cases of both on the same silicon die.
> >>>>>
> >>>>> You also pretty much never want a fault handler to fixup misaligned
> >>>>> ethernet frames (or really anything else for that matter).
> >>>>> It is always going to be better to check in the code itself.
> >>>>>
> >>>>> x86 has just made people 'sloppy' :-)
> >>>>>
> >>>>>      David
> >>>>>
> >>>>> -
> >>>>> Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes,
> >>>>> MK1 1PT, UK
> >>>>> Registration No: 1397386 (Wales)
> >>>>>
> >>>>
> >>>> If somebody has a solution they deem to be better, I am happy to change
> >>>> this test case. Otherwise, I would appreciate a maintainer resolving
> >>>> this discussion and apply this fix.
> >>>>
> >>> Agreed.
> >>>
> >>> I do have a couple of patches which add explicit unaligned tests as well as
> >>> corner case tests (which are intended to trigger as many carry overflows
> >>> as possible). Once I get those working reliably, I'll be happy to submit
> >>> them as additional tests.
> >>>
> >>
> >> The functions definitely have to work at least with and without VLAN,
> >> which means the alignment cannot be greater than 4 bytes. That's also
> >> the outcome of the discussion.
> > 
> > Thanks for completely ignoring what I've said. No. The alignment ends up
> > being commonly 2 bytes.
> > 
> > As I've said several times, network drivers do _not_ have to respect
> > NET_IP_ALIGN. There are 32-bit ARM drivers which have a DMA engine in
> > them which can only DMA to a 32-bit aligned address. This means that
> > the start of the ethernet header is placed at a 32-bit aligned address
> > making the IP header misaligned to 32-bit.
> > 
> > I don't see what is so difficult to understand about this... but it
> > seems that my comments on this are being ignored time and time again,
> > and I can only think that those who are ignoring my comments have
> > some alterior motive here.
> > 
> 
> I'm sorry for this misunderstanding. I'm not ignoring what you said at 
> all. I understood that ARM is able to handle unaligned accesses with 
> some exception handlers at worst case and that DMA constraints may lead 
> to the IP header beeing on a 2 bytes alignment only.
> 
> However I also understood from others that some architectures can't 
> handle such a 2 bytes only alignments.
> 
> It's been suggested during the discussion that alignment tests should be 
> added later in a follow-up patch. So for the time being I'm trying to 
> find a compromise and get the existing tests working on all platforms 
> but with a smaller alignment than the 16-bytes alignment brought by 
> Charlie's v10 patch. And a 4 bytes alignment seemed to me to be a good 
> compromise for this fix. The idea is also to make the fix as minimal as 
> possible, unlike Charlie's patch that is churning up the tests quite 
> heavily.

Do you have a list of platforms this is failing on? I haven't seen any
reports that haven't been fixed.

- Charlie

> 
> But maybe I misunderstood some of the discussion and indeed 2 bytes 
> alignment would work on all platforms and only an odd alignment is 
> problematic ?

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2024-02-27 17:54 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-23 22:11 [PATCH v10] lib: checksum: Use aligned accesses for ip_fast_csum and csum_ipv6_magic tests Charlie Jenkins
2024-02-25 15:58 ` Guenter Roeck
2024-02-26 11:34 ` Christophe Leroy
2024-02-26 11:34   ` Christophe Leroy
2024-02-26 11:47   ` Russell King (Oracle)
2024-02-26 11:47     ` Russell King (Oracle)
2024-02-26 11:57     ` Christophe Leroy
2024-02-26 11:57       ` Christophe Leroy
2024-02-26 12:03       ` Russell King (Oracle)
2024-02-26 12:03         ` Russell King (Oracle)
2024-02-26 16:44   ` Guenter Roeck
2024-02-26 16:44     ` Guenter Roeck
2024-02-26 17:50     ` Russell King (Oracle)
2024-02-26 17:50       ` Russell King (Oracle)
2024-02-26 18:35       ` Charlie Jenkins
2024-02-26 18:35         ` Charlie Jenkins
2024-02-26 19:06         ` Russell King (Oracle)
2024-02-26 19:06           ` Russell King (Oracle)
2024-02-26 19:19           ` Charlie Jenkins
2024-02-26 19:19             ` Charlie Jenkins
2024-02-26 22:33           ` David Laight
2024-02-26 22:33             ` David Laight
2024-02-26 23:17             ` Charlie Jenkins
2024-02-26 23:17               ` Charlie Jenkins
2024-02-26 23:48               ` Guenter Roeck
2024-02-26 23:48                 ` Guenter Roeck
2024-02-27  6:47                 ` Christophe Leroy
2024-02-27  6:47                   ` Christophe Leroy
2024-02-27 10:28                   ` Russell King (Oracle)
2024-02-27 10:28                     ` Russell King (Oracle)
2024-02-27 11:32                     ` Christophe Leroy
2024-02-27 11:32                       ` Christophe Leroy
2024-02-27 17:54                       ` Charlie Jenkins [this message]
2024-02-27 17:54                         ` Charlie Jenkins
2024-02-27 18:11                         ` Christophe Leroy
2024-02-27 18:11                           ` Christophe Leroy
2024-02-27 18:21                           ` Charlie Jenkins
2024-02-27 18:21                             ` Charlie Jenkins
2024-02-27 18:35                             ` Christophe Leroy
2024-02-27 18:35                               ` Christophe Leroy
2024-02-27 19:04                               ` Charlie Jenkins
2024-02-27 19:04                                 ` Charlie Jenkins
2024-02-27 19:31                         ` Guenter Roeck
2024-02-27 19:31                           ` Guenter Roeck
2024-02-27 22:44                           ` David Laight
2024-02-27 22:44                             ` David Laight
2024-02-28  5:19                             ` Guenter Roeck
2024-02-28  5:19                               ` Guenter Roeck
2024-02-28  0:24                           ` Charlie Jenkins
2024-02-28  0:24                             ` Charlie Jenkins
2024-02-28  0:21                     ` Charlie Jenkins
2024-02-28  0:21                       ` Charlie Jenkins
2024-02-28  7:25                       ` Christophe Leroy
2024-02-28  7:25                         ` Christophe Leroy
2024-02-28  7:59                         ` Guenter Roeck
2024-02-28  7:59                           ` Guenter Roeck
2024-02-28 10:15                           ` Geert Uytterhoeven
2024-02-28 10:15                             ` Geert Uytterhoeven
2024-02-28 15:40                             ` Guenter Roeck
2024-02-28 15:40                               ` Guenter Roeck
2024-02-29  8:07                               ` David Gow
2024-02-29  8:07                                 ` David Gow
2024-02-29  8:07                                 ` David Gow
2024-02-29 19:38                               ` Charlie Jenkins
2024-02-29 19:38                                 ` Charlie Jenkins
2024-02-29 20:22                                 ` Guenter Roeck
2024-02-29 20:22                                   ` Guenter Roeck
2024-03-01  7:00                           ` Christophe Leroy
2024-03-01  7:00                             ` Christophe Leroy
2024-03-01  6:46     ` Christophe Leroy
2024-03-01  6:46       ` Christophe Leroy
2024-03-01 16:24       ` Guenter Roeck
2024-03-01 16:24         ` Guenter Roeck
2024-03-01 20:47         ` Guenter Roeck
2024-03-01 20:47           ` Guenter Roeck
2024-02-27 11:17 ` Geert Uytterhoeven
2024-02-27 17:55   ` Charlie Jenkins

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=Zd4h6ZhvLSWfWJG/@ghost \
    --to=charlie@rivosinc.com \
    --cc=David.Laight@aculab.com \
    --cc=James.Bottomley@hansenpartnership.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=christophe.leroy@csgroup.eu \
    --cc=deller@gmx.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=linux@roeck-us.net \
    --cc=palmer@dabbelt.com \
    --cc=palmer@rivosinc.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.