30 May, 2016

1 commit

  • We must handle data access exception as well as memory address unaligned
    exceptions from return from trap window fill faults, not just normal
    TLB misses.

    Otherwise we can get an OOPS that looks like this:

    ld-linux.so.2(36808): Kernel bad sw trap 5 [#1]
    CPU: 1 PID: 36808 Comm: ld-linux.so.2 Not tainted 4.6.0 #34
    task: fff8000303be5c60 ti: fff8000301344000 task.ti: fff8000301344000
    TSTATE: 0000004410001601 TPC: 0000000000a1a784 TNPC: 0000000000a1a788 Y: 00000002 Not tainted
    TPC:
    g0: fff8000024fc8248 g1: 0000000000db04dc g2: 0000000000000000 g3: 0000000000000001
    g4: fff8000303be5c60 g5: fff800030e672000 g6: fff8000301344000 g7: 0000000000000001
    o0: 0000000000b95ee8 o1: 000000000000012b o2: 0000000000000000 o3: 0000000200b9b358
    o4: 0000000000000000 o5: fff8000301344040 sp: fff80003013475c1 ret_pc: 0000000000a1a77c
    RPC:
    l0: 00000000000007ff l1: 0000000000000000 l2: 000000000000005f l3: 0000000000000000
    l4: fff8000301347e98 l5: fff8000024ff3060 l6: 0000000000000000 l7: 0000000000000000
    i0: fff8000301347f60 i1: 0000000000102400 i2: 0000000000000000 i3: 0000000000000000
    i4: 0000000000000000 i5: 0000000000000000 i6: fff80003013476a1 i7: 0000000000404d4c
    I7:
    Call Trace:
    [0000000000404d4c] user_rtt_fill_fixup+0x6c/0x7c

    The window trap handlers are slightly clever, the trap table entries for them are
    composed of two pieces of code. First comes the code that actually performs
    the window fill or spill trap handling, and then there are three instructions at
    the end which are for exception processing.

    The userland register window fill handler is:

    add %sp, STACK_BIAS + 0x00, %g1; \
    ldxa [%g1 + %g0] ASI, %l0; \
    mov 0x08, %g2; \
    mov 0x10, %g3; \
    ldxa [%g1 + %g2] ASI, %l1; \
    mov 0x18, %g5; \
    ldxa [%g1 + %g3] ASI, %l2; \
    ldxa [%g1 + %g5] ASI, %l3; \
    add %g1, 0x20, %g1; \
    ldxa [%g1 + %g0] ASI, %l4; \
    ldxa [%g1 + %g2] ASI, %l5; \
    ldxa [%g1 + %g3] ASI, %l6; \
    ldxa [%g1 + %g5] ASI, %l7; \
    add %g1, 0x20, %g1; \
    ldxa [%g1 + %g0] ASI, %i0; \
    ldxa [%g1 + %g2] ASI, %i1; \
    ldxa [%g1 + %g3] ASI, %i2; \
    ldxa [%g1 + %g5] ASI, %i3; \
    add %g1, 0x20, %g1; \
    ldxa [%g1 + %g0] ASI, %i4; \
    ldxa [%g1 + %g2] ASI, %i5; \
    ldxa [%g1 + %g3] ASI, %i6; \
    ldxa [%g1 + %g5] ASI, %i7; \
    restored; \
    retry; nop; nop; nop; nop; \
    b,a,pt %xcc, fill_fixup_dax; \
    b,a,pt %xcc, fill_fixup_mna; \
    b,a,pt %xcc, fill_fixup;

    And the way this works is that if any of those memory accesses
    generate an exception, the exception handler can revector to one of
    those final three branch instructions depending upon which kind of
    exception the memory access took. In this way, the fault handler
    doesn't have to know if it was a spill or a fill that it's handling
    the fault for. It just always branches to the last instruction in
    the parent trap's handler.

    For example, for a regular fault, the code goes:

    winfix_trampoline:
    rdpr %tpc, %g3
    or %g3, 0x7c, %g3
    wrpr %g3, %tnpc
    done

    All window trap handlers are 0x80 aligned, so if we "or" 0x7c into the
    trap time program counter, we'll get that final instruction in the
    trap handler.

    On return from trap, we have to pull the register window in but we do
    this by hand instead of just executing a "restore" instruction for
    several reasons. The largest being that from Niagara and onward we
    simply don't have enough levels in the trap stack to fully resolve all
    possible exception cases of a window fault when we are already at
    trap level 1 (which we enter to get ready to return from the original
    trap).

    This is executed inline via the FILL_*_RTRAP handlers. rtrap_64.S's
    code branches directly to these to do the window fill by hand if
    necessary. Now if you look at them, we'll see at the end:

    ba,a,pt %xcc, user_rtt_fill_fixup;
    ba,a,pt %xcc, user_rtt_fill_fixup;
    ba,a,pt %xcc, user_rtt_fill_fixup;

    And oops, all three cases are handled like a fault.

    This doesn't work because each of these trap types (data access
    exception, memory address unaligned, and faults) store their auxiliary
    info in different registers to pass on to the C handler which does the
    real work.

    So in the case where the stack was unaligned, the unaligned trap
    handler sets up the arg registers one way, and then we branched to
    the fault handler which expects them setup another way.

    So the FAULT_TYPE_* value ends up basically being garbage, and
    randomly would generate the backtrace seen above.

    Reported-by: Nick Alcock
    Signed-off-by: David S. Miller

    David S. Miller
     

