OSDN Git Service

Merge branch 'for-2.6.23' into merge
authorPaul Mackerras <paulus@samba.org>
Wed, 11 Jul 2007 03:28:26 +0000 (13:28 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 11 Jul 2007 03:28:26 +0000 (13:28 +1000)
1  2 
Documentation/feature-removal-schedule.txt
arch/powerpc/configs/holly_defconfig
arch/powerpc/configs/ps3_defconfig
arch/powerpc/kernel/signal_64.c
arch/powerpc/mm/fault.c
include/asm-powerpc/pgtable-ppc32.h
include/asm-powerpc/pgtable-ppc64.h

@@@ -49,6 -49,16 +49,6 @@@ Who: Adrian Bunk <bunk@stusta.de
  
  ---------------------------
  
 -What: raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
 -When: June 2007
 -Why:  Deprecated in favour of the more efficient and robust rawiso interface.
 -      Affected are applications which use the deprecated part of libraw1394
 -      (raw1394_iso_write, raw1394_start_iso_write, raw1394_start_iso_rcv,
 -      raw1394_stop_iso_rcv) or bypass libraw1394.
 -Who:  Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>
 -
 ----------------------------
 -
  What: old NCR53C9x driver
  When: October 2007
  Why:  Replaced by the much better esp_scsi driver.  Actual low-level
@@@ -248,6 -258,14 +248,6 @@@ Who:      Len Brown <len.brown@intel.com
  
  ---------------------------
  
 -What:   sk98lin network driver
 -When:   July 2007
 -Why:    In kernel tree version of driver is unmaintained. Sk98lin driver
 -      replaced by the skge driver. 
 -Who:    Stephen Hemminger <shemminger@osdl.org>
 -
 ----------------------------
 -
  What: Compaq touchscreen device emulation
  When: Oct 2007
  Files:        drivers/input/tsdev.c
@@@ -330,3 -348,15 +330,15 @@@ Who:  Tejun Heo <htejun@gmail.com
  
  ---------------------------
  
+ What: The arch/ppc and include/asm-ppc directories
+ When: Jun 2008
+ Why:  The arch/powerpc tree is the merged architecture for ppc32 and ppc64
+       platforms.  Currently there are efforts underway to port the remaining
+       arch/ppc platforms to the merged tree.  New submissions to the arch/ppc
+       tree have been frozen with the 2.6.22 kernel release and that tree will
+       remain in bug-fix only mode until its scheduled removal.  Platforms
+       that are not ported by June 2008 will be removed due to the lack of an
+       interested maintainer.
+ Who:  linuxppc-dev@ozlabs.org
+ ---------------------------
@@@ -1,7 -1,7 +1,7 @@@
  #
  # Automatically generated make config: don't edit
 -# Linux kernel version: 2.6.22-rc2
 -# Thu May 31 11:25:44 2007
 +# Linux kernel version: 2.6.22-rc6
 +# Tue Jun 26 13:22:36 2007
  #
  # CONFIG_PPC64 is not set
  CONFIG_PPC32=y
@@@ -190,10 -190,12 +190,12 @@@ CONFIG_SPLIT_PTLOCK_CPUS=
  # CONFIG_RESOURCES_64BIT is not set
  CONFIG_ZONE_DMA_FLAG=1
  CONFIG_PROC_DEVICETREE=y
- # CONFIG_CMDLINE_BOOL is not set
+ CONFIG_CMDLINE_BOOL=y
+ CONFIG_CMDLINE="console=ttyS0,115200"
  # CONFIG_PM is not set
  # CONFIG_SECCOMP is not set
- # CONFIG_WANT_DEVICE_TREE is not set
+ CONFIG_WANT_DEVICE_TREE=y
+ CONFIG_DEVICE_TREE="holly.dts"
  CONFIG_ISA_DMA_API=y
  
  #
@@@ -277,8 -279,20 +279,8 @@@ CONFIG_DEFAULT_TCP_CONG="cubic
  # CONFIG_INET6_TUNNEL is not set
  # CONFIG_NETWORK_SECMARK is not set
  # CONFIG_NETFILTER is not set
 -
 -#
 -# DCCP Configuration (EXPERIMENTAL)
 -#
  # CONFIG_IP_DCCP is not set
 -
 -#
 -# SCTP Configuration (EXPERIMENTAL)
 -#
  # CONFIG_IP_SCTP is not set
 -
 -#
 -# TIPC Configuration (EXPERIMENTAL)
 -#
  # CONFIG_TIPC is not set
  # CONFIG_ATM is not set
  # CONFIG_BRIDGE is not set
@@@ -448,6 -462,7 +450,6 @@@ CONFIG_SCSI_WAIT_SCAN=
  # CONFIG_SCSI_DC390T is not set
  # CONFIG_SCSI_NSP32 is not set
  # CONFIG_SCSI_DEBUG is not set
 -# CONFIG_SCSI_ESP_CORE is not set
  # CONFIG_SCSI_SRP is not set
  CONFIG_ATA=y
  # CONFIG_ATA_NONSTANDARD is not set
@@@ -538,6 -553,10 +540,6 @@@ CONFIG_NETDEVICES=
  # CONFIG_BONDING is not set
  # CONFIG_EQUALIZER is not set
  # CONFIG_TUN is not set
 -
 -#
 -# ARCnet devices
 -#
  # CONFIG_ARCNET is not set
  CONFIG_PHYLIB=y
  
@@@ -584,7 -603,6 +586,7 @@@ CONFIG_NETDEV_1000=
  # CONFIG_SKGE is not set
  # CONFIG_SKY2 is not set
  # CONFIG_SK98LIN is not set
 +# CONFIG_VIA_VELOCITY is not set
  # CONFIG_TIGON3 is not set
  # CONFIG_BNX2 is not set
  CONFIG_TSI108_ETH=y
@@@ -598,6 -616,10 +600,6 @@@ CONFIG_NETDEV_10000=
  # CONFIG_MYRI10GE is not set
  # CONFIG_NETXEN_NIC is not set
  # CONFIG_MLX4_CORE is not set
 -
 -#
 -# Token Ring devices
 -#
  # CONFIG_TR is not set
  
  #
  #
  CONFIG_INPUT=y
  # CONFIG_INPUT_FF_MEMLESS is not set
 +# CONFIG_INPUT_POLLDEV is not set
  
  #
  # Userland interfaces
@@@ -743,7 -764,7 +745,7 @@@ CONFIG_HWMON=
  #
  # CONFIG_VIDEO_DEV is not set
  # CONFIG_DVB_CORE is not set
 -CONFIG_DAB=y
 +# CONFIG_DAB is not set
  
  #
  # Graphics support
@@@ -954,6 -975,7 +956,6 @@@ CONFIG_MSDOS_PARTITION=
  #
  # CONFIG_DLM is not set
  # CONFIG_UCC_SLOW is not set
 -# CONFIG_UCC_FAST is not set
  
  #
  # Library routines
@@@ -1,7 -1,7 +1,7 @@@
  #
  # Automatically generated make config: don't edit
 -# Linux kernel version: 2.6.22-rc4
 -# Thu Jun 14 19:52:01 2007
 +# Linux kernel version: 2.6.22-rc6
 +# Tue Jun 26 14:15:19 2007
  #
  CONFIG_PPC64=y
  CONFIG_64BIT=y
@@@ -156,7 -156,11 +156,11 @@@ CONFIG_PS3_HTAB_SIZE=2
  CONFIG_PS3_USE_LPAR_ADDR=y
  CONFIG_PS3_VUART=y
  CONFIG_PS3_PS3AV=y
- CONFIG_PS3_SYS_MANAGER=y
+ CONFIG_PS3_SYS_MANAGER=m
+ CONFIG_PS3_STORAGE=y
+ CONFIG_PS3_DISK=y
+ CONFIG_PS3_ROM=y
+ CONFIG_PS3_FLASH=y
  CONFIG_PPC_CELL=y
  # CONFIG_PPC_CELL_NATIVE is not set
  # CONFIG_PPC_IBM_CELL_BLADE is not set
@@@ -335,7 -339,7 +339,7 @@@ CONFIG_BT=
  CONFIG_BT_L2CAP=m
  CONFIG_BT_SCO=m
  CONFIG_BT_RFCOMM=m
- # CONFIG_BT_RFCOMM_TTY is not set
+ CONFIG_BT_RFCOMM_TTY=y
  # CONFIG_BT_BNEP is not set
  CONFIG_BT_HIDP=m
  
  #
  CONFIG_BT_HCIUSB=m
  CONFIG_BT_HCIUSB_SCO=y
- # CONFIG_BT_HCIUART is not set
+ CONFIG_BT_HCIUART=m
+ CONFIG_BT_HCIUART_H4=y
+ CONFIG_BT_HCIUART_BCSP=y
  # CONFIG_BT_HCIBCM203X is not set
  # CONFIG_BT_HCIBPA10X is not set
  # CONFIG_BT_HCIBFUSB is not set
@@@ -435,7 -441,7 +441,7 @@@ CONFIG_CHR_DEV_SG=
  #
  # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
  #
- # CONFIG_SCSI_MULTI_LUN is not set
+ CONFIG_SCSI_MULTI_LUN=y
  # CONFIG_SCSI_CONSTANTS is not set
  # CONFIG_SCSI_LOGGING is not set
  # CONFIG_SCSI_SCAN_ASYNC is not set
@@@ -478,7 -484,8 +484,8 @@@ CONFIG_NETDEVICES=
  # CONFIG_NET_ETHERNET is not set
  CONFIG_MII=m
  CONFIG_NETDEV_1000=y
 -# CONFIG_NETDEV_10000 is not set
 +CONFIG_NETDEV_10000=y
+ CONFIG_GELIC_NET=y
  
  #
  # Wireless LAN
@@@ -546,7 -553,27 +553,27 @@@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=76
  #
  # CONFIG_INPUT_KEYBOARD is not set
  # CONFIG_INPUT_MOUSE is not set
- # CONFIG_INPUT_JOYSTICK is not set
+ CONFIG_INPUT_JOYSTICK=y
+ # CONFIG_JOYSTICK_ANALOG is not set
+ # CONFIG_JOYSTICK_A3D is not set
+ # CONFIG_JOYSTICK_ADI is not set
+ # CONFIG_JOYSTICK_COBRA is not set
+ # CONFIG_JOYSTICK_GF2K is not set
+ # CONFIG_JOYSTICK_GRIP is not set
+ # CONFIG_JOYSTICK_GRIP_MP is not set
+ # CONFIG_JOYSTICK_GUILLEMOT is not set
+ # CONFIG_JOYSTICK_INTERACT is not set
+ # CONFIG_JOYSTICK_SIDEWINDER is not set
+ # CONFIG_JOYSTICK_TMDC is not set
+ # CONFIG_JOYSTICK_IFORCE is not set
+ # CONFIG_JOYSTICK_WARRIOR is not set
+ # CONFIG_JOYSTICK_MAGELLAN is not set
+ # CONFIG_JOYSTICK_SPACEORB is not set
+ # CONFIG_JOYSTICK_SPACEBALL is not set
+ # CONFIG_JOYSTICK_STINGER is not set
+ # CONFIG_JOYSTICK_TWIDJOY is not set
+ # CONFIG_JOYSTICK_JOYDUMP is not set
+ # CONFIG_JOYSTICK_XPAD is not set
  # CONFIG_INPUT_TABLET is not set
  # CONFIG_INPUT_TOUCHSCREEN is not set
  # CONFIG_INPUT_MISC is not set
  CONFIG_VT=y
  CONFIG_VT_CONSOLE=y
  CONFIG_HW_CONSOLE=y
- # CONFIG_VT_HW_CONSOLE_BINDING is not set
+ CONFIG_VT_HW_CONSOLE_BINDING=y
  # CONFIG_SERIAL_NONSTANDARD is not set
  
  #
@@@ -1086,7 -1113,7 +1113,7 @@@ CONFIG_HAS_DMA=
  #
  # CONFIG_PRINTK_TIME is not set
  CONFIG_ENABLE_MUST_CHECK=y
- # CONFIG_MAGIC_SYSRQ is not set
+ CONFIG_MAGIC_SYSRQ=y
  # CONFIG_UNUSED_SYMBOLS is not set
  # CONFIG_DEBUG_FS is not set
  # CONFIG_HEADERS_CHECK is not set
@@@ -1116,16 -1143,7 +1143,7 @@@ CONFIG_DEBUG_STACKOVERFLOW=
  # CONFIG_DEBUGGER is not set
  CONFIG_IRQSTACKS=y
  # CONFIG_BOOTX_TEXT is not set
- CONFIG_PPC_EARLY_DEBUG=y
- # CONFIG_PPC_EARLY_DEBUG_LPAR is not set
- # CONFIG_PPC_EARLY_DEBUG_G5 is not set
- # CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
- # CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
- # CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
- # CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
- # CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
- # CONFIG_PPC_EARLY_DEBUG_BEAT is not set
- # CONFIG_PPC_EARLY_DEBUG_44x is not set
+ # CONFIG_PPC_EARLY_DEBUG is not set
  
  #
  # Security options
@@@ -34,9 -34,9 +34,9 @@@
  #include <asm/syscalls.h>
  #include <asm/vdso.h>
  
- #define DEBUG_SIG 0
+ #include "signal.h"
  
- #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
+ #define DEBUG_SIG 0
  
  #define GP_REGS_SIZE  min(sizeof(elf_gregset_t), sizeof(struct pt_regs))
  #define FP_REGS_SIZE  sizeof(elf_fpregset_t)
@@@ -64,14 -64,6 +64,6 @@@ struct rt_sigframe 
        char abigap[288];
  } __attribute__ ((aligned (16)));
  
