1. 28 7月, 2011 4 次提交
    • D
      sparc: Detect and handle UltraSPARC-T3 cpu types. · 4ba991d3
      David S. Miller 提交于
      The cpu compatible string we look for is "SPARC-T3".
      
      As far as memset/memcpy optimizations go, we treat this chip the same
      as Niagara-T2/T2+.  Use cache initializing stores for memset, and use
      perfetch, FPU block loads, cache initializing stores, and block stores
      for copies.
      
      We use the Niagara-T2 perf support, since T3 is a close relative in
      this regard.  Later we'll add support for the new events T3 can
      report, plus enable T3's new "sample" mode.
      
      For now I haven't added any new ELF hwcap flags.  We probably need
      to add a couple, for example:
      
      T2 and T3 both support the population count instruction in hardware.
      
      T3 supports VIS3 instructions, including support (finally) for
      partitioned shift.  One can also now move directly between float
      and integer registers.
      
      T3 supports instructions meant to help with Galois Field and other HPC
      calculations, such as XOR multiply.  Also there are "OP and negate"
      instructions, for example "fnmul" which is multiply-and-negate.
      
      T3 recognizes the transactional memory opcodes, however since
      transactional memory isn't supported: 1) 'commit' behaves as a NOP and
      2) 'chkpt' always branches 3) 'rdcps' returns all zeros and 4) 'wrcps'
      behaves as a NOP.
      
      So we'll need about 3 new elf capability flags in the end to represent
      all of these things.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4ba991d3
    • D
      sparc: Don't do expensive hypervisor PCR write unless necessary. · 314ff527
      David S. Miller 提交于
      The hypervisor call is only necessary if hypervisor events are
      being requested.
      
      So if we're not tracking hypervisor events, simply do a direct
      register write.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      314ff527
    • D
    • D
      sparc: Don't leave sparc_pmu_type NULL on sun4v. · facfddef
      David S. Miller 提交于
      Otherwise we'll crash in the sparc perf init code.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      facfddef
  2. 27 7月, 2011 1 次提交
  3. 24 7月, 2011 1 次提交
  4. 17 7月, 2011 1 次提交
  5. 01 7月, 2011 2 次提交
    • P
      perf, arch: Add generic NODE cache events · 89d6c0b5
      Peter Zijlstra 提交于
      Add a NODE level to the generic cache events which is used to measure
      local vs remote memory accesses. Like all other cache events, an
      ACCESS is HIT+MISS, if there is no way to distinguish between reads
      and writes do reads only etc..
      
      The below needs filling out for !x86 (which I filled out with
      unsupported events).
      
      I'm fairly sure ARM can leave it like that since it doesn't strike me as
      an architecture that even has NUMA support. SH might have something since
      it does appear to have some NUMA bits.
      
      Sparc64, PowerPC and MIPS certainly want a good look there since they
      clearly are NUMA capable.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: David Miller <davem@davemloft.net>
      Cc: Anton Blanchard <anton@samba.org>
      Cc: David Daney <ddaney@caviumnetworks.com>
      Cc: Deng-Cheng Zhu <dengcheng.zhu@gmail.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Robert Richter <robert.richter@amd.com>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/1303508226.4865.8.camel@laptopSigned-off-by: NIngo Molnar <mingo@elte.hu>
      89d6c0b5
    • P
      perf: Remove the nmi parameter from the swevent and overflow interface · a8b0ca17
      Peter Zijlstra 提交于
      The nmi parameter indicated if we could do wakeups from the current
      context, if not, we would set some state and self-IPI and let the
      resulting interrupt do the wakeup.
      
      For the various event classes:
      
        - hardware: nmi=0; PMI is in fact an NMI or we run irq_work_run from
          the PMI-tail (ARM etc.)
        - tracepoint: nmi=0; since tracepoint could be from NMI context.
        - software: nmi=[0,1]; some, like the schedule thing cannot
          perform wakeups, and hence need 0.
      
      As one can see, there is very little nmi=1 usage, and the down-side of
      not using it is that on some platforms some software events can have a
      jiffy delay in wakeup (when arch_irq_work_raise isn't implemented).
      
      The up-side however is that we can remove the nmi parameter and save a
      bunch of conditionals in fast paths.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Michael Cree <mcree@orcon.net.nz>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: Deng-Cheng Zhu <dengcheng.zhu@gmail.com>
      Cc: Anton Blanchard <anton@samba.org>
      Cc: Eric B Munson <emunson@mgebm.net>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Jason Wessel <jason.wessel@windriver.com>
      Cc: Don Zickus <dzickus@redhat.com>
      Link: http://lkml.kernel.org/n/tip-agjev8eu666tvknpb3iaj0fg@git.kernel.orgSigned-off-by: NIngo Molnar <mingo@elte.hu>
      a8b0ca17
  6. 10 6月, 2011 3 次提交
  7. 08 6月, 2011 6 次提交
  8. 03 6月, 2011 3 次提交
    • D
      sparc32,leon: add GRPCI2 PCI Host driver · 5d07b786
      Daniel Hellstrom 提交于
      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: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5d07b786
    • D
      sparc32,leon: added LEON-common low-level PCI routines · 26893c13
      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: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      26893c13
    • D
      cfe3af5d
  9. 29 5月, 2011 1 次提交
    • E
      ns: Wire up the setns system call · 7b21fddd
      Eric W. Biederman 提交于
      32bit and 64bit on x86 are tested and working.  The rest I have looked
      at closely and I can't find any problems.
      
      setns is an easy system call to wire up.  It just takes two ints so I
      don't expect any weird architecture porting problems.
      
      While doing this I have noticed that we have some architectures that are
      very slow to get new system calls.  cris seems to be the slowest where
      the last system calls wired up were preadv and pwritev.  avr32 is weird
      in that recvmmsg was wired up but never declared in unistd.h.  frv is
      behind with perf_event_open being the last syscall wired up.  On h8300
      the last system call wired up was epoll_wait.  On m32r the last system
      call wired up was fallocate.  mn10300 has recvmmsg as the last system
      call wired up.  The rest seem to at least have syncfs wired up which was
      new in the 2.6.39.
      
      v2: Most of the architecture support added by Daniel Lezcano <dlezcano@fr.ibm.com>
      v3: ported to v2.6.36-rc4 by: Eric W. Biederman <ebiederm@xmission.com>
      v4: Moved wiring up of the system call to another patch
      v5: ported to v2.6.39-rc6
      v6: rebased onto parisc-next and net-next to avoid syscall  conflicts.
      v7: ported to Linus's latest post 2.6.39 tree.
      
      >  arch/blackfin/include/asm/unistd.h     |    3 ++-
      >  arch/blackfin/mach-common/entry.S      |    1 +
      Acked-by: NMike Frysinger <vapier@gentoo.org>
      
      Oh - ia64 wiring looks good.
      Acked-by: NTony Luck <tony.luck@intel.com>
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7b21fddd
  10. 25 5月, 2011 1 次提交
    • D
      arch, mm: filter disallowed nodes from arch specific show_mem functions · 7bf02ea2
      David Rientjes 提交于
      Architectures that implement their own show_mem() function did not pass
      the filter argument to show_free_areas() to appropriately avoid emitting
      the state of nodes that are disallowed in the current context.  This patch
      now passes the filter argument to show_free_areas() so those nodes are now
      avoided.
      
      This patch also removes the show_free_areas() wrapper around
      __show_free_areas() and converts existing callers to pass an empty filter.
      
      ia64 emits additional information for each node, so skip_free_areas_zone()
      must be made global to filter disallowed nodes and it is converted to use
      a nid argument rather than a zone for this use case.
      Signed-off-by: NDavid Rientjes <rientjes@google.com>
      Cc: Russell King <linux@arm.linux.org.uk>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: Fenghua Yu <fenghua.yu@intel.com>
      Cc: Kyle McMartin <kyle@mcmartin.ca>
      Cc: Helge Deller <deller@gmx.de>
      Cc: James Bottomley <jejb@parisc-linux.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Guan Xuetao <gxt@mprc.pku.edu.cn>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      7bf02ea2
  11. 19 5月, 2011 1 次提交
    • G
      drivercore: revert addition of of_match to struct device · b1608d69
      Grant Likely 提交于
      Commit b826291c, "drivercore/dt: add a match table pointer to struct
      device" added an of_match pointer to struct device to cache the
      of_match_table entry discovered at driver match time.  This was unsafe
      because matching is not an atomic operation with probing a driver.  If
      two or more drivers are attempted to be matched to a driver at the
      same time, then the cached matching entry pointer could get
      overwritten.
      
      This patch reverts the of_match cache pointer and reworks all users to
      call of_match_device() directly instead.
      Signed-off-by: NGrant Likely <grant.likely@secretlab.ca>
      b1608d69
  12. 17 5月, 2011 7 次提交
  13. 06 5月, 2011 1 次提交
    • A
      net: Add sendmmsg socket system call · 228e548e
      Anton Blanchard 提交于
      This patch adds a multiple message send syscall and is the send
      version of the existing recvmmsg syscall. This is heavily
      based on the patch by Arnaldo that added recvmmsg.
      
      I wrote a microbenchmark to test the performance gains of using
      this new syscall:
      
      http://ozlabs.org/~anton/junkcode/sendmmsg_test.c
      
      The test was run on a ppc64 box with a 10 Gbit network card. The
      benchmark can send both UDP and RAW ethernet packets.
      
      64B UDP
      
      batch   pkts/sec
      1       804570
      2       872800 (+ 8 %)
      4       916556 (+14 %)
      8       939712 (+17 %)
      16      952688 (+18 %)
      32      956448 (+19 %)
      64      964800 (+20 %)
      
      64B raw socket
      
      batch   pkts/sec
      1       1201449
      2       1350028 (+12 %)
      4       1461416 (+22 %)
      8       1513080 (+26 %)
      16      1541216 (+28 %)
      32      1553440 (+29 %)
      64      1557888 (+30 %)
      
      We see a 20% improvement in throughput on UDP send and 30%
      on raw socket send.
      
      [ Add sparc syscall entries. -DaveM ]
      Signed-off-by: NAnton Blanchard <anton@samba.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      228e548e
  14. 22 4月, 2011 8 次提交
    • D
    • D
      sparc32,leon: operate on boot-cpu IRQ controller registers · 01dae0f0
      Daniel Hellstrom 提交于
      * proper initialization of boot_cpu_id (no hardcoding to 0)
       * use boot_cpu_id index to address into the IRQ controller where
         appropriate
      
      Each CPU has a separate set of IRQ controller registers, this
      patch makes sure that the boot-cpu registers are used instead
      of CPU0's.
      Signed-off-by: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      01dae0f0
    • D
      sparc32: always define boot_cpu_id · 5fcafb7a
      Daniel Hellstrom 提交于
      Define boot_cpu_id in single-processor kernels as well. This is
      to support architectures which can boot on other than CPU0.
      
      Sam Ravnborg has written the cleanup parts by extracting
      boot_cpu_id from smp_32.c into setup_32.c and cleaned up
      sun4d_irq.c.
      
      boot_cpu_id was initialized before BSS was cleared in
      sun4c_continue_boot, instead boot_cpu_id is set to 0xff to
      avoid BSS. If boot_cpu_id is untouched (0xff) by bootup code
      it will be overwritten to 0. boot_cpu_id4 is automatically
      calculated in common code.
      Signed-off-by: NDaniel Hellstrom <daniel@gaisler.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5fcafb7a
    • S
      sparc32: fix sparcstation 5 boot · f486b3dc
      Sam Ravnborg 提交于
      The sparcstation 5 I have available has no MID property for the CPU.
      This resulted in a panic when booting a SMP kernel on this box.
      
      The assigned field in cpu_data is never used, so if we fail
      to read the MID property then inform user and continue booting.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f486b3dc
    • S
      sparc32: always register a PROM based early console · 7671fa22
      Sam Ravnborg 提交于
      Do not require user to add "-p" to boot arguments to see
      early info printed to prom console.
      
      This is similar to the sparc64 functionality - which was added with:
      3c62a2d3 ("[SPARC64]: Always register
      a PROM based early console.")
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7671fa22
    • S
      sparc32: probe for cpu info only during startup · 9c2853af
      Sam Ravnborg 提交于
      We did a cpu_probe() call each time a CPU got online - which
      only effect was to save latest CPU/FPU info for use by show_cpuinfo().
      Use same setup as for sparc64 where we probe for this info during startup,
      and only once.
      
      This allowed us to annotate a few functions __init which again
      fixed the following section mismatch warnings:
      
      WARNING: vmlinux.o(.text+0x65f0): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
      WARNING: vmlinux.o(.text+0x65f8): Section mismatch in reference from the function set_cpu_and_fpu() to the (unknown reference) .init.rodata:(unknown)
      WARNING: vmlinux.o(.text+0x664c): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info
      WARNING: vmlinux.o(.text+0x6650): Section mismatch in reference from the function set_cpu_and_fpu() to the variable .init.rodata:manufacturer_info
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9c2853af
    • S
      sparc: consolidate show_cpuinfo in cpu.c · cb1b8209
      Sam Ravnborg 提交于
      We have all the cpu related info in cpu.c - so move
      the remaining functions to support /proc/cpuinfo to this file.
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cb1b8209
    • S
      sparc32: fix section mismatch warnings in apc, pmc and time_32 · 505d9147
      Sam Ravnborg 提交于
      In all cases there were a struct of_device_id variable defined __initdata.
      But it was referenced from struct platform_driver.of_match_table
      which is not guaranteed to be used during init only.
      
      So drop the __initdata annotation.
      
      This fixes following warnings:
      
      WARNING: arch/sparc/kernel/built-in.o(.data+0x810): Section mismatch in reference from the variable clock_driver to the variable .init.data:clock_match
      The variable clock_driver references
      the variable __initdata clock_match
      If the reference is valid then annotate the
      variable with __init* or __refdata (see linux/init.h) or name the variable:
      *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
      
      WARNING: arch/sparc/kernel/built-in.o(.data+0xcec): Section mismatch in reference from the variable apc_driver to the variable .init.data:apc_match
      The variable apc_driver references
      the variable __initdata apc_match
      If the reference is valid then annotate the
      variable with __init* or __refdata (see linux/init.h) or name the variable:
      *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
      
      WARNING: arch/sparc/kernel/built-in.o(.data+0xd60): Section mismatch in reference from the variable pmc_driver to the variable .init.data:pmc_match
      The variable pmc_driver references
      the variable __initdata pmc_match
      If the reference is valid then annotate the
      variable with __init* or __refdata (see linux/init.h) or name the variable:
      *_template, *_timer, *_sht, *_ops, *_probe, *_probe_one, *_console
      Signed-off-by: NSam Ravnborg <sam@ravnborg.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      505d9147