19 May, 2014

1 commit

  • tadpole.c assigned cpu_pwr_save based on the current configuration.
    The rest of the tadpole.c file was only used if cpu_pwr_save was
    dereferenced.
    But this variable was never dereferenced - and I went back to a 2.6.12
    kernel to check (from June 2005) - and not even then was it used.

    Drop this code as it has not been in use for ~10 years.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

03 Oct, 2013

1 commit

  • Commit ebd97be635 ('PCI: remove ARCH_SUPPORTS_MSI kconfig option')
    removes the ARCH_SUPPORTS_MSI Kconfig option that allowed
    architectures to indicate whether they support PCI MSI or not. Now,
    PCI MSI support can be compiled in on any architecture thanks to the
    use of weak functions thanks to 4287d824f265 ('PCI: use weak functions
    for MSI arch-specific functions').

    So, architecture specific code is now responsible to ensure that its
    PCI MSI code builds in all cases, or be appropriately conditionally
    compiled.

    On Sparc, the MSI support is only provided for Sparc64, so the
    ARCH_SUPPORTS_MSI kconfig option was only selected for SPARC64, and
    not for the Sparc architecture as a whole. Therefore, removing
    ARCH_SUPPORTS_MSI broke Sparc32 configurations with CONFIG_PCI_MSI=y,
    because the Sparc-specific MSI code is not designed to be built on
    Sparc32.

    To solve this, this commit ensures that the Sparc MSI code is only
    built on Sparc64. This is done thanks to a new Kconfig Makefile helper
    option SPARC64_PCI_MSI, modeled after the existing SPARC64_PCI. The
    SPARC64_PCI_MSI option is an hidden option that is true when both
    Sparc64 PCI support is enabled and MSI is enabled. The
    arch/sparc/kernel/pci_msi.c file is now only built when
    SPARC64_PCI_MSI is true.

    Signed-off-by: Thomas Petazzoni
    Reported-by: Guenter Roeck
    Tested-by: Guenter Roeck
    Signed-off-by: David S. Miller

    Thomas Petazzoni
     

05 May, 2013

1 commit


10 Apr, 2013

1 commit


21 Mar, 2013

2 commits


28 May, 2012

2 commits


22 May, 2012

1 commit

  • Pull smp hotplug cleanups from Thomas Gleixner:
    "This series is merily a cleanup of code copied around in arch/* and
    not changing any of the real cpu hotplug horrors yet. I wish I'd had
    something more substantial for 3.5, but I underestimated the lurking
    horror..."

    Fix up trivial conflicts in arch/{arm,sparc,x86}/Kconfig and
    arch/sparc/include/asm/thread_info_32.h

    * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (79 commits)
    um: Remove leftover declaration of alloc_task_struct_node()
    task_allocator: Use config switches instead of magic defines
    sparc: Use common threadinfo allocator
    score: Use common threadinfo allocator
    sh-use-common-threadinfo-allocator
    mn10300: Use common threadinfo allocator
    powerpc: Use common threadinfo allocator
    mips: Use common threadinfo allocator
    hexagon: Use common threadinfo allocator
    m32r: Use common threadinfo allocator
    frv: Use common threadinfo allocator
    cris: Use common threadinfo allocator
    x86: Use common threadinfo allocator
    c6x: Use common threadinfo allocator
    fork: Provide kmemcache based thread_info allocator
    tile: Use common threadinfo allocator
    fork: Provide weak arch_release_[task_struct|thread_info] functions
    fork: Move thread info gfp flags to header
    fork: Remove the weak insanity
    sh: Remove cpu_idle_wait()
    ...

    Linus Torvalds
     

16 May, 2012

1 commit


12 May, 2012

1 commit

  • Machines with sun4c support are very rare these days, and noone
    is using them for any practical purposes.
    The sun4c support has been know broken for quite some time too.

    So rather than trying to keep it up-to-date, lets get rid of it.
    This allows us to do some very welcome cleanup of sparc32 support.

    Updated the former sun4c specifc nmi (which was also used
    for sun4m UP) to be a generic UP NMI.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

05 May, 2012

1 commit


21 Aug, 2011

1 commit

  • If we can't push the pending register windows onto the user's stack,
    we disallow signal delivery even if the signal would be delivered on a
    valid seperate signal stack.

    Add a register window save area in the signal frame, and store any
    unsavable windows there.

    On sigreturn, if any windows are still queued up in the signal frame,
    try to push them back onto the stack and if that fails we kill the
    process immediately.

    This allows the debug/tst-longjmp_chk2 glibc test case to pass.

    Signed-off-by: David S. Miller

    David S. Miller
     

03 Jun, 2011

3 commits

  • The DMA region must be accessible in order for PCI peripheral
    drivers to work, the sparc32 has DMA in the normal memory
    zone which requires the GRPCI2 to PCI target BARs so that all
    kernel low mem (192MB) can be mapped 1:1 to PCI address
    space. The GRPCI2 has resizeable target BARs, by default the
    first is made 256MB and all other BARs are disabled.

    I/O space are always located on 0x1000-0x10000, but accessed
    through the GRPCI2 PCI I/O Window memory mapped to virtual
    address space.

    Configuration space is accessed through the 64KB GRPCI2 PCI
    CFG Window using LDA bypassing the MMU.

    The GRPCI2 has a single PCI Window for prefetchable and non-
    prefetchable address space, it is up to the AHB master
    requesting PCI data to determine access type. Memory space
    is mapped 1:1.

    The GRPCI2 core can be configured in 4 different IRQ modes,
    where PCI Interrupt, Error Interrupt and DMA Interrupt are
    shared on a single IRQ line or at most 5 IRQs are used. The
    GRPCI2 can mask/unmask PCI interrupts, Err and DMA in the control
    and check status bits which tells us which IRQ really happended.
    The GENIRQ layer is used to unmask/mask each individual IRQ
    source by creating virtual IRQs and implementing a IRQ chip.

    The optional DMA functionality of the GRPCI2 is not supported
    by this patch.

    Signed-off-by: Daniel Hellstrom
    Signed-off-by: David S. Miller

    Daniel Hellstrom
     
  • The LEON architecture does not have a BIOS or bootloader that
    initializes PCI for us, instead Linux generic PCI layer is used
    to set up resources and IRQ.

    Signed-off-by: Daniel Hellstrom
    Signed-off-by: David S. Miller

    Daniel Hellstrom
     
  • Signed-off-by: Daniel Hellstrom
    Signed-off-by: David S. Miller

    Daniel Hellstrom
     

20 Apr, 2011

1 commit

  • The conversion of sparc32 to genirq is based on original work done
    by David S. Miller.
    Daniel Hellstrom has helped in the conversion and implemented
    the shutdowm functionality.
    Marcel van Nies has tested this on Sparc Station 20

    Test status:
    sun4c - not tested
    sun4m,pci - not tested
    sun4m,sbus - tested (Sparc Classic, Sparc Station 5, Sparc Station 20)
    sun4d - not tested
    leon - tested on various combinations of leon boards,
    including SMP variants

    generic
    Introduce use of GENERIC_HARDIRQS and GENERIC_IRQ_SHOW
    Allocate 64 IRQs - which is enough even for SS2000
    Use a table of irq_bucket to maintain uses IRQs
    irq_bucket is also used to chain several irq's that
    must be called when the same intrrupt is asserted
    Use irq_link to link a interrupt source to the irq
    All plafforms must now supply their own build_device_irq method
    handler_irq rewriten to use generic irq support

    floppy
    Read FLOPPY_IRQ from platform device
    Use generic request_irq to register the floppy interrupt
    Rewrote sparc_floppy_irq to use the generic irq support

    pcic:
    Introduce irq_chip
    Store mask in chip_data for use in mask/unmask functions
    Add build_device_irq for pcic
    Use pcic_build_device_irq in pci_time_init
    allocate virtual irqs in pcic_fill_irq

    sun4c:
    Introduce irq_chip
    Store mask in chip_data for use in mask/unmask functions
    Add build_device_irq for sun4c
    Use sun4c_build_device_irq in sun4c_init_timers

    sun4m:
    Introduce irq_chip
    Introduce dedicated mask/unmask methods
    Introduce sun4m_handler_data that allow easy access to necessary
    data in the mask/unmask functions
    Add a helper method to enable profile_timer (used from smp)
    Added sun4m_build_device_irq
    Use sun4m_build_device_irq in sun4m_init_timers

    TODO:
    There is no replacement for smp_rotate that always scheduled
    next CPU as interrupt target upon an interrupt

    sun4d:
    Introduce irq_chip
    Introduce dedicated mask/unmask methods
    Introduce sun4d_handler_data that allow easy access to
    necessary data in mask/unmask fuctions
    Rewrote sun4d_handler_irq to use generic irq support

    TODO:
    The original implmentation of enable/disable had:

    if (irq < NR_IRQS)
    return;

    The new implmentation does not distingush between SBUS and cpu
    interrupts.
    I am no sure what is right here. I assume we need to do
    something for the cpu interrupts.

    I have not succeeded booting my sun4d box (with or without this patch)
    and my understanding of this platfrom is limited.
    So I would be a bit suprised if this works.

    leon:
    Introduce irq_chip
    Store mask in chip_data for use in mask/unmask functions
    Add build_device_irq for leon
    Use leon_build_device_irq in leon_init_timers

    Signed-off-by: Sam Ravnborg
    Acked-by: Daniel Hellstrom
    Tested-by: Daniel Hellstrom
    Tested-by: Marcel van Nies
    Cc: Thomas Gleixner
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

17 Mar, 2011

2 commits

  • The two methods included in tick14.c was nop because
    the static variable linux_lvl14 was always NULL.

    So remove the file and callers.

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     
  • The way a LEON is powered down is implemented differently depending
    on CHIP type. The AMBA Plug&Play system ID tells revision of GRLIB
    and CHIP.

    This is for example needed by the GR-LEON4-ITX board and the UT699.

    Previously the power down support for LEON was limited to SMP, now
    both SMP and UP systems use the instruction.

    Signed-off-by: Daniel Hellstrom
    Acked-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Daniel Hellstrom
     

23 Sep, 2010

1 commit


13 Apr, 2010

2 commits


28 Nov, 2009

1 commit


02 Nov, 2009

1 commit


24 Sep, 2009

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild-next: (30 commits)
    Use macros for .data.page_aligned section.
    Use macros for .bss.page_aligned section.
    Use new __init_task_data macro in arch init_task.c files.
    kbuild: Don't define ALIGN and ENTRY when preprocessing linker scripts.
    arm, cris, mips, sparc, powerpc, um, xtensa: fix build with bash 4.0
    kbuild: add static to prototypes
    kbuild: fail build if recordmcount.pl fails
    kbuild: set -fconserve-stack option for gcc 4.5
    kbuild: echo the record_mcount command
    gconfig: disable "typeahead find" search in treeviews
    kbuild: fix cc1 options check to ensure we do not use -fPIC when compiling
    checkincludes.pl: add option to remove duplicates in place
    markup_oops: use modinfo to avoid confusion with underscored module names
    checkincludes.pl: provide usage helper
    checkincludes.pl: close file as soon as we're done with it
    ctags: usability fix
    kernel hacking: move STRIP_ASM_SYMS from General
    gitignore usr/initramfs_data.cpio.bz2 and usr/initramfs_data.cpio.lzma
    kbuild: Check if linker supports the -X option
    kbuild: introduce ld-option
    ...

    Fix trivial conflict in scripts/basic/fixdep.c

    Linus Torvalds
     

21 Sep, 2009

1 commit

  • Bye-bye Performance Counters, welcome Performance Events!

    In the past few months the perfcounters subsystem has grown out its
    initial role of counting hardware events, and has become (and is
    becoming) a much broader generic event enumeration, reporting, logging,
    monitoring, analysis facility.

    Naming its core object 'perf_counter' and naming the subsystem
    'perfcounters' has become more and more of a misnomer. With pending
    code like hw-breakpoints support the 'counter' name is less and
    less appropriate.

    All in one, we've decided to rename the subsystem to 'performance
    events' and to propagate this rename through all fields, variables
    and API names. (in an ABI compatible fashion)

    The word 'event' is also a bit shorter than 'counter' - which makes
    it slightly more convenient to write/handle as well.

    Thanks goes to Stephane Eranian who first observed this misnomer and
    suggested a rename.

    User-space tooling and ABI compatibility is not affected - this patch
    should be function-invariant. (Also, defconfigs were not touched to
    keep the size down.)

    This patch has been generated via the following script:

    FILES=$(find * -type f | grep -vE 'oprofile|[^K]config')

    sed -i \
    -e 's/PERF_EVENT_/PERF_RECORD_/g' \
    -e 's/PERF_COUNTER/PERF_EVENT/g' \
    -e 's/perf_counter/perf_event/g' \
    -e 's/nb_counters/nb_events/g' \
    -e 's/swcounter/swevent/g' \
    -e 's/tpcounter_event/tp_event/g' \
    $FILES

    for N in $(find . -name perf_counter.[ch]); do
    M=$(echo $N | sed 's/perf_counter/perf_event/g')
    mv $N $M
    done

    FILES=$(find . -name perf_event.*)

    sed -i \
    -e 's/COUNTER_MASK/REG_MASK/g' \
    -e 's/COUNTER/EVENT/g' \
    -e 's/\/event_id/g' \
    -e 's/counter/event/g' \
    -e 's/Counter/Event/g' \
    $FILES

    ... to keep it as correct as possible. This script can also be
    used by anyone who has pending perfcounters patches - it converts
    a Linux kernel tree over to the new naming. We tried to time this
    change to the point in time where the amount of pending patches
    is the smallest: the end of the merge window.

    Namespace clashes were fixed up in a preparatory patch - and some
    stylistic fallout will be fixed up in a subsequent patch.

    ( NOTE: 'counters' are still the proper terminology when we deal
    with hardware registers - and these sed scripts are a bit
    over-eager in renaming them. I've undone some of that, but
    in case there's something left where 'counter' would be
    better than 'event' we can undo that on an individual basis
    instead of touching an otherwise nicely automated patch. )

    Suggested-by: Stephane Eranian
    Acked-by: Peter Zijlstra
    Acked-by: Paul Mackerras
    Reviewed-by: Arjan van de Ven
    Cc: Mike Galbraith
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    Cc: Steven Rostedt
    Cc: Benjamin Herrenschmidt
    Cc: David Howells
    Cc: Kyle McMartin
    Cc: Martin Schwidefsky
    Cc: "David S. Miller"
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc:
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

20 Sep, 2009

1 commit

  • Albin Tonnerre reported:

    Bash 4 filters out variables which contain a dot in them.
    This happends to be the case of CPPFLAGS_vmlinux.lds.
    This is rather unfortunate, as it now causes
    build failures when using SHELL=/bin/bash to compile,
    or when bash happens to be used by make (eg when it's /bin/sh)

    Remove the common definition of CPPFLAGS_vmlinux.lds by
    pushing relevant stuff to either Makefile.build or the
    arch specific kernel/Makefile where we build the linker script.

    This is also nice cleanup as we move the information out where
    it is used.

    Notes for the different architectures touched:

    arm - we use an already exported symbol
    cris - we use a config symbol aleady available
    [Not build tested]
    mips - the jiffies complexity has moved to vmlinux.lds.S where we need it.
    Added a few variables to CPPFLAGS - they are only used by
    the linker script.
    [Not build tested]
    powerpc - removed assignment that is not needed
    [not build tested]
    sparc - simplified it using $(BITS)
    um - introduced a few new exported variables to deal with this
    xtensa - added options to CPP invocation
    [not build tested]

    Cc: Albin Tonnerre
    Cc: Russell King
    Cc: Mikael Starvik
    Cc: Jesper Nilsson
    Cc: Benjamin Herrenschmidt
    Cc: Paul Mackerras
    Cc: "David S. Miller"
    Cc: Jeff Dike
    Cc: Chris Zankel
    Signed-off-by: Sam Ravnborg

    Sam Ravnborg
     

12 Sep, 2009

1 commit


10 Sep, 2009

1 commit


18 Aug, 2009

1 commit

  • Add sparc_leon enum, M_LEON|M_LEON3_SOC machine. Add compilation of
    leon.c in mm and kernel
    if CONFIG_SPARC_LEON is defined. Add sparc_leon dependent
    initialization to switch statements + head.S.

    Signed-off-by: Konrad Eisele
    Reviewed-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Konrad Eisele
     

10 Aug, 2009

1 commit

  • All we need to do for CONFIG_DMA_API_DEBUG support is call
    dma_debug_init() in DMA code common for SPARC32 and SPARC64.

    Now SPARC32 uses two dma_map_ops structures for pci and sbus so
    there is not much dma stuff for SPARC32 in kernel/dma.c.
    kernel/ioport.c also includes dma stuff for SPARC32. So let's
    put all the dma stuff for SPARC32 in kernel/ioport.c and make
    kernel/dma.c common for SPARC32 and SPARC64.

    Signed-off-by: FUJITA Tomonori
    Tested-by: Robert Reif
    Acked-by: David S. Miller
    Cc: tony.luck@intel.com
    Cc: fenghua.yu@intel.com
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    FUJITA Tomonori
     

16 Jun, 2009

2 commits

  • This patch moves code common to of_device_32.c and of_device_64.c into
    of_device_common.h and of_device_common.c.

    The only functional difference is in sparc32 where of_bus_default_map is
    used in place of of_bus_sbus_map because they are equivelent.

    There is still room for further code consolidation with some minor
    refactoring.

    Boot tested on sparc32 and compile tested on sparc64.

    Signed-off-by: Robert Reif
    Signed-off-by: David S. Miller

    Robert Reif
     
  • irq_choose_cpu() should compare the affinity mask against cpu_online_map
    rather than CPU_MASK_ALL, since irq_select_affinity() sets the interrupt's
    affinity mask to cpu_online_map "and" CPU_MASK_ALL (which ends up being
    just cpu_online_map). The mask comparison in irq_choose_cpu() will always
    fail since the two masks are not the same. So the CPU chosen is the first CPU
    in the intersection of cpu_online_map and CPU_MASK_ALL, which is always CPU0.
    That means all interrupts are reassigned to CPU0...

    Distributing interrupts to CPUs in a linearly increasing round robin fashion
    is not optimal for the UltraSPARC T1/T2. Also, the irq_rover in
    irq_choose_cpu() causes an interrupt to be assigned to a different
    processor each time the interrupt is allocated and released. This may lead
    to an unbalanced distribution over time.

    A static mapping of interrupts to processors is done to optimize and balance
    interrupt distribution. For the T1/T2, interrupts are spread to different
    cores first, and then to strands within a core.

    The following is some benchmarks showing the effects of interrupt
    distribution on a T2. The test was done with iperf using a pair of T5220
    boxes, each with a 10GBe NIU (XAUI) connected back to back.

    TCP | Stock Linear RR IRQ Optimized IRQ
    Streams | 2.6.30-rc5 Distribution Distribution
    | GBits/sec GBits/sec GBits/sec
    --------+-----------------------------------------
    1 0.839 0.862 0.868
    8 1.16 4.96 5.88
    16 1.15 6.40 8.04
    100 1.09 7.28 8.68

    Signed-off-by: Hong H. Pham
    Signed-off-by: David S. Miller

    Hong H. Pham
     

30 Jan, 2009

1 commit


29 Jan, 2009

1 commit


27 Dec, 2008

1 commit

  • o Copy module_64.c to module.c
    o Add all sparc specific bits to module.c
    o delete module_32.c
    o update Makefile

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

07 Dec, 2008

2 commits

  • o in sparc32 variant removed prom_halt in warning situations
    o ifdef out sparc32 specific code

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     
  • o use cpu_32.c as base
    o move all sparc64 definitions to the common cpu.c
    o use ifdef for the parts that differs and use cpu_32 as base
    o spitfire.h required a CONFIG_SPARC64 guard to fix build on 32 bit

    Signed-off-by: Sam Ravnborg
    Signed-off-by: David S. Miller

    Sam Ravnborg
     

06 Dec, 2008

1 commit