- long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, unsigned long r5,
-                    unsigned long r6, unsigned long r7, unsigned long r8,
-                    struct pt_regs *regs)
- {
-       return do_sigaltstack(uss, uoss, regs->gpr[1]);
- }
  /*
   * Set up the sigcontext for the signal frame.
   */
@@@ -176,13 -168,6 +168,13 @@@ static long restore_sigcontext(struct p
         */
        discard_lazy_cpu_state();
  
 +      /*
 +       * Force reload of FP/VEC.
 +       * This has to be done before copying stuff into current->thread.fpr/vr
 +       * for the reasons explained in the previous comment.
 +       */
 +      regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC);
 +
        err |= __copy_from_user(&current->thread.fpr, &sc->fp_regs, FP_REGS_SIZE);
  
  #ifdef CONFIG_ALTIVEC
                current->thread.vrsave = 0;
  #endif /* CONFIG_ALTIVEC */
  
 -      /* Force reload of FP/VEC */
 -      regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC);
 -
        return err;
  }
  
  /*
-  * Allocate space for the signal frame
-  */
- static inline void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
-                                 size_t frame_size)
- {
-         unsigned long newsp;
-         /* Default to using normal stack */
-         newsp = regs->gpr[1];
-       if ((ka->sa.sa_flags & SA_ONSTACK) && current->sas_ss_size) {
-               if (! on_sig_stack(regs->gpr[1]))
-                       newsp = (current->sas_ss_sp + current->sas_ss_size);
-       }
-         return (void __user *)((newsp - frame_size) & -16ul);
- }
- /*
   * Setup the trampoline code on the stack
   */
  static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp)
  }
  
  /*
-  * Restore the user process's signal mask (also used by signal32.c)
-  */
- void restore_sigmask(sigset_t *set)
- {
-       sigdelsetmask(set, ~_BLOCKABLE);
-       spin_lock_irq(&current->sighand->siglock);
-       current->blocked = *set;
-       recalc_sigpending();
-       spin_unlock_irq(&current->sighand->siglock);
- }
- /*
   * Handle {get,set,swap}_context operations
   */
  int sys_swapcontext(struct ucontext __user *old_ctx,
@@@ -359,7 -315,7 +319,7 @@@ badframe
        return 0;
  }
  
