[lkml]   [2008]   [Mar]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH/RFC v4] introduce HAVE_UNALIGNED_ACCESS_SUPPORT Kconfig symbol
    In many cases, especially in networking, it can be beneficial to
    know at compile time whether the architecture can do unaligned
    accesses. This patch introduces a new Kconfig symbol
    for that purpose and adds it to the powerpc and x86 architectures.
    Also add some documentation about alignment and networking, and
    especially one intended use of this symbol.

    Signed-off-by: Johannes Berg <>
    Acked-by: Sam Ravnborg <>
    Didn't I say I was going to fix the subject? Sorry.

    Documentation/unaligned-memory-access.txt | 32 +++++++++++++++++++++++++++---
    arch/Kconfig | 3 ++
    arch/powerpc/Kconfig | 1
    arch/x86/Kconfig | 1
    4 files changed, 34 insertions(+), 3 deletions(-)

    --- everything.orig/Documentation/unaligned-memory-access.txt 2008-03-20 15:30:38.000000000 +0100
    +++ everything/Documentation/unaligned-memory-access.txt 2008-03-20 19:38:30.000000000 +0100
    @@ -218,9 +218,35 @@ If use of such macros is not convenient,
    where the source or destination (or both) are of type u8* or unsigned char*.
    Due to the byte-wise nature of this operation, unaligned accesses are avoided.

    +Alignment vs. Networking
    +On architectures that require aligned loads, networking requires that the IP
    +header is aligned on a four-byte boundary to optimise the IP stack. For
    +regular ethernet hardware, the constant NET_IP_ALIGN is used, on most
    +architectures this constant has the value 2 because the normal ethernet
    +header is 14 bytes long, so in order to get proper alignment one needs to
    +DMA to an address that is can be expressed as 4*n + 2. One notable exception
    +here is powerpc which defines NET_IP_ALIGN to 0 because DMA to unaligned
    +addresses can be very expensive and dwarf the cost of unaligned loads.
    +For some ethernet hardware that cannot DMA to unaligned addresses like
    +4*n+2 or non-ethernet hardware, this can be a problem, and it is then
    +required to copy the incoming frame into an aligned buffer. Because this is
    +unnecessary on architectures that can do unaligned accesses, the code can be
    +made depend on CONFIG_HAVE_UNALIGNED_ACCESS_SUPPORT like so:
    + skb = original skb
    + skb = copy skb
    -Author: Daniel Drake <>
    +Authors: Daniel Drake <>,
    + Johannes Berg <>
    With help from: Alan Cox, Avuton Olrich, Heikki Orsila, Jan Engelhardt,
    -Johannes Berg, Kyle McMartin, Kyle Moffett, Randy Dunlap, Robert Hancock,
    -Uli Kunitz, Vadim Lobanov
    +Kyle McMartin, Kyle Moffett, Randy Dunlap, Robert Hancock, Uli Kunitz,
    +Vadim Lobanov

    --- everything.orig/arch/powerpc/Kconfig 2008-03-20 15:30:38.000000000 +0100
    +++ everything/arch/powerpc/Kconfig 2008-03-20 19:37:22.000000000 +0100
    @@ -91,6 +91,7 @@ config PPC
    select HAVE_OPROFILE
    select HAVE_KPROBES

    config EARLY_PRINTK
    --- everything.orig/arch/x86/Kconfig 2008-03-20 15:30:38.000000000 +0100
    +++ everything/arch/x86/Kconfig 2008-03-20 19:38:08.000000000 +0100
    @@ -23,6 +23,7 @@ config X86
    select HAVE_KPROBES
    select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)

    --- everything.orig/arch/Kconfig 2008-03-20 19:37:26.000000000 +0100
    +++ everything/arch/Kconfig 2008-03-20 19:37:34.000000000 +0100
    @@ -36,3 +36,6 @@ config HAVE_KPROBES

    def_bool n
    + def_bool n

     \ /
      Last update: 2008-03-20 20:53    [W:0.023 / U:33.668 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site