1. 28 11月, 2013 1 次提交
  2. 25 11月, 2013 2 次提交
    • V
      ARC: Add guard macro to uapi/asm/unistd.h · 97bc386f
      Vineet Gupta 提交于
      Chen originally proposed this as "right thing to do" however I
      actually ran into this when building perf tools. Some of the utils
      include unistd.h as well as linux/unistd.h. Since -I includes kernel
      headers too, we end up including the ARC unistd.h twice, leading to
      redefinition nwarnings.
      
      ------------------>8-------------------
          CC bench/sched-pipe.o
      In file included from ~/kernel/arch/arc/include/uapi/asm/unistd.h:21:0,
                       from ~/kernel/include/uapi/linux/unistd.h:7,
                       from bench/sched-pipe.c:24:
      ~/kernel/include/uapi/asm-generic/unistd.h:889:0: error: "__NR_fcntl64"
      redefined [-Werror]
       #define __NR_fcntl64 __NR3264_fcntl
       ^
      In file included from
      ~/gnu/arc-linux-uclibc/sys-include/sys/syscall.h:24:0,
                       from bench/../perf.h:112,
                       from bench/sched-pipe.c:13:
      ~/gnu/arc-linux-uclibc/include/bits/sysnum.h:761:0: note: this is the
      location of the previous definition
      ------------------>8-------------------
      
      Verified that make headers_install works fine with this.
      Suggested-by: NChen Gang <gang.chen.5i5j@gmail.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      Cc: David Howells <dhowells@redhat.com>
      97bc386f
    • V
      ARC: extable: Enable sorting at build time · f06d19e4
      Vineet Gupta 提交于
      Avoids wasting cycles at boot specially on slower simulators
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      Cc: Michal Marek <mmarek@suse.cz>
      Cc: Francois Bedard <fbedard@synopsys.com>
      Cc: linux-kernel@vger.kernel.org
      Acked-by: NDavid Daney <david.daney@cavium.com>
      f06d19e4
  3. 15 11月, 2013 4 次提交
  4. 14 11月, 2013 1 次提交
  5. 12 11月, 2013 1 次提交
  6. 11 11月, 2013 1 次提交
  7. 07 11月, 2013 3 次提交
  8. 06 11月, 2013 22 次提交
    • V
      ARC: [SMP] Fix build failures for large NR_CPUS · 57e26e57
      Vineet Gupta 提交于
      ST.as only takes S9 (255) for offset. This was going out of range when
      accessing a task_struct field with 4k NR_CPUS (due to 128b of coumaks
      itself in there).
      
      Workaround by using an intermediate register to do the address scaling.
      
      There is some duplication of fix for ctx_sw.c and ctx_sw_asm.S however
      given that C version will go away soon I'm not bothering to factor out
      the common code.
      Reported-by: NNoam Camus <noamc@ezchip.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      57e26e57
    • N
      ARC: [SMP] enlarge possible NR_CPUS · 3aa4f80e
      Noam Camus 提交于
      Signed-off-by: NNoam Camus <noamc@ezchip.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      3aa4f80e
    • V
      ARC: [SMP] TLB flush · 5ea72a90
      Vineet Gupta 提交于
      - Add mm_cpumask setting (aggregating only, unlike some other arches)
        used to restrict the TLB flush cross-calling
      
      - cross-calling versions of TLB flush routines (thanks to Noam)
      Signed-off-by: NNoam Camus <noamc@ezchip.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      5ea72a90
    • V
      ARC: [SMP] ASID allocation · 63eca94c
      Vineet Gupta 提交于
      -Track a Per CPU ASID counter
      -mm-per-cpu ASID (multiple threads, or mm migrated around)
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      63eca94c
    • C
      arc: export symbol for pm_power_off in reset.c · b6fe8e7c
      Chen Gang 提交于
      Need export symbol for it, or can not pass compiling, the related error
      with allmodconfig:
      
          MODPOST 2994 modules
        ERROR: "pm_power_off" [drivers/mfd/retu-mfd.ko] undefined!
        ERROR: "pm_power_off" [drivers/char/ipmi/ipmi_poweroff.ko] undefined!
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      b6fe8e7c
    • C
      arc: export symbol for save_stack_trace() in stacktrace.c · 8f146d02
      Chen Gang 提交于
      Need export its symbol just like other architectures done, or can not
      pass compiling with allmodconfig, the related error:
      
          MODPOST 2994 modules
        ERROR: "save_stack_trace" [kernel/backtracetest.ko] undefined!
        ERROR: "save_stack_trace" [drivers/md/persistent-data/dm-persistent-data.ko] undefined!
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      8f146d02
    • C
      arc: remove '__init' for get_hw_config_num_irq() · 4782f7f9
      Chen Gang 提交于
      get_hw_config_num_irq() may be called by normal iss_model_init_smp()
      which is a function pointer for 'init_smp' which may be called by
      first_lines_of_secondary() which also need be normal too.
      
      The related warning (with allmodconfig):
      
          MODPOST vmlinux.o
        WARNING: vmlinux.o(.text+0x5814): Section mismatch in reference from the function iss_model_init_smp() to the function .init.text:get_hw_config_num_irq()
        The function iss_model_init_smp() references
        the function __init get_hw_config_num_irq().
        This is often because iss_model_init_smp lacks a __init
        annotation or the annotation of get_hw_config_num_irq is wrong.
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      4782f7f9
    • C
      arc: remove '__init' for first_lines_of_secondary() · 8f5d221b
      Chen Gang 提交于
      first_lines_of_secondary() is a '__init' function, but it may be called
      by __cpu_up() by _cpu_up() by cpu_up() which is a normal export symbol
      function. So recommend to remove '__init'.
      
      The related warning (with allmodconfig):
      
          MODPOST vmlinux.o
        WARNING: vmlinux.o(.text+0x315c): Section mismatch in reference from the function __cpu_up() to the function .init.text:first_lines_of_secondary()
        The function __cpu_up() references
        the function __init first_lines_of_secondary().
        This is often because __cpu_up lacks a __init
        annotation or the annotation of first_lines_of_secondary is wrong.
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      8f5d221b
    • C
      arc: remove '__init' for setup_processor() and arc_init_IRQ() · ef3a661a
      Chen Gang 提交于
      They haven't '__init' in definition, but has '__init' in declaration.
      And normal function start_kernel_secondary() may call setup_processor()
      which will call arc_init_IRQ().
      
      So need remove '__init' for both of them. The related warning (with
      allmodconfig):
      
          MODPOST vmlinux.o
        WARNING: vmlinux.o(.text+0x3084): Section mismatch in reference from the function start_kernel_secondary() to the function .init.text:setup_processor()
        The function start_kernel_secondary() references
        the function __init setup_processor().
        This is often because start_kernel_secondary lacks a __init
        annotation or the annotation of setup_processor is wrong.
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      ef3a661a
    • C
      arc: kgdb: add default implementation for kgdb_roundup_cpus() · 3d01c1ce
      Chen Gang 提交于
      arc supports kgdb, but need update -- add function kgdb_roundup_cpus(),
      or can not pass compiling. At present, add the simple generic one just
      like other architectures(e.g. tile, mips ...).
      
      The related error (with allmodconfig):
      
        kernel/built-in.o: In function `kgdb_cpu_enter':
        kernel/debug/debug_core.c:580: undefined reference to `kgdb_roundup_cpus'
      Signed-off-by: NChen Gang <gang.chen@asianux.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      3d01c1ce
    • V
      ARC: Fix bogus gcc warning and micro-optimise TLB iteration loop · 0a4c40a3
      Vineet Gupta 提交于
      ```--------------->8----------------------
      arch/arc/mm/tlb.c: In function ‘do_tlb_overlap_fault’:
      arch/arc/mm/tlb.c:688:13: warning: array subscript is above array bounds
      [-Warray-bounds]
               (pd0[n] & PAGE_MASK)) {
                   ^
      ```
      
      --------------->8----------------------
      
      While at it, remove the usless last iteration of outer loop when reading
      a TLB SET for duplicate entries.
      Suggested-by: NMischa Jonker <mjonker@synopsys.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      0a4c40a3
    • V
      ARC: Add support for irqflags tracing and lockdep · 0dafafc3
      Vineet Gupta 提交于
      Lockdep required a small fix to stacktrace API which was incorrectly
      unwindign out of __switch_to for the current call frame.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      0dafafc3
    • V
      ARC: Reset the value of Interrupt Priority Register · 54c8bff1
      Vineet Gupta 提交于
      In case bootloader has changed the priority of one/more IRQ lines
      Reported-by: NNoam Camus <noamc@ezchip.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      54c8bff1
    • V
      ARC: Reduce #ifdef'ery for unaligned access emulation · 07ba69a4
      Vineet Gupta 提交于
      Emulation not enabled is treated as if the fixup failed, so no need for
      special #ifdef checks.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      07ba69a4
    • V
      ARC: Change calling convention of do_page_fault() · 21a63b56
      Vineet Gupta 提交于
      switch the args (address, pt_regs) to match with all the other "C"
      exception handlers.
      
      This removes the awkwardness in EV_ProtV for page fault vs. unaligned
      access.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      21a63b56
    • V
      ARC: cacheflush optim - PTAG can be loop invariant if V-P is const · d4599baf
      Vineet Gupta 提交于
      Line op needs vaddr (indexing) and paddr (tag match). For page sized
      flushes (V-P const), each line op will need a different index, but the
      tag bits wil remain constant, hence paddr can be setup once outside the
      loop.
      
      This improves select LMBench numbers for Aliasing dcache where we have
      more "preventive" cache flushing.
      
      Processor, Processes - times in microseconds - smaller is better
      ------------------------------------------------------------------------------
      Host                 OS  Mhz null null      open slct sig  sig  fork exec sh
                                   call  I/O stat clos TCP  inst hndl proc proc proc
      --------- ------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
      3.11-rc7- Linux 3.11.0-   80 4.66 8.88 69.7 112. 268. 8.60 28.0 3489 13.K 27.K	# Non alias ARC700
      3.11-rc7- Linux 3.11.0-   80 4.64 8.51 68.6 98.5 271. 8.58 28.1 4160 15.K 32.K	# Aliasing
      3.11-rc7- Linux 3.11.0-   80 4.64 8.51 69.8 99.4 270. 8.73 27.5 3880 15.K 31.K	# PTAG loop Inv
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      d4599baf
    • V
      ARC: cacheflush refactor #3: Unify the {d,i}cache flush leaf helpers · bd12976c
      Vineet Gupta 提交于
      With Line length being constant now, we can fold the 2 helpers into 1.
      This allows applying any optimizations (forthcoming) to single place.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      bd12976c
    • V
      ARC: cacheflush refactor #2: I and D caches lines to have same size · 63d2dfdb
      Vineet Gupta 提交于
      Having them be different seems an obscure configuration.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      63d2dfdb
    • V
      ARC: cacheflush refactor #1: push aux reg ascertaining into leaf routine · f3e4de32
      Vineet Gupta 提交于
      ARC dcache supports 3 ops - Inv, Flush, Flush-n-Inv.
      The programming model however provides 2 commands FLUSH, INV.
      INV will either discard or flush-n-discard (based on DT_CTRL bit)
      
      The leaf helper __dc_line_loop() used to take the AUX register
      (corresponding to the 2 commands). Now we push that to within the
      helper, paving way for code consolidations to follow.
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      f3e4de32
    • V
      ARC: use __weak instead of __attribute__((weak)) · 064a6269
      Vineet Gupta 提交于
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      064a6269
    • V
      ARC: Annotate some functions as static · 8e457d6a
      Vineet Gupta 提交于
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      8e457d6a
    • C
      arc: Replace __get_cpu_var uses · 6855e95c
      Christoph Lameter 提交于
      __get_cpu_var() is used for multiple purposes in the kernel source. One of them is
      address calculation via the form &__get_cpu_var(x). This calculates the address for
      the instance of the percpu variable of the current processor based on an offset.
      
      Other use cases are for storing and retrieving data from the current processors percpu area.
      __get_cpu_var() can be used as an lvalue when writing data or on the right side of an assignment.
      
      __get_cpu_var() is defined as :
      
      #define __get_cpu_var(var) (*this_cpu_ptr(&(var)))
      
      __get_cpu_var() always only does an address determination. However, store and retrieve operations
      could use a segment prefix (or global register on other platforms) to avoid the address calculation.
      
      this_cpu_write() and this_cpu_read() can directly take an offset into a percpu area and use
      optimized assembly code to read and write per cpu variables.
      
      This patch converts __get_cpu_var into either an explicit address calculation using this_cpu_ptr()
      or into a use of this_cpu operations that use the offset. Thereby address calcualtions are avoided
      and less registers are used when code is generated.
      
      At the end of the patchset all uses of __get_cpu_var have been removed so the macro is removed too.
      
      The patchset includes passes over all arches as well. Once these operations are used throughout then
      specialized macros can be defined in non -x86 arches as well in order to optimize per cpu access by
      f.e. using a global register that may be set to the per cpu base.
      
      Transformations done to __get_cpu_var()
      
      1. Determine the address of the percpu instance of the current processor.
      
      	DEFINE_PER_CPU(int, y);
      	int *x = &__get_cpu_var(y);
      
          Converts to
      
      	int *x = this_cpu_ptr(&y);
      
      2. Same as #1 but this time an array structure is involved.
      
      	DEFINE_PER_CPU(int, y[20]);
      	int *x = __get_cpu_var(y);
      
          Converts to
      
      	int *x = this_cpu_ptr(y);
      
      3. Retrieve the content of the current processors instance of a per cpu variable.
      
      	DEFINE_PER_CPU(int, u);
      	int x = __get_cpu_var(y)
      
         Converts to
      
      	int x = __this_cpu_read(y);
      
      4. Retrieve the content of a percpu struct
      
      	DEFINE_PER_CPU(struct mystruct, y);
      	struct mystruct x = __get_cpu_var(y);
      
         Converts to
      
      	memcpy(this_cpu_ptr(&x), y, sizeof(x));
      
      5. Assignment to a per cpu variable
      
      	DEFINE_PER_CPU(int, y)
      	__get_cpu_var(y) = x;
      
         Converts to
      
      	this_cpu_write(y, x);
      
      6. Increment/Decrement etc of a per cpu variable
      
      	DEFINE_PER_CPU(int, y);
      	__get_cpu_var(y)++
      
         Converts to
      
      	this_cpu_inc(y)
      Acked-by: NVineet Gupta <vgupta@synopsys.com>
      Signed-off-by: NChristoph Lameter <cl@linux.com>
      6855e95c
  9. 03 11月, 2013 1 次提交
    • V
      ARC: Incorrect mm reference used in vmalloc fault handler · 9c41f4ee
      Vineet Gupta 提交于
      A vmalloc fault needs to sync up PGD/PTE entry from init_mm to current
      task's "active_mm".  ARC vmalloc fault handler however was using mm.
      
      A vmalloc fault for non user task context (actually pre-userland, from
      init thread's open for /dev/console) caused the handler to deref NULL mm
      (for mm->pgd)
      
      The reasons it worked so far is amazing:
      
      1. By default (!SMP), vmalloc fault handler uses a cached value of PGD.
         In SMP that MMU register is repurposed hence need for mm pointer deref.
      
      2. In pre-3.12 SMP kernel, the problem triggering vmalloc didn't exist in
         pre-userland code path - it was introduced with commit 20bafb3d
         "n_tty: Move buffers into n_tty_data"
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      Cc: Gilad Ben-Yossef <gilad@benyossef.com>
      Cc: Noam Camus <noamc@ezchip.com>
      Cc: stable@vger.kernel.org    #3.10 and 3.11
      Cc: Peter Hurley <peter@hurleysoftware.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9c41f4ee
  10. 14 10月, 2013 1 次提交
  11. 12 10月, 2013 1 次提交
    • V
      ARC: Ignore ptrace SETREGSET request for synthetic register "stop_pc" · 5b242828
      Vineet Gupta 提交于
      ARCompact TRAP_S insn used for breakpoints, commits before exception is
      taken (updating architectural PC). So ptregs->ret contains next-PC and
      not the breakpoint PC itself. This is different from other restartable
      exceptions such as TLB Miss where ptregs->ret has exact faulting PC.
      gdb needs to know exact-PC hence ARC ptrace GETREGSET provides for
      @stop_pc which returns ptregs->ret vs. EFA depending on the
      situation.
      
      However, writing stop_pc (SETREGSET request), which updates ptregs->ret
      doesn't makes sense stop_pc doesn't always correspond to that reg as
      described above.
      
      This was not an issue so far since user_regs->ret / user_regs->stop_pc
      had same value and both writing to ptregs->ret was OK, needless, but NOT
      broken, hence not observed.
      
      With gdb "jump", they diverge, and user_regs->ret updating ptregs is
      overwritten immediately with stop_pc, which this patch fixes.
      Reported-by: NAnton Kolesov <akolesov@synopsys.com>
      Signed-off-by: NVineet Gupta <vgupta@synopsys.com>
      5b242828
  12. 10 10月, 2013 2 次提交