static int setup_rt_frame(int signr, struct k_sigaction *ka, siginfo_t *info,
int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info,
                sigset_t *set, struct pt_regs *regs)
  {
        /* Handler is *really* a pointer to the function descriptor for
        long err = 0;
  
        frame = get_sigframe(ka, regs, sizeof(*frame));
-       if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame)))
+       if (unlikely(frame == NULL))
                goto badframe;
  
        err |= __put_user(&frame->info, &frame->pinfo);
        funct_desc_ptr = (func_descr_t __user *) ka->sa.sa_handler;
  
        /* Allocate a dummy caller frame for the signal handler. */
-       newsp = (unsigned long)frame - __SIGNAL_FRAMESIZE;
+       newsp = ((unsigned long)frame) - __SIGNAL_FRAMESIZE;
        err |= put_user(regs->gpr[1], (unsigned long __user *)newsp);
  
        /* Set up "regs" so we "return" to the signal handler. */
@@@ -442,134 -397,3 +401,3 @@@ badframe
        force_sigsegv(signr, current);
        return 0;
  }
- /*
-  * OK, we're invoking a handler
-  */
- static int handle_signal(unsigned long sig, struct k_sigaction *ka,
-                        siginfo_t *info, sigset_t *oldset, struct pt_regs *regs)
- {
-       int ret;
-       /* Set up Signal Frame */
-       ret = setup_rt_frame(sig, ka, info, oldset, regs);
-       if (ret) {
-               spin_lock_irq(&current->sighand->siglock);
-               sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
-               if (!(ka->sa.sa_flags & SA_NODEFER))
-                       sigaddset(&current->blocked,sig);
-               recalc_sigpending();
-               spin_unlock_irq(&current->sighand->siglock);
-       }
-       return ret;
- }
- static inline void syscall_restart(struct pt_regs *regs, struct k_sigaction *ka)
- {
-       switch ((int)regs->result) {
-       case -ERESTART_RESTARTBLOCK:
-       case -ERESTARTNOHAND:
-               /* ERESTARTNOHAND means that the syscall should only be
-                * restarted if there was no handler for the signal, and since
-                * we only get here if there is a handler, we dont restart.
-                */
-               regs->result = -EINTR;
-               regs->gpr[3] = EINTR;
-               regs->ccr |= 0x10000000;
-               break;
-       case -ERESTARTSYS:
-               /* ERESTARTSYS means to restart the syscall if there is no
-                * handler or the handler was registered with SA_RESTART
-                */
-               if (!(ka->sa.sa_flags & SA_RESTART)) {
-                       regs->result = -EINTR;
-                       regs->gpr[3] = EINTR;
-                       regs->ccr |= 0x10000000;
-                       break;
-               }
-               /* fallthrough */
-       case -ERESTARTNOINTR:
-               /* ERESTARTNOINTR means that the syscall should be
-                * called again after the signal handler returns.
-                */
-               regs->gpr[3] = regs->orig_gpr3;
-               regs->nip -= 4;
-               regs->result = 0;
-               break;
-       }
- }
- /*
-  * Note that 'init' is a special process: it doesn't get signals it doesn't
-  * want to handle. Thus you cannot kill init even with a SIGKILL even by
-  * mistake.
-  */
- int do_signal(sigset_t *oldset, struct pt_regs *regs)
- {
-       siginfo_t info;
-       int signr;
-       struct k_sigaction ka;
-       /*
-        * If the current thread is 32 bit - invoke the
-        * 32 bit signal handling code
-        */
-       if (test_thread_flag(TIF_32BIT))
-               return do_signal32(oldset, regs);
-       if (test_thread_flag(TIF_RESTORE_SIGMASK))
-               oldset = &current->saved_sigmask;
-       else if (!oldset)
-               oldset = &current->blocked;
-       signr = get_signal_to_deliver(&info, &ka, regs, NULL);
-       if (signr > 0) {
-               int ret;
-               /* Whee!  Actually deliver the signal.  */
-               if (TRAP(regs) == 0x0C00)
-                       syscall_restart(regs, &ka);
-               /*
-                * Reenable the DABR before delivering the signal to
-                * user space. The DABR will have been cleared if it
-                * triggered inside the kernel.
-                */
-               if (current->thread.dabr)
-                       set_dabr(current->thread.dabr);
-               ret = handle_signal(signr, &ka, &info, oldset, regs);
-               /* If a signal was successfully delivered, the saved sigmask is in
-                  its frame, and we can clear the TIF_RESTORE_SIGMASK flag */
-               if (ret && test_thread_flag(TIF_RESTORE_SIGMASK))
-                       clear_thread_flag(TIF_RESTORE_SIGMASK);
-               return ret;
-       }
-       if (TRAP(regs) == 0x0C00) {     /* System Call! */
-               if ((int)regs->result == -ERESTARTNOHAND ||
-                   (int)regs->result == -ERESTARTSYS ||
-                   (int)regs->result == -ERESTARTNOINTR) {
-                       regs->gpr[3] = regs->orig_gpr3;
-                       regs->nip -= 4; /* Back up & retry system call */
-                       regs->result = 0;
-               } else if ((int)regs->result == -ERESTART_RESTARTBLOCK) {
-                       regs->gpr[0] = __NR_restart_syscall;
-                       regs->nip -= 4;
-                       regs->result = 0;
-               }
-       }
-       /* No signal to deliver -- put the saved sigmask back */
-       if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
-               clear_thread_flag(TIF_RESTORE_SIGMASK);
-               sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
-       }
-       return 0;
- }
- EXPORT_SYMBOL(do_signal);
diff --combined arch/powerpc/mm/fault.c
@@@ -279,13 -279,14 +279,13 @@@ good_area
  #endif /* CONFIG_8xx */
  
        if (is_exec) {
 -#ifdef CONFIG_PPC64
 +#if !(defined(CONFIG_4xx) || defined(CONFIG_BOOKE))
                /* protection fault */
                if (error_code & DSISR_PROTFAULT)
                        goto bad_area;
                if (!(vma->vm_flags & VM_EXEC))
                        goto bad_area;
 -#endif
 -#if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
 +#else
                pte_t *ptep;
                pmd_t *pmdp;
  
@@@ -380,7 -381,7 +380,7 @@@ out_of_memory
        }
        printk("VM: killing process %s\n", current->comm);
        if (user_mode(regs))
