Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Apr 2009 16:52:04 +0000 (09:52 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Apr 2009 16:52:04 +0000 (09:52 -0700)
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: (23 commits)
  parisc: move dereference_function_descriptor to process.c
  parisc: Move kernel Elf_Fdesc define to <asm/elf.h>
  parisc: fix build when ARCH_HAS_KMAP
  parisc: fix "make tar-pkg"
  parisc: drivers: fix warnings
  parisc: select BUG always
  parisc: asm/pdc.h should include asm/page.h
  parisc: led: remove proc_dir_entry::owner
  parisc: fix macro expansion in atomic.h
  parisc: iosapic: fix build breakage
  parisc: oops_enter()/oops_exit() in die()
  parisc: document light weight syscall ABI
  parisc: blink all or loadavg LEDs on oops
  parisc: add ftrace (function and graph tracer) functionality
  parisc: simplify sys_clone()
  parisc: add LATENCYTOP_SUPPORT and CONFIG_STACKTRACE_SUPPORT
  parisc: allow to build with 16k default kernel page size
  parisc: expose 32/64-bit capabilities in cpuinfo
  parisc: use constants instead of numbers in assembly
  parisc: fix usage of 32bit PTE page table entries on 32bit kernels
  ...

1  2 
arch/parisc/Kconfig
arch/parisc/kernel/process.c
arch/parisc/kernel/time.c

diff --combined arch/parisc/Kconfig
@@@ -9,9 -9,13 +9,13 @@@ config PARIS
        def_bool y
        select HAVE_IDE
        select HAVE_OPROFILE
+       select HAVE_FUNCTION_TRACER if 64BIT
+       select HAVE_FUNCTION_GRAPH_TRACER if 64BIT
+       select HAVE_FUNCTION_TRACE_MCOUNT_TEST if 64BIT
        select RTC_CLASS
 -      select RTC_DRV_PARISC
 +      select RTC_DRV_GENERIC
        select INIT_ALL_POSSIBLE
+       select BUG
        help
          The PA-RISC microprocessor is designed by Hewlett-Packard and used
          in many of their workstations & servers (HP9000 700 and 800 series,
@@@ -75,6 -79,9 +79,9 @@@ config GENERIC_HARDIRQ
  config GENERIC_IRQ_PROBE
        def_bool y
  
+ config HAVE_LATENCYTOP_SUPPORT
+         def_bool y
  config IRQ_PER_CPU
        bool
        default y
@@@ -83,6 -90,9 +90,9 @@@
  config PM
        bool
  
+ config STACKTRACE_SUPPORT
+       def_bool y
  config ISA_DMA_API
        bool
  
  #include <linux/stddef.h>
  #include <linux/unistd.h>
  #include <linux/kallsyms.h>
+ #include <linux/uaccess.h>
  
  #include <asm/io.h>
  #include <asm/asm-offsets.h>
  #include <asm/pdc.h>
  #include <asm/pdc_chassis.h>
  #include <asm/pgalloc.h>
- #include <asm/uaccess.h>
  #include <asm/unwind.h>
+ #include <asm/sections.h>
  
  /*
   * The idle thread. There's no useful work to be
@@@ -231,8 -232,8 +232,8 @@@ sys_clone(unsigned long clone_flags, un
           
           However, these last 3 args are only examined
           if the proper flags are set. */
-       int __user *child_tidptr;
-       int __user *parent_tidptr;
+       int __user *parent_tidptr = (int __user *)regs->gr[24];
+       int __user *child_tidptr  = (int __user *)regs->gr[22];
  
        /* usp must be word aligned.  This also prevents users from
         * passing in the value 1 (which is the signal for a special
        if (usp == 0)
          usp = regs->gr[30];
  
-       if (clone_flags & CLONE_PARENT_SETTID)
-         parent_tidptr = (int __user *)regs->gr[24];
-       else
-         parent_tidptr = NULL;
-       
-       if (clone_flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID))
-         child_tidptr = (int __user *)regs->gr[22];
-       else
-         child_tidptr = NULL;
        return do_fork(clone_flags, usp, regs, 0, parent_tidptr, child_tidptr);
  }
  
@@@ -263,7 -254,7 +254,7 @@@ sys_vfork(struct pt_regs *regs
  }
  
  int
 -copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
 +copy_thread(unsigned long clone_flags, unsigned long usp,
            unsigned long unused,       /* in ia64 this is "user_stack_size" */
            struct task_struct * p, struct pt_regs * pregs)
  {
@@@ -400,3 -391,15 +391,15 @@@ get_wchan(struct task_struct *p
        } while (count++ < 16);
        return 0;
  }
+ #ifdef CONFIG_64BIT
+ void *dereference_function_descriptor(void *ptr)
+ {
+       Elf64_Fdesc *desc = ptr;
+       void *p;
+       if (!probe_kernel_address(&desc->addr, p))
+               ptr = p;
+       return ptr;
+ }
+ #endif
@@@ -24,6 -24,7 +24,7 @@@
  #include <linux/profile.h>
  #include <linux/clocksource.h>
  #include <linux/platform_device.h>
+ #include <linux/ftrace.h>
  
  #include <asm/uaccess.h>
  #include <asm/io.h>
@@@ -53,7 -54,7 +54,7 @@@ static unsigned long clocktick __read_m
   * held off for an arbitrarily long period of time by interrupts being
   * disabled, so we may miss one or more ticks.
   */
- irqreturn_t timer_interrupt(int irq, void *dev_id)
+ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id)
  {
        unsigned long now;
        unsigned long next_tick;
@@@ -216,14 -217,17 +217,14 @@@ void __init start_cpu_itimer(void
        per_cpu(cpu_data, cpu).it_value = next_tick;
  }
  
 -struct platform_device rtc_parisc_dev = {
 -      .name = "rtc-parisc",
 +static struct platform_device rtc_generic_dev = {
 +      .name = "rtc-generic",
        .id = -1,
  };
  
  static int __init rtc_init(void)
  {
 -      int ret;
 -
 -      ret = platform_device_register(&rtc_parisc_dev);
 -      if (ret < 0)
 +      if (platform_device_register(&rtc_generic_dev) < 0)
                printk(KERN_ERR "unable to register rtc device...\n");
  
        /* not necessarily an error */