OSDN Git Service

Merge tag 'v3.5' into h8300
authorYoshinori Sato <ysato@users.sourceforge.jp>
Mon, 8 Jul 2013 07:32:43 +0000 (16:32 +0900)
committerYoshinori Sato <ysato@users.sourceforge.jp>
Mon, 8 Jul 2013 07:32:43 +0000 (16:32 +0900)
Linux 3.5

Conflicts:
arch/h8300/include/asm/pgtable.h
arch/h8300/include/asm/posix_types.h
arch/h8300/kernel/setup.c

1  2 
arch/h8300/include/asm/processor.h
arch/h8300/include/asm/uaccess.h
arch/h8300/include/asm/unistd.h
arch/h8300/kernel/Makefile
arch/h8300/kernel/setup.c
arch/h8300/kernel/syscalls.S
arch/h8300/kernel/time.c
arch/h8300/kernel/vmlinux.lds.S
arch/h8300/lib/memset.S
arch/h8300/mm/init.c

Simple merge
@@@ -20,7 -20,7 +20,7 @@@ static inline int __access_ok(unsigned 
  #define       RANGE_CHECK_OK(addr, size, lower, upper) \
        (((addr) >= (lower)) && (((addr) + (size)) < (upper)))
  
--      extern unsigned long _ramend;
++      extern unsigned long  _ramend;
        return(RANGE_CHECK_OK(addr, size, 0L, (unsigned long)&_ramend));
  }
  