-               do_exit(SIGKILL);
+               do_group_exit(SIGKILL);
        return SIGKILL;
  
  do_sigbus:
@@@ -6,11 -6,7 +6,7 @@@
  #ifndef __ASSEMBLY__
  #include <linux/sched.h>
  #include <linux/threads.h>
- #include <asm/processor.h>            /* For TASK_SIZE */
- #include <asm/mmu.h>
- #include <asm/page.h>
  #include <asm/io.h>                   /* For sub-arch specific PPC_PIN_SIZE */
- struct mm_struct;
  
  extern unsigned long va_to_phys(unsigned long address);
  extern pte_t *va_to_pte(unsigned long address);
@@@ -488,14 -484,6 +484,6 @@@ extern unsigned long bad_call_to_PMD_PA
  #define pfn_pte(pfn, prot)    __pte(((pte_basic_t)(pfn) << PFN_SHIFT_OFFSET) |\
                                        pgprot_val(prot))
  #define mk_pte(page, prot)    pfn_pte(page_to_pfn(page), prot)
- /*
-  * ZERO_PAGE is a global shared page that is always zero: used
-  * for zero-mapped memory areas etc..
-  */
- extern unsigned long empty_zero_page[1024];
- #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
  #endif /* __ASSEMBLY__ */
  
  #define pte_none(pte)         ((pte_val(pte) & ~_PTE_NONE_MASK) == 0)
