Skip to content
  1. Dec 13, 2011
    • Will Deacon's avatar
      ARM: stop: execute platform callback from cpu_stop code · 02b73e2e
      Will Deacon authored
      
      
      Sending IPI_CPU_STOP to a CPU causes it to execute a busy cpu_relax
      loop forever. This makes it impossible to kexec successfully on an SMP
      system since the secondary CPUs do not reset.
      
      This patch adds a callback to platform_cpu_kill, defined when
      CONFIG_HOTPLUG_CPU=y, from the ipi_cpu_stop handling code. This function
      currently just returns 1 on all platforms that define it but allows them
      to do something more sophisticated in the future.
      
      Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
      02b73e2e
    • Will Deacon's avatar
      ARM: reset: implement soft_restart for jumping to a physical address · 290130a1
      Will Deacon authored
      
      
      Tools such as kexec and CPU hotplug require a way to reset the processor
      and branch to some code in physical space. This requires various bits of
      jiggery pokery with the caches and MMU which, when it goes wrong, tends
      to lock up the system.
      
      This patch fleshes out the soft_restart implementation so that it
      branches to the reset code using the identity mapping. This requires us
      to change to a temporary stack, held within the kernel image as a static
      array, to avoid conflicting with the new view of memory.
      
      Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
      290130a1
    • Will Deacon's avatar
      ARM: lib: add call_with_stack function for safely changing stack · 2d81f1fe
      Will Deacon authored
      
      
      When disabling the MMU, it is necessary to take out a 1:1 identity map
      of the reset code so that it can safely be executed with and without
      the MMU active. To avoid the situation where the physical address of the
      reset code aliases with the virtual address of the active stack (which
      cannot be included in the 1:1 mapping), it is desirable to change to a
      new stack at a location which is less likely to alias.
      
      This code adds a new lib function, call_with_stack:
      
      	void call_with_stack(void (*fn)(void *), void *arg, void *sp);
      
      which changes the stack to point at the sp parameter, before invoking
      fn(arg) with the new stack selected.
      
      Reviewed-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
      Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
      Signed-off-by: default avatarDave Martin <dave.martin@linaro.org>
      Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
      2d81f1fe
  2. Dec 11, 2011
  3. Dec 09, 2011
  4. Dec 08, 2011
  5. Dec 07, 2011
  6. Dec 06, 2011
  7. Dec 03, 2011
  8. Dec 02, 2011