@@@ -90,24 -90,16 +90,23 @@@ extern int __put_user_bad(void)
  
  #define get_user(x, ptr)                                      \
  ({                                                            \
 +    unsigned long long __gu_val;                              \
      int __gu_err = 0;                                         \
 -    typeof(*(ptr)) __gu_val = *ptr;                           \
      switch (sizeof(*(ptr))) {                                 \
      case 1:                                                   \
 +            __gu_val = *((u8 *)(ptr));                        \
 +            break;                                            \
      case 2:                                                   \
 +            __gu_val = *((u16 *)ptr);                         \
 +            break;                                            \
      case 4:                                                   \
 +            __gu_val = *((u32 *)ptr);                         \
 +            break;                                            \
      case 8:                                                   \
 -      break;                                                  \
 +            memcpy((void *)&__gu_val, ptr, sizeof(*(ptr)));   \
 +            break;                                            \
      default:                                                  \
        __gu_err = __get_user_bad();                            \
-       __gu_val = 0;                                           \
        break;                                                  \
      }                                                         \
      (x) = __gu_val;                                           \
@@@ -129,9 -121,43 +128,10 @@@ extern int __get_user_bad(void)
  
  #define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
  
- #define __clear_user(addr, size) memset(addr, 0, size)
- #define clear_user(addr, size) __clear_user(addr, size)
 -/*
 - * Copy a null terminated string from userspace.
 - */
 -
 -static inline long
 -strncpy_from_user(char *dst, const char *src, long count)
 -{
 -      char *tmp;
 -      strncpy(dst, src, count);
 -      for (tmp = dst; *tmp && count > 0; tmp++, count--)
 -              ;
 -      return(tmp - dst); /* DAVIDM should we count a NUL ?  check getname */
 -}
 -
 -/*
 - * Return the size of a string (including the ending 0)
 - *
 - * Return 0 on exception, a value greater than N if too long
 - */
 -static inline long strnlen_user(const char *src, long n)
 -{
 -      return(strlen(src) + 1); /* DAVIDM make safer */
 -}
 -
 -#define strlen_user(str) strnlen_user(str, 32767)
 -
 -/*
 - * Zero Userspace
 - */
 -
 -static inline unsigned long
 -clear_user(void *to, unsigned long n)
 -{
 -      memset(to, 0, n);
 -      return 0;
 -}
++unsigned long clear_user(void __user *addr, unsigned long size);
 +#define strncpy_from_user(s, d, n) strncpy(s, d, n)
 +#define strnlen_user(s, n) strnlen(s, n)
  
+ #define __clear_user  clear_user
  #endif /* _H8300_UACCESS_H */
Simple merge
Simple merge
@@@ -54,11 -55,41 +55,10 @@@ unsigned long memory_end
  
  char __initdata command_line[COMMAND_LINE_SIZE];
  
- extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end;
 -extern int _ramstart, _ramend;
 +extern unsigned long _ramstart, _ramend;
  extern char _target_name[];
 -extern void h8300_gpio_init(void);
 -
 -#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) \
 -    && defined(CONFIG_GDB_MAGICPRINT)
 -/* printk with gdb service */
 -static void gdb_console_output(struct console *c, const char *msg, unsigned len)
 -{
 -      for (; len > 0; len--) {
 -              asm("mov.w %0,r2\n\t"
 -                    "jsr @0xc4"::"r"(*msg++):"er2");
 -      }
 -}
 -
 -/*
 - *    Setup initial baud/bits/parity. We do two things here:
 - *    - construct a cflag setting for the first rs_open()
 - *    - initialize the serial port
 - *    Return non-zero if we didn't find a serial port.
 - */
 -static int __init gdb_console_setup(struct console *co, char *options)
 -{
 -      return 0;
 -}
 -
 -static const struct console gdb_console = {
 -      .name           = "gdb_con",
 -      .write          = gdb_console_output,
 -      .device         = NULL,
 -      .setup          = gdb_console_setup,
 -      .flags          = CON_PRINTBUFFER,
 -      .index          = -1,
 -};
 -#endif
 +extern char command_start[];
 +void h8300_early_devices_register(void);
  
  void __init setup_arch(char **cmdline_p)
  {
            memory_end = CONFIG_BLKDEV_RESERVE_ADDRESS; 
  #endif
  
-       init_mm.start_code = (unsigned long) &_stext;
-       init_mm.end_code = (unsigned long) &_etext;
-       init_mm.end_data = (unsigned long) &_edata;
+       init_mm.start_code = (unsigned long) _stext;
+       init_mm.end_code = (unsigned long) _etext;
+       init_mm.end_data = (unsigned long) _edata;
        init_mm.brk = (unsigned long) 0; 
  
 -#if (defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)) && defined(CONFIG_GDB_MAGICPRINT)
 -      register_console((struct console *)&gdb_console);
 -#endif
 -
        printk(KERN_INFO "\r\n\nuClinux " CPU "\n");
        printk(KERN_INFO "Target Hardware: %s\n",_target_name);
        printk(KERN_INFO "Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n");
Simple merge
@@@ -27,8 -27,8 +27,9 @@@
  #include <linux/profile.h>
  
  #include <asm/io.h>
+ #include <asm/irq_regs.h>
  #include <asm/timer.h>
 +#include <asm/irq_regs.h>
  
  #define       TICK_SIZE (tick_nsec / 1000)
  
@@@ -127,6 -132,6 +127,7 @@@ SECTION
          {
        . = ALIGN(0x4) ;
        __sbss = . ;
++      ___bss_start = .;
                *(.bss*)
        . = ALIGN(0x4) ;
                *(COMMON)
@@@ -11,6 -11,6 +11,7 @@@
        .text
  
  .global       SYMBOL_NAME(memset)
++.global       SYMBOL_NAME(clear_user)
  
  ;;void *memset(*ptr, int c, size_t count)
  ;; ptr = er0
@@@ -59,3 -59,3 +60,8 @@@ SYMBOL_NAME_LABEL(memset
        bne     5b
  6:
        rts
++
++SYMBOL_NAME_LABEL(clear_user)
++      mov.l   r1, r2
++      sub.l   er1, er1
++      bra     SYMBOL_NAME(memset)
@@@ -142,9 -142,9 +142,9 @@@ void __init mem_init(void
        /* this will put all memory onto the freelists */
        totalram_pages = free_all_bootmem();
  
-       codek = (&_etext - &_stext) >> 10;
-       datak = (&_ebss - &_sdata) >> 10;
-       initk = (&__init_begin - &__init_end) >> 10;
+       codek = (_etext - _stext) >> 10;
 -      datak = (__bss_stop - _sdata) >> 10;
++      datak = (__bss_start - _sdata) >> 10;
+       initk = (__init_begin - __init_end) >> 10;
  
        tmp = nr_free_pages() << PAGE_SHIFT;
        printk(KERN_INFO "Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n",