@@@ -673,14 -661,10 +661,14 @@@ static inline void __ptep_set_access_fl
  }
  
  #define  ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
 -      do {                                                               \
 -              __ptep_set_access_flags(__ptep, __entry, __dirty);         \
 -              flush_tlb_page_nohash(__vma, __address);                   \
 -      } while(0)
 +({                                                                       \
 +      int __changed = !pte_same(*(__ptep), __entry);                     \
 +      if (__changed) {                                                   \
 +              __ptep_set_access_flags(__ptep, __entry, __dirty);         \
 +              flush_tlb_page_nohash(__vma, __address);                   \
 +      }                                                                  \
 +      __changed;                                                         \
 +})
  
  /*
   * Macro to mark a page protection value as "uncacheable".
@@@ -734,10 -718,6 +722,6 @@@ extern pgprot_t phys_mem_access_prot(st
  #define pte_unmap(pte)                kunmap_atomic(pte, KM_PTE0)
  #define pte_unmap_nested(pte) kunmap_atomic(pte, KM_PTE1)
  
- extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
- extern void paging_init(void);
  /*
   * Encode and decode a swap entry.
   * Note that the bits we use in a PTE for representing a swap entry
  #define pte_to_pgoff(pte)     (pte_val(pte) >> 3)
  #define pgoff_to_pte(off)     ((pte_t) { ((off) << 3) | _PAGE_FILE })
  
- /* CONFIG_APUS */
- /* For virtual address to physical address conversion */
- extern void cache_clear(__u32 addr, int length);
- extern void cache_push(__u32 addr, int length);
- extern int mm_end_of_chunk (unsigned long addr, int len);
- extern unsigned long iopa(unsigned long addr);
- extern unsigned long mm_ptov(unsigned long addr) __attribute_const__;
- /* Values for nocacheflag and cmode */
- /* These are not used by the APUS kernel_map, but prevents
-    compilation errors. */
- #define       KERNELMAP_FULL_CACHING          0
- #define       KERNELMAP_NOCACHE_SER           1
- #define       KERNELMAP_NOCACHE_NONSER        2
- #define       KERNELMAP_NO_COPYBACK           3
- /*
-  * Map some physical address range into the kernel address space.
-  */
- extern unsigned long kernel_map(unsigned long paddr, unsigned long size,
-                               int nocacheflag, unsigned long *memavailp );
- /*
-  * Set cache mode of (kernel space) address range.
-  */
- extern void kernel_set_cachemode (unsigned long address, unsigned long size,
-                                  unsigned int cmode);
- /* Needs to be defined here and not in linux/mm.h, as it is arch dependent */
- #define kern_addr_valid(addr) (1)
- #define io_remap_pfn_range(vma, vaddr, pfn, size, prot)               \
-               remap_pfn_range(vma, vaddr, pfn, size, prot)
  /*
   * No page table caches to initialise
   */
@@@ -7,11 -7,7 +7,7 @@@
  
  #ifndef __ASSEMBLY__
  #include <linux/stddef.h>
- #include <asm/processor.h>            /* For TASK_SIZE */
- #include <asm/mmu.h>
- #include <asm/page.h>
  #include <asm/tlbflush.h>
- struct mm_struct;
  #endif /* __ASSEMBLY__ */
  
  #ifdef CONFIG_PPC_64K_PAGES
@@@ -27,7 -23,7 +23,7 @@@
   */
  #define PGTABLE_EADDR_SIZE (PTE_INDEX_SIZE + PMD_INDEX_SIZE + \
                            PUD_INDEX_SIZE + PGD_INDEX_SIZE + PAGE_SHIFT)
- #define PGTABLE_RANGE (1UL << PGTABLE_EADDR_SIZE)
+ #define PGTABLE_RANGE (ASM_CONST(1) << PGTABLE_EADDR_SIZE)
  
  #if TASK_SIZE_USER64 > PGTABLE_RANGE
  #error TASK_SIZE_USER64 exceeds pagetable range
  #error TASK_SIZE_USER64 exceeds user VSID range
  #endif
  
  /*
   * Define the address range of the vmalloc VM area.
   */
  #define VMALLOC_START ASM_CONST(0xD000000000000000)
- #define VMALLOC_SIZE  ASM_CONST(0x80000000000)
+ #define VMALLOC_SIZE  (PGTABLE_RANGE >> 1)
  #define VMALLOC_END   (VMALLOC_START + VMALLOC_SIZE)
  
  /*
-  * Define the address range of the imalloc VM area.
+  * Define the address ranges for MMIO and IO space :
+  *
+  *  ISA_IO_BASE = VMALLOC_END, 64K reserved area
+  *  PHB_IO_BASE = ISA_IO_BASE + 64K to ISA_IO_BASE + 2G, PHB IO spaces
+  * IOREMAP_BASE = ISA_IO_BASE + 2G to VMALLOC_START + PGTABLE_RANGE
   */
- #define PHBS_IO_BASE  VMALLOC_END
- #define IMALLOC_BASE  (PHBS_IO_BASE + 0x80000000ul)   /* Reserve 2 gigs for PHBs */
- #define IMALLOC_END   (VMALLOC_START + PGTABLE_RANGE)
+ #define FULL_IO_SIZE  0x80000000ul
+ #define  ISA_IO_BASE  (VMALLOC_END)
+ #define  ISA_IO_END   (VMALLOC_END + 0x10000ul)
+ #define  PHB_IO_BASE  (ISA_IO_END)
+ #define  PHB_IO_END   (VMALLOC_END + FULL_IO_SIZE)
+ #define IOREMAP_BASE  (PHB_IO_END)
+ #define IOREMAP_END   (VMALLOC_START + PGTABLE_RANGE)
  
  /*
   * Region IDs
  #define __S110        PAGE_SHARED_X
  #define __S111        PAGE_SHARED_X
  
- #ifndef __ASSEMBLY__
- /*
-  * ZERO_PAGE is a global shared page that is always zero: used
-  * for zero-mapped memory areas etc..
-  */
- extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
- #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
- #endif /* __ASSEMBLY__ */
  #ifdef CONFIG_HUGETLB_PAGE
  
  #define HAVE_ARCH_UNMAPPED_AREA
@@@ -413,14 -408,10 +408,14 @@@ static inline void __ptep_set_access_fl
        :"cc");
  }
  #define  ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
 -      do {                                                               \
 -              __ptep_set_access_flags(__ptep, __entry, __dirty);         \
 -              flush_tlb_page_nohash(__vma, __address);                   \
 -      } while(0)
 +({                                                                       \
 +      int __changed = !pte_same(*(__ptep), __entry);                     \
 +      if (__changed) {                                                   \
 +              __ptep_set_access_flags(__ptep, __entry, __dirty);         \
 +              flush_tlb_page_nohash(__vma, __address);                   \
 +      }                                                                  \
 +      __changed;                                                         \
 +})
  
  /*
   * Macro to mark a page protection value as "uncacheable".
@@@ -442,10 -433,6 +437,6 @@@ extern pgprot_t phys_mem_access_prot(st
  #define pgd_ERROR(e) \
        printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
  
- extern pgd_t swapper_pg_dir[];
- extern void paging_init(void);
  /* Encode and de-code a swap entry */
  #define __swp_type(entry)     (((entry).val >> 1) & 0x3f)
  #define __swp_offset(entry)   ((entry).val >> 8)
  #define pgoff_to_pte(off)     ((pte_t) {((off) << PTE_RPN_SHIFT)|_PAGE_FILE})
  #define PTE_FILE_MAX_BITS     (BITS_PER_LONG - PTE_RPN_SHIFT)
  
- /*
-  * kern_addr_valid is intended to indicate whether an address is a valid
-  * kernel address.  Most 32-bit archs define it as always true (like this)
-  * but most 64-bit archs actually perform a test.  What should we do here?
-  * The only use is in fs/ncpfs/dir.c
-  */
- #define kern_addr_valid(addr) (1)
- #define io_remap_pfn_range(vma, vaddr, pfn, size, prot)               \
-               remap_pfn_range(vma, vaddr, pfn, size, prot)
  void pgtable_cache_init(void);
  
  /*