瀏覽代碼

Merge ../linux-2.6

Paul Mackerras 19 年之前
父節點
當前提交
de2d3dbd17
共有 100 個文件被更改,包括 201 次插入177 次删除
  1. 38 4
      Documentation/filesystems/ntfs.txt
  2. 1 1
      arch/arm/common/locomo.c
  3. 1 1
      arch/arm/common/sa1111.c
  4. 1 2
      arch/arm/common/scoop.c
  5. 1 1
      arch/arm/mach-aaec2000/core.c
  6. 1 1
      arch/arm/mach-h720x/h7202-eval.c
  7. 1 1
      arch/arm/mach-imx/generic.c
  8. 1 0
      arch/arm/mach-imx/mx1ads.c
  9. 1 1
      arch/arm/mach-integrator/integrator_ap.c
  10. 1 1
      arch/arm/mach-integrator/integrator_cp.c
  11. 1 1
      arch/arm/mach-iop3xx/iop321-setup.c
  12. 1 1
      arch/arm/mach-iop3xx/iop331-setup.c
  13. 1 1
      arch/arm/mach-ixp2000/enp2611.c
  14. 1 1
      arch/arm/mach-ixp2000/ixdp2x00.c
  15. 1 1
      arch/arm/mach-ixp2000/ixdp2x01.c
  16. 1 0
      arch/arm/mach-ixp4xx/common.c
  17. 1 1
      arch/arm/mach-lh7a40x/arch-lpd7a40x.c
  18. 1 1
      arch/arm/mach-omap1/board-h2.c
  19. 1 1
      arch/arm/mach-omap1/board-h3.c
  20. 1 1
      arch/arm/mach-omap1/board-innovator.c
  21. 1 1
      arch/arm/mach-omap1/board-netstar.c
  22. 1 1
      arch/arm/mach-omap1/board-osk.c
  23. 1 1
      arch/arm/mach-omap1/board-perseus2.c
  24. 1 1
      arch/arm/mach-omap1/board-voiceblue.c
  25. 1 1
      arch/arm/mach-omap1/devices.c
  26. 1 1
      arch/arm/mach-pxa/corgi.c
  27. 1 1
      arch/arm/mach-pxa/corgi_lcd.c
  28. 1 1
      arch/arm/mach-pxa/corgi_ssp.c
  29. 1 1
      arch/arm/mach-pxa/generic.c
  30. 1 1
      arch/arm/mach-pxa/idp.c
  31. 1 1
      arch/arm/mach-pxa/lubbock.c
  32. 1 1
      arch/arm/mach-pxa/mainstone.c
  33. 1 1
      arch/arm/mach-pxa/poodle.c
  34. 1 1
      arch/arm/mach-pxa/pxa27x.c
  35. 1 1
      arch/arm/mach-pxa/spitz.c
  36. 1 1
      arch/arm/mach-s3c2410/clock.c
  37. 1 1
      arch/arm/mach-s3c2410/cpu.c
  38. 1 1
      arch/arm/mach-s3c2410/devs.c
  39. 1 0
      arch/arm/mach-s3c2410/devs.h
  40. 1 1
      arch/arm/mach-s3c2410/mach-anubis.c
  41. 1 1
      arch/arm/mach-s3c2410/mach-bast.c
  42. 1 0
      arch/arm/mach-s3c2410/mach-h1940.c
  43. 1 1
      arch/arm/mach-s3c2410/mach-n30.c
  44. 1 1
      arch/arm/mach-s3c2410/mach-nexcoder.c
  45. 1 1
      arch/arm/mach-s3c2410/mach-otom.c
  46. 1 0
      arch/arm/mach-s3c2410/mach-rx3715.c
  47. 1 0
      arch/arm/mach-s3c2410/mach-smdk2410.c
  48. 1 0
      arch/arm/mach-s3c2410/mach-smdk2440.c
  49. 1 1
      arch/arm/mach-s3c2410/s3c2410.c
  50. 1 1
      arch/arm/mach-s3c2410/s3c2440.c
  51. 1 1
      arch/arm/mach-sa1100/badge4.c
  52. 1 1
      arch/arm/mach-sa1100/cerf.c
  53. 1 1
      arch/arm/mach-sa1100/collie.c
  54. 1 0
      arch/arm/mach-sa1100/generic.c
  55. 1 1
      arch/arm/mach-sa1100/jornada720.c
  56. 1 1
      arch/arm/mach-sa1100/neponset.c
  57. 1 1
      arch/arm/mach-sa1100/pleb.c
  58. 1 1
      arch/arm/mach-sa1100/simpad.c
  59. 1 0
      arch/arm/mach-versatile/core.c
  60. 1 1
      arch/arm/plat-omap/usb.c
  61. 0 5
      arch/i386/Kconfig
  62. 16 61
      arch/i386/kernel/apic.c
  63. 0 4
      arch/i386/kernel/i8259.c
  64. 1 5
      arch/i386/kernel/io_apic.c
  65. 52 16
      arch/i386/kernel/smpboot.c
  66. 1 11
      arch/i386/kernel/time.c
  67. 1 1
      arch/m32r/kernel/setup_m32700ut.c
  68. 1 1
      arch/m32r/kernel/setup_mappi.c
  69. 1 1
      arch/m32r/kernel/setup_mappi2.c
  70. 1 1
      arch/m32r/kernel/setup_mappi3.c
  71. 1 1
      arch/m32r/kernel/setup_opsput.c
  72. 1 0
      arch/mips/au1000/common/platform.c
  73. 1 0
      arch/ppc/platforms/4xx/ibm440ep.c
  74. 1 0
      arch/ppc/platforms/4xx/ibmstb4.c
  75. 1 1
      arch/ppc/platforms/4xx/redwood5.c
  76. 1 1
      arch/ppc/platforms/4xx/redwood6.c
  77. 1 1
      arch/ppc/platforms/chrp_pegasos_eth.c
  78. 1 0
      arch/ppc/platforms/cpci690.c
  79. 1 0
      arch/ppc/platforms/ev64260.c
  80. 1 0
      arch/ppc/platforms/ev64360.c
  81. 1 0
      arch/ppc/platforms/hdpu.c
  82. 1 0
      arch/ppc/platforms/katana.c
  83. 1 0
      arch/ppc/platforms/radstone_ppc7d.c
  84. 1 0
      arch/ppc/syslib/mpc52xx_devices.c
  85. 1 0
      arch/ppc/syslib/mv64x60.c
  86. 1 1
      arch/ppc/syslib/pq2_devices.c
  87. 1 1
      arch/sh/boards/superh/microdev/setup.c
  88. 1 0
      arch/um/drivers/net_kern.c
  89. 1 0
      arch/um/drivers/ubd_kern.c
  90. 1 0
      arch/xtensa/platform-iss/network.c
  91. 1 1
      drivers/base/platform.c
  92. 1 3
      drivers/block/cfq-iosched.c
  93. 1 1
      drivers/block/floppy.c
  94. 1 0
      drivers/block/noop-iosched.c
  95. 1 1
      drivers/char/s3c2410-rtc.c
  96. 1 0
      drivers/char/sonypi.c
  97. 1 1
      drivers/char/tb0219.c
  98. 1 1
      drivers/char/vr41xx_giu.c
  99. 1 1
      drivers/char/vr41xx_rtc.c
  100. 1 1
      drivers/char/watchdog/mpcore_wdt.c

+ 38 - 4
Documentation/filesystems/ntfs.txt

@@ -50,9 +50,14 @@ userspace utilities, etc.
 Features
 Features
 ========
 ========
 
 
-- This is a complete rewrite of the NTFS driver that used to be in the kernel.
-  This new driver implements NTFS read support and is functionally equivalent
-  to the old ntfs driver.
+- This is a complete rewrite of the NTFS driver that used to be in the 2.4 and
+  earlier kernels.  This new driver implements NTFS read support and is
+  functionally equivalent to the old ntfs driver and it also implements limited
+  write support.  The biggest limitation at present is that files/directories
+  cannot be created or deleted.  See below for the list of write features that
+  are so far supported.  Another limitation is that writing to compressed files
+  is not implemented at all.  Also, neither read nor write access to encrypted
+  files is so far implemented.
 - The new driver has full support for sparse files on NTFS 3.x volumes which
 - The new driver has full support for sparse files on NTFS 3.x volumes which
   the old driver isn't happy with.
   the old driver isn't happy with.
 - The new driver supports execution of binaries due to mmap() now being
 - The new driver supports execution of binaries due to mmap() now being
@@ -78,7 +83,20 @@ Features
 - The new driver supports fsync(2), fdatasync(2), and msync(2).
 - The new driver supports fsync(2), fdatasync(2), and msync(2).
 - The new driver supports readv(2) and writev(2).
 - The new driver supports readv(2) and writev(2).
 - The new driver supports access time updates (including mtime and ctime).
 - The new driver supports access time updates (including mtime and ctime).
-
+- The new driver supports truncate(2) and open(2) with O_TRUNC.  But at present
+  only very limited support for highly fragmented files, i.e. ones which have
+  their data attribute split across multiple extents, is included.  Another
+  limitation is that at present truncate(2) will never create sparse files,
+  since to mark a file sparse we need to modify the directory entry for the
+  file and we do not implement directory modifications yet.
+- The new driver supports write(2) which can both overwrite existing data and
+  extend the file size so that you can write beyond the existing data.  Also,
+  writing into sparse regions is supported and the holes are filled in with
+  clusters.  But at present only limited support for highly fragmented files,
+  i.e. ones which have their data attribute split across multiple extents, is
+  included.  Another limitation is that write(2) will never create sparse
+  files, since to mark a file sparse we need to modify the directory entry for
+  the file and we do not implement directory modifications yet.
 
 
 Supported mount options
 Supported mount options
 =======================
 =======================
@@ -439,6 +457,22 @@ ChangeLog
 
 
 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
 Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
 
 
+2.1.25:
+	- Write support is now extended with write(2) being able to both
+	  overwrite existing file data and to extend files.  Also, if a write
+	  to a sparse region occurs, write(2) will fill in the hole.  Note,
+	  mmap(2) based writes still do not support writing into holes or
+	  writing beyond the initialized size.
+	- Write support has a new feature and that is that truncate(2) and
+	  open(2) with O_TRUNC are now implemented thus files can be both made
+	  smaller and larger.
+	- Note: Both write(2) and truncate(2)/open(2) with O_TRUNC still have
+	  limitations in that they
+	  - only provide limited support for highly fragmented files.
+	  - only work on regular, i.e. uncompressed and unencrypted files.
+	  - never create sparse files although this will change once directory
+	    operations are implemented.
+	- Lots of bug fixes and enhancements across the board.
 2.1.24:
 2.1.24:
 	- Support journals ($LogFile) which have been modified by chkdsk.  This
 	- Support journals ($LogFile) which have been modified by chkdsk.  This
 	  means users can boot into Windows after we marked the volume dirty.
 	  means users can boot into Windows after we marked the volume dirty.

+ 1 - 1
arch/arm/common/locomo.c

@@ -22,7 +22,7 @@
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/spinlock.h>
 
 

+ 1 - 1
arch/arm/common/sa1111.c

@@ -22,7 +22,7 @@
 #include <linux/ptrace.h>
 #include <linux/ptrace.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/spinlock.h>
 #include <linux/spinlock.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>

+ 1 - 2
arch/arm/common/scoop.c

@@ -13,8 +13,7 @@
 
 
 #include <linux/device.h>
 #include <linux/device.h>
 #include <linux/string.h>
 #include <linux/string.h>
-#include <linux/slab.h>
-
+#include <linux/platform_device.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/hardware/scoop.h>
 #include <asm/hardware/scoop.h>
 
 

+ 1 - 1
arch/arm/mach-aaec2000/core.c

@@ -13,7 +13,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>

+ 1 - 1
arch/arm/mach-h720x/h7202-eval.c

@@ -18,7 +18,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/string.h>
 #include <linux/string.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/setup.h>
 #include <asm/setup.h>
 #include <asm/types.h>
 #include <asm/types.h>

+ 1 - 1
arch/arm/mach-imx/generic.c

@@ -22,7 +22,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *
  */
  */
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/module.h>

+ 1 - 0
arch/arm/mach-imx/mx1ads.c

@@ -14,6 +14,7 @@
 
 
 #include <linux/device.h>
 #include <linux/device.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/hardware.h>
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 1
arch/arm/mach-integrator/integrator_ap.c

@@ -21,7 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/list.h>
 #include <linux/list.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/string.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>

+ 1 - 1
arch/arm/mach-integrator/integrator_cp.c

@@ -11,7 +11,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/list.h>
 #include <linux/list.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/string.h>
 #include <linux/string.h>

+ 1 - 1
arch/arm/mach-iop3xx/iop321-setup.c

@@ -16,7 +16,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>

+ 1 - 1
arch/arm/mach-iop3xx/iop331-setup.c

@@ -15,7 +15,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>

+ 1 - 1
arch/arm/mach-ixp2000/enp2611.c

@@ -32,7 +32,7 @@
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 1
arch/arm/mach-ixp2000/ixdp2x00.c

@@ -20,7 +20,7 @@
 #include <linux/mm.h>
 #include <linux/mm.h>
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/bitops.h>
 #include <linux/bitops.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>

+ 1 - 1
arch/arm/mach-ixp2000/ixdp2x01.c

@@ -29,7 +29,7 @@
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 0
arch/arm/mach-ixp4xx/common.c

@@ -20,6 +20,7 @@
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
+#include <linux/platform_device.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/bootmem.h>
 #include <linux/bootmem.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>

+ 1 - 1
arch/arm/mach-lh7a40x/arch-lpd7a40x.c

@@ -10,7 +10,7 @@
 
 
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>

+ 1 - 1
arch/arm/mach-omap1/board-h2.c

@@ -21,7 +21,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>

+ 1 - 1
arch/arm/mach-omap1/board-h3.c

@@ -19,7 +19,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>

+ 1 - 1
arch/arm/mach-omap1/board-innovator.c

@@ -18,7 +18,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>

+ 1 - 1
arch/arm/mach-omap1/board-netstar.c

@@ -11,7 +11,7 @@
  */
  */
 
 
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>

+ 1 - 1
arch/arm/mach-omap1/board-osk.c

@@ -28,7 +28,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 
 
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>

+ 1 - 1
arch/arm/mach-omap1/board-perseus2.c

@@ -13,7 +13,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>

+ 1 - 1
arch/arm/mach-omap1/board-voiceblue.c

@@ -13,7 +13,7 @@
  */
  */
 
 
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>

+ 1 - 1
arch/arm/mach-omap1/devices.c

@@ -13,7 +13,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>
 #include <asm/io.h>
 #include <asm/io.h>

+ 1 - 1
arch/arm/mach-pxa/corgi.c

@@ -14,7 +14,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>

+ 1 - 1
arch/arm/mach-pxa/corgi_lcd.c

@@ -17,7 +17,7 @@
 
 
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <asm/arch/akita.h>
 #include <asm/arch/akita.h>
 #include <asm/arch/corgi.h>
 #include <asm/arch/corgi.h>

+ 1 - 1
arch/arm/mach-pxa/corgi_ssp.c

@@ -15,7 +15,7 @@
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <asm/hardware.h>
 #include <asm/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/mach-types.h>
 
 

+ 1 - 1
arch/arm/mach-pxa/generic.c

@@ -20,7 +20,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <linux/pm.h>
 #include <linux/pm.h>
 #include <linux/string.h>
 #include <linux/string.h>

+ 1 - 1
arch/arm/mach-pxa/idp.c

@@ -18,7 +18,7 @@
 
 
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/fb.h>
 #include <linux/fb.h>
 
 
 #include <asm/setup.h>
 #include <asm/setup.h>

+ 1 - 1
arch/arm/mach-pxa/lubbock.c

@@ -14,7 +14,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/fb.h>
 #include <linux/fb.h>

+ 1 - 1
arch/arm/mach-pxa/mainstone.c

@@ -14,7 +14,7 @@
  */
  */
 
 
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/sched.h>
 #include <linux/sched.h>

+ 1 - 1
arch/arm/mach-pxa/poodle.c

@@ -16,7 +16,7 @@
  */
  */
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/fb.h>
 #include <linux/fb.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>

+ 1 - 1
arch/arm/mach-pxa/pxa27x.c

@@ -16,7 +16,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/pm.h>
 #include <linux/pm.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 1
arch/arm/mach-pxa/spitz.c

@@ -14,7 +14,7 @@
 
 
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/major.h>
 #include <linux/major.h>
 #include <linux/fs.h>
 #include <linux/fs.h>

+ 1 - 1
arch/arm/mach-s3c2410/clock.c

@@ -32,7 +32,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/err.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>
 
 
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>

+ 1 - 1
arch/arm/mach-s3c2410/cpu.c

@@ -26,7 +26,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 1
arch/arm/mach-s3c2410/devs.c

@@ -24,7 +24,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 0
arch/arm/mach-s3c2410/devs.h

@@ -15,6 +15,7 @@
  *	10-Feb-2005 BJD	 Added camera from guillaume.gourat@nexvision.tv
  *	10-Feb-2005 BJD	 Added camera from guillaume.gourat@nexvision.tv
 */
 */
 #include <linux/config.h>
 #include <linux/config.h>
+#include <linux/platform_device.h>
 
 
 extern struct platform_device *s3c24xx_uart_devs[];
 extern struct platform_device *s3c24xx_uart_devs[];
 
 

+ 1 - 1
arch/arm/mach-s3c2410/mach-anubis.c

@@ -21,7 +21,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 1
arch/arm/mach-s3c2410/mach-bast.c

@@ -41,7 +41,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/dm9000.h>
 #include <linux/dm9000.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>

+ 1 - 0
arch/arm/mach-s3c2410/mach-h1940.c

@@ -34,6 +34,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 1
arch/arm/mach-s3c2410/mach-n30.c

@@ -20,7 +20,7 @@
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/kthread.h>
 #include <linux/kthread.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>

+ 1 - 1
arch/arm/mach-s3c2410/mach-nexcoder.c

@@ -19,7 +19,7 @@
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/string.h>
 #include <linux/string.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <linux/mtd/map.h>
 #include <linux/mtd/map.h>
 
 

+ 1 - 1
arch/arm/mach-s3c2410/mach-otom.c

@@ -15,7 +15,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 0
arch/arm/mach-s3c2410/mach-rx3715.c

@@ -27,6 +27,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/console.h>
 #include <linux/console.h>
+#include <linux/platform_device.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/serial.h>
 #include <linux/serial.h>
 
 

+ 1 - 0
arch/arm/mach-s3c2410/mach-smdk2410.c

@@ -38,6 +38,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 0
arch/arm/mach-s3c2410/mach-smdk2440.c

@@ -28,6 +28,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 1
arch/arm/mach-s3c2410/s3c2410.c

@@ -27,7 +27,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>

+ 1 - 1
arch/arm/mach-s3c2410/s3c2440.c

@@ -26,7 +26,7 @@
 #include <linux/list.h>
 #include <linux/list.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>
 
 
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>

+ 1 - 1
arch/arm/mach-sa1100/badge4.c

@@ -16,7 +16,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>

+ 1 - 1
arch/arm/mach-sa1100/cerf.c

@@ -14,7 +14,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
 
 

+ 1 - 1
arch/arm/mach-sa1100/collie.c

@@ -21,7 +21,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
 #include <linux/timer.h>
 #include <linux/timer.h>

+ 1 - 0
arch/arm/mach-sa1100/generic.c

@@ -18,6 +18,7 @@
 #include <linux/cpufreq.h>
 #include <linux/cpufreq.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <linux/sched.h>	/* just for sched_clock() - funny that */
 #include <linux/sched.h>	/* just for sched_clock() - funny that */
+#include <linux/platform_device.h>
 
 
 #include <asm/div64.h>
 #include <asm/div64.h>
 #include <asm/hardware.h>
 #include <asm/hardware.h>

+ 1 - 1
arch/arm/mach-sa1100/jornada720.c

@@ -6,7 +6,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>

+ 1 - 1
arch/arm/mach-sa1100/neponset.c

@@ -8,7 +8,7 @@
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
 
 
 #include <asm/hardware.h>
 #include <asm/hardware.h>

+ 1 - 1
arch/arm/mach-sa1100/pleb.c

@@ -6,7 +6,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/tty.h>
 #include <linux/tty.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
 
 

+ 1 - 1
arch/arm/mach-sa1100/simpad.c

@@ -10,7 +10,7 @@
 #include <linux/proc_fs.h>
 #include <linux/proc_fs.h>
 #include <linux/string.h> 
 #include <linux/string.h> 
 #include <linux/pm.h>
 #include <linux/pm.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
 
 

+ 1 - 0
arch/arm/mach-versatile/core.c

@@ -22,6 +22,7 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/device.h>
 #include <linux/device.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
+#include <linux/platform_device.h>
 #include <linux/sysdev.h>
 #include <linux/sysdev.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 
 

+ 1 - 1
arch/arm/plat-omap/usb.c

@@ -26,7 +26,7 @@
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/usb_otg.h>
 #include <linux/usb_otg.h>
 
 
 #include <asm/io.h>
 #include <asm/io.h>

+ 0 - 5
arch/i386/Kconfig

@@ -1042,8 +1042,3 @@ config X86_TRAMPOLINE
 	bool
 	bool
 	depends on X86_SMP || (X86_VOYAGER && SMP)
 	depends on X86_SMP || (X86_VOYAGER && SMP)
 	default y
 	default y
-
-config PC
-	bool
-	depends on X86 && !EMBEDDED
-	default y

+ 16 - 61
arch/i386/kernel/apic.c

@@ -803,7 +803,6 @@ no_apic:
 
 
 void __init init_apic_mappings(void)
 void __init init_apic_mappings(void)
 {
 {
-	unsigned int orig_apicid;
 	unsigned long apic_phys;
 	unsigned long apic_phys;
 
 
 	/*
 	/*
@@ -825,11 +824,8 @@ void __init init_apic_mappings(void)
 	 * Fetch the APIC ID of the BSP in case we have a
 	 * Fetch the APIC ID of the BSP in case we have a
 	 * default configuration (or the MP table is broken).
 	 * default configuration (or the MP table is broken).
 	 */
 	 */
-	orig_apicid = boot_cpu_physical_apicid;
-	boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
-	if ((orig_apicid != -1U) && (orig_apicid != boot_cpu_physical_apicid))
-		printk(KERN_WARNING "Boot APIC ID in local APIC unexpected (%d vs %d)",
-			orig_apicid, boot_cpu_physical_apicid);
+	if (boot_cpu_physical_apicid == -1U)
+		boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
 
 
 #ifdef CONFIG_X86_IO_APIC
 #ifdef CONFIG_X86_IO_APIC
 	{
 	{
@@ -1259,81 +1255,40 @@ fastcall void smp_error_interrupt(struct pt_regs *regs)
 }
 }
 
 
 /*
 /*
- * This initializes the IO-APIC and APIC hardware.
+ * This initializes the IO-APIC and APIC hardware if this is
+ * a UP kernel.
  */
  */
-int __init APIC_init(void)
+int __init APIC_init_uniprocessor (void)
 {
 {
-	if (enable_local_apic < 0) {
-		printk(KERN_INFO "APIC disabled\n");
-		return -1;
-	}
+	if (enable_local_apic < 0)
+		clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability);
 
 
-	/* See if we have a SMP configuration or have forced enabled
-	 * the local apic.
-	 */
-	if (!smp_found_config && !acpi_lapic && !cpu_has_apic) {
-		enable_local_apic = -1;
+	if (!smp_found_config && !cpu_has_apic)
 		return -1;
 		return -1;
-	}
 
 
 	/*
 	/*
-	 * Complain if the BIOS pretends there is an apic.
-	 * Then get out because we don't have an a local apic.
+	 * Complain if the BIOS pretends there is one.
 	 */
 	 */
 	if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
 	if (!cpu_has_apic && APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
 		printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
 		printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
 			boot_cpu_physical_apicid);
 			boot_cpu_physical_apicid);
-		printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
-		enable_local_apic = -1;
 		return -1;
 		return -1;
 	}
 	}
 
 
 	verify_local_APIC();
 	verify_local_APIC();
 
 
-	/*
-	 * Should not be necessary because the MP table should list the boot
-	 * CPU too, but we do it for the sake of robustness anyway.
-	 * Makes no sense to do this check in clustered apic mode, so skip it
-	 */
-	if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
-		printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
-				boot_cpu_physical_apicid);
-		physid_set(boot_cpu_physical_apicid, phys_cpu_present_map);
-	}
-
-	/*
-	 * Switch from PIC to APIC mode.
-	 */
 	connect_bsp_APIC();
 	connect_bsp_APIC();
-	setup_local_APIC();
 
 
-#ifdef CONFIG_X86_IO_APIC
-	/*
-	 * Now start the IO-APICs
-	 */
-	if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
-		setup_IO_APIC();
-#endif
-	return 0;
-}
+	phys_cpu_present_map = physid_mask_of_physid(boot_cpu_physical_apicid);
 
 
-void __init APIC_late_time_init(void)
-{
-	/* Improve our loops per jiffy estimate */
-	loops_per_jiffy = ((1000 + HZ - 1)/HZ)*cpu_khz;
-	boot_cpu_data.loops_per_jiffy = loops_per_jiffy;
-	cpu_data[0].loops_per_jiffy = loops_per_jiffy;
-
-	/* setup_apic_nmi_watchdog doesn't work properly before cpu_khz is
-	 * initialized.  So redo it here to ensure the boot cpu is setup
-	 * properly.
-	 */
-	if (nmi_watchdog == NMI_LOCAL_APIC)
-		setup_apic_nmi_watchdog();
+	setup_local_APIC();
 
 
 #ifdef CONFIG_X86_IO_APIC
 #ifdef CONFIG_X86_IO_APIC
-	if (smp_found_config && !skip_ioapic_setup && nr_ioapics)
-		IO_APIC_late_time_init();
+	if (smp_found_config)
+		if (!skip_ioapic_setup && nr_ioapics)
+			setup_IO_APIC();
 #endif
 #endif
 	setup_boot_APIC_clock();
 	setup_boot_APIC_clock();
+
+	return 0;
 }
 }

+ 0 - 4
arch/i386/kernel/i8259.c

@@ -435,8 +435,4 @@ void __init init_IRQ(void)
 		setup_irq(FPU_IRQ, &fpu_irq);
 		setup_irq(FPU_IRQ, &fpu_irq);
 
 
 	irq_ctx_init(smp_processor_id());
 	irq_ctx_init(smp_processor_id());
-
-#ifdef CONFIG_X86_LOCAL_APIC
-	APIC_init();
-#endif
 }
 }

+ 1 - 5
arch/i386/kernel/io_apic.c

@@ -2387,15 +2387,11 @@ void __init setup_IO_APIC(void)
 	sync_Arb_IDs();
 	sync_Arb_IDs();
 	setup_IO_APIC_irqs();
 	setup_IO_APIC_irqs();
 	init_IO_APIC_traps();
 	init_IO_APIC_traps();
+	check_timer();
 	if (!acpi_ioapic)
 	if (!acpi_ioapic)
 		print_IO_APIC();
 		print_IO_APIC();
 }
 }
 
 
-void __init IO_APIC_late_time_init(void)
-{
-	check_timer();
-}
-
 /*
 /*
  *	Called after all the initialization is done. If we didnt find any
  *	Called after all the initialization is done. If we didnt find any
  *	APIC bugs then we can allow the modify fast path
  *	APIC bugs then we can allow the modify fast path

+ 52 - 16
arch/i386/kernel/smpboot.c

@@ -1078,16 +1078,6 @@ void *xquad_portio;
 EXPORT_SYMBOL(xquad_portio);
 EXPORT_SYMBOL(xquad_portio);
 #endif
 #endif
 
 
-/*
- * Fall back to non SMP mode after errors.
- *
- */
-static __init void disable_smp(void)
-{
-	cpu_set(0, cpu_sibling_map[0]);
-	cpu_set(0, cpu_core_map[0]);
-}
-
 static void __init smp_boot_cpus(unsigned int max_cpus)
 static void __init smp_boot_cpus(unsigned int max_cpus)
 {
 {
 	int apicid, cpu, bit, kicked;
 	int apicid, cpu, bit, kicked;
@@ -1100,6 +1090,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
 	printk("CPU%d: ", 0);
 	printk("CPU%d: ", 0);
 	print_cpu_info(&cpu_data[0]);
 	print_cpu_info(&cpu_data[0]);
 
 
+	boot_cpu_physical_apicid = GET_APIC_ID(apic_read(APIC_ID));
 	boot_cpu_logical_apicid = logical_smp_processor_id();
 	boot_cpu_logical_apicid = logical_smp_processor_id();
 	x86_cpu_to_apicid[0] = boot_cpu_physical_apicid;
 	x86_cpu_to_apicid[0] = boot_cpu_physical_apicid;
 
 
@@ -1111,27 +1102,68 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
 	cpus_clear(cpu_core_map[0]);
 	cpus_clear(cpu_core_map[0]);
 	cpu_set(0, cpu_core_map[0]);
 	cpu_set(0, cpu_core_map[0]);
 
 
-	map_cpu_to_logical_apicid();
-
 	/*
 	/*
 	 * If we couldn't find an SMP configuration at boot time,
 	 * If we couldn't find an SMP configuration at boot time,
 	 * get out of here now!
 	 * get out of here now!
 	 */
 	 */
 	if (!smp_found_config && !acpi_lapic) {
 	if (!smp_found_config && !acpi_lapic) {
 		printk(KERN_NOTICE "SMP motherboard not detected.\n");
 		printk(KERN_NOTICE "SMP motherboard not detected.\n");
-		disable_smp();
+		smpboot_clear_io_apic_irqs();
+		phys_cpu_present_map = physid_mask_of_physid(0);
+		if (APIC_init_uniprocessor())
+			printk(KERN_NOTICE "Local APIC not detected."
+					   " Using dummy APIC emulation.\n");
+		map_cpu_to_logical_apicid();
+		cpu_set(0, cpu_sibling_map[0]);
+		cpu_set(0, cpu_core_map[0]);
+		return;
+	}
+
+	/*
+	 * Should not be necessary because the MP table should list the boot
+	 * CPU too, but we do it for the sake of robustness anyway.
+	 * Makes no sense to do this check in clustered apic mode, so skip it
+	 */
+	if (!check_phys_apicid_present(boot_cpu_physical_apicid)) {
+		printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
+				boot_cpu_physical_apicid);
+		physid_set(hard_smp_processor_id(), phys_cpu_present_map);
+	}
+
+	/*
+	 * If we couldn't find a local APIC, then get out of here now!
+	 */
+	if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid]) && !cpu_has_apic) {
+		printk(KERN_ERR "BIOS bug, local APIC #%d not detected!...\n",
+			boot_cpu_physical_apicid);
+		printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
+		smpboot_clear_io_apic_irqs();
+		phys_cpu_present_map = physid_mask_of_physid(0);
+		cpu_set(0, cpu_sibling_map[0]);
+		cpu_set(0, cpu_core_map[0]);
 		return;
 		return;
 	}
 	}
 
 
+	verify_local_APIC();
+
 	/*
 	/*
 	 * If SMP should be disabled, then really disable it!
 	 * If SMP should be disabled, then really disable it!
 	 */
 	 */
-	if (!max_cpus || (enable_local_apic < 0)) {
-		printk(KERN_INFO "SMP mode deactivated.\n");
-		disable_smp();
+	if (!max_cpus) {
+		smp_found_config = 0;
+		printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
+		smpboot_clear_io_apic_irqs();
+		phys_cpu_present_map = physid_mask_of_physid(0);
+		cpu_set(0, cpu_sibling_map[0]);
+		cpu_set(0, cpu_core_map[0]);
 		return;
 		return;
 	}
 	}
 
 
+	connect_bsp_APIC();
+	setup_local_APIC();
+	map_cpu_to_logical_apicid();
+
+
 	setup_portio_remap();
 	setup_portio_remap();
 
 
 	/*
 	/*
@@ -1212,6 +1244,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
 	cpu_set(0, cpu_sibling_map[0]);
 	cpu_set(0, cpu_sibling_map[0]);
 	cpu_set(0, cpu_core_map[0]);
 	cpu_set(0, cpu_core_map[0]);
 
 
+	smpboot_setup_io_apic();
+
+	setup_boot_APIC_clock();
+
 	/*
 	/*
 	 * Synchronize the TSC with the AP
 	 * Synchronize the TSC with the AP
 	 */
 	 */

+ 1 - 11
arch/i386/kernel/time.c

@@ -440,8 +440,8 @@ static int time_init_device(void)
 
 
 device_initcall(time_init_device);
 device_initcall(time_init_device);
 
 
-extern void (*late_time_init)(void);
 #ifdef CONFIG_HPET_TIMER
 #ifdef CONFIG_HPET_TIMER
+extern void (*late_time_init)(void);
 /* Duplicate of time_init() below, with hpet_enable part added */
 /* Duplicate of time_init() below, with hpet_enable part added */
 static void __init hpet_time_init(void)
 static void __init hpet_time_init(void)
 {
 {
@@ -458,11 +458,6 @@ static void __init hpet_time_init(void)
 	printk(KERN_INFO "Using %s for high-res timesource\n",cur_timer->name);
 	printk(KERN_INFO "Using %s for high-res timesource\n",cur_timer->name);
 
 
 	time_init_hook();
 	time_init_hook();
-
-#ifdef CONFIG_X86_LOCAL_APIC
-	if (enable_local_apic >= 0)
-		APIC_late_time_init();
-#endif
 }
 }
 #endif
 #endif
 
 
@@ -487,9 +482,4 @@ void __init time_init(void)
 	printk(KERN_INFO "Using %s for high-res timesource\n",cur_timer->name);
 	printk(KERN_INFO "Using %s for high-res timesource\n",cur_timer->name);
 
 
 	time_init_hook();
 	time_init_hook();
-
-#ifdef CONFIG_X86_LOCAL_APIC
-	if (enable_local_apic >= 0)
-		late_time_init = APIC_late_time_init;
-#endif
 }
 }

+ 1 - 1
arch/m32r/kernel/setup_m32700ut.c

@@ -15,7 +15,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/m32r.h>
 #include <asm/m32r.h>

+ 1 - 1
arch/m32r/kernel/setup_mappi.c

@@ -11,7 +11,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/m32r.h>
 #include <asm/m32r.h>

+ 1 - 1
arch/m32r/kernel/setup_mappi2.c

@@ -11,7 +11,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/m32r.h>
 #include <asm/m32r.h>

+ 1 - 1
arch/m32r/kernel/setup_mappi3.c

@@ -11,7 +11,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/m32r.h>
 #include <asm/m32r.h>

+ 1 - 1
arch/m32r/kernel/setup_opsput.c

@@ -16,7 +16,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/m32r.h>
 #include <asm/m32r.h>

+ 1 - 0
arch/mips/au1000/common/platform.c

@@ -9,6 +9,7 @@
  */
  */
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/device.h>
 #include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/resource.h>
 #include <linux/resource.h>

+ 1 - 0
arch/ppc/platforms/4xx/ibm440ep.c

@@ -14,6 +14,7 @@
  */
  */
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/module.h>
+#include <linux/platform_device.h>
 #include <platforms/4xx/ibm440ep.h>
 #include <platforms/4xx/ibm440ep.h>
 #include <asm/ocp.h>
 #include <asm/ocp.h>
 #include <asm/ppc4xx_pic.h>
 #include <asm/ppc4xx_pic.h>

+ 1 - 0
arch/ppc/platforms/4xx/ibmstb4.c

@@ -10,6 +10,7 @@
  */
  */
 
 
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <asm/ocp.h>
 #include <asm/ocp.h>
 #include <asm/ppc4xx_pic.h>
 #include <asm/ppc4xx_pic.h>
 #include <platforms/4xx/ibmstb4.h>
 #include <platforms/4xx/ibmstb4.h>

+ 1 - 1
arch/ppc/platforms/4xx/redwood5.c

@@ -14,7 +14,7 @@
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/pagemap.h>
 #include <linux/pagemap.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/machdep.h>
 #include <asm/machdep.h>

+ 1 - 1
arch/ppc/platforms/4xx/redwood6.c

@@ -12,7 +12,7 @@
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/pagemap.h>
 #include <linux/pagemap.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/ppc4xx_pic.h>
 #include <asm/ppc4xx_pic.h>

+ 1 - 1
arch/ppc/platforms/chrp_pegasos_eth.c

@@ -13,7 +13,7 @@
 #include <linux/types.h>
 #include <linux/types.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
 
 

+ 1 - 0
arch/ppc/platforms/cpci690.c

@@ -21,6 +21,7 @@
 #include <linux/initrd.h>
 #include <linux/initrd.h>
 #include <linux/root_dev.h>
 #include <linux/root_dev.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
+#include <linux/platform_device.h>
 #include <asm/bootinfo.h>
 #include <asm/bootinfo.h>
 #include <asm/machdep.h>
 #include <asm/machdep.h>
 #include <asm/todc.h>
 #include <asm/todc.h>

+ 1 - 0
arch/ppc/platforms/ev64260.c

@@ -33,6 +33,7 @@
 #include <linux/console.h>
 #include <linux/console.h>
 #include <linux/initrd.h>
 #include <linux/initrd.h>
 #include <linux/root_dev.h>
 #include <linux/root_dev.h>
+#include <linux/platform_device.h>
 #if !defined(CONFIG_SERIAL_MPSC_CONSOLE)
 #if !defined(CONFIG_SERIAL_MPSC_CONSOLE)
 #include <linux/serial.h>
 #include <linux/serial.h>
 #include <linux/tty.h>
 #include <linux/tty.h>

+ 1 - 0
arch/ppc/platforms/ev64360.c

@@ -25,6 +25,7 @@
 #include <linux/bootmem.h>
 #include <linux/bootmem.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
+#include <linux/platform_device.h>
 #ifdef CONFIG_BOOTIMG
 #ifdef CONFIG_BOOTIMG
 #include <linux/bootimg.h>
 #include <linux/bootimg.h>
 #endif
 #endif

+ 1 - 0
arch/ppc/platforms/hdpu.c

@@ -22,6 +22,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/ide.h>
 #include <linux/ide.h>
 #include <linux/seq_file.h>
 #include <linux/seq_file.h>
+#include <linux/platform_device.h>
 
 
 #include <linux/initrd.h>
 #include <linux/initrd.h>
 #include <linux/root_dev.h>
 #include <linux/root_dev.h>

+ 1 - 0
arch/ppc/platforms/katana.c

@@ -29,6 +29,7 @@
 #include <linux/seq_file.h>
 #include <linux/seq_file.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mtd/physmap.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
+#include <linux/platform_device.h>
 #ifdef CONFIG_BOOTIMG
 #ifdef CONFIG_BOOTIMG
 #include <linux/bootimg.h>
 #include <linux/bootimg.h>
 #endif
 #endif

+ 1 - 0
arch/ppc/platforms/radstone_ppc7d.c

@@ -40,6 +40,7 @@
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
 #include <linux/netdevice.h>
 #include <linux/netdevice.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/system.h>
 #include <asm/system.h>
 #include <asm/pgtable.h>
 #include <asm/pgtable.h>

+ 1 - 0
arch/ppc/syslib/mpc52xx_devices.c

@@ -15,6 +15,7 @@
 
 
 #include <linux/fsl_devices.h>
 #include <linux/fsl_devices.h>
 #include <linux/resource.h>
 #include <linux/resource.h>
+#include <linux/platform_device.h>
 #include <asm/mpc52xx.h>
 #include <asm/mpc52xx.h>
 #include <asm/ppc_sys.h>
 #include <asm/ppc_sys.h>
 
 

+ 1 - 0
arch/ppc/syslib/mv64x60.c

@@ -19,6 +19,7 @@
 #include <linux/string.h>
 #include <linux/string.h>
 #include <linux/spinlock.h>
 #include <linux/spinlock.h>
 #include <linux/mv643xx.h>
 #include <linux/mv643xx.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/byteorder.h>
 #include <asm/byteorder.h>
 #include <asm/io.h>
 #include <asm/io.h>

+ 1 - 1
arch/ppc/syslib/pq2_devices.c

@@ -13,7 +13,7 @@
 
 
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/module.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <asm/cpm2.h>
 #include <asm/cpm2.h>
 #include <asm/irq.h>
 #include <asm/irq.h>

+ 1 - 1
arch/sh/boards/superh/microdev/setup.c

@@ -13,7 +13,7 @@
 
 
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/mach/irq.h>
 #include <asm/mach/irq.h>

+ 1 - 0
arch/um/drivers/net_kern.c

@@ -20,6 +20,7 @@
 #include "linux/ctype.h"
 #include "linux/ctype.h"
 #include "linux/bootmem.h"
 #include "linux/bootmem.h"
 #include "linux/ethtool.h"
 #include "linux/ethtool.h"
+#include "linux/platform_device.h"
 #include "asm/uaccess.h"
 #include "asm/uaccess.h"
 #include "user_util.h"
 #include "user_util.h"
 #include "kern_util.h"
 #include "kern_util.h"

+ 1 - 0
arch/um/drivers/ubd_kern.c

@@ -35,6 +35,7 @@
 #include "linux/blkpg.h"
 #include "linux/blkpg.h"
 #include "linux/genhd.h"
 #include "linux/genhd.h"
 #include "linux/spinlock.h"
 #include "linux/spinlock.h"
+#include "linux/platform_device.h"
 #include "asm/segment.h"
 #include "asm/segment.h"
 #include "asm/uaccess.h"
 #include "asm/uaccess.h"
 #include "asm/irq.h"
 #include "asm/irq.h"

+ 1 - 0
arch/xtensa/platform-iss/network.c

@@ -33,6 +33,7 @@
 #include <linux/ethtool.h>
 #include <linux/ethtool.h>
 #include <linux/rtnetlink.h>
 #include <linux/rtnetlink.h>
 #include <linux/timer.h>
 #include <linux/timer.h>
+#include <linux/platform_device.h>
 
 
 #include <xtensa/simcall.h>
 #include <xtensa/simcall.h>
 
 

+ 1 - 1
drivers/base/platform.c

@@ -10,7 +10,7 @@
  * information.
  * information.
  */
  */
 
 
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>

+ 1 - 3
drivers/block/cfq-iosched.c

@@ -2059,10 +2059,8 @@ static void cfq_put_cfqd(struct cfq_data *cfqd)
 	if (!atomic_dec_and_test(&cfqd->ref))
 	if (!atomic_dec_and_test(&cfqd->ref))
 		return;
 		return;
 
 
-	blk_put_queue(q);
-
 	cfq_shutdown_timer_wq(cfqd);
 	cfq_shutdown_timer_wq(cfqd);
-	q->elevator->elevator_data = NULL;
+	blk_put_queue(q);
 
 
 	mempool_destroy(cfqd->crq_pool);
 	mempool_destroy(cfqd->crq_pool);
 	kfree(cfqd->crq_hash);
 	kfree(cfqd->crq_hash);

+ 1 - 1
drivers/block/floppy.c

@@ -177,7 +177,7 @@ static int print_unex = 1;
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/devfs_fs_kernel.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/buffer_head.h>	/* for invalidate_buffers() */
 #include <linux/buffer_head.h>	/* for invalidate_buffers() */
 
 
 /*
 /*

+ 1 - 0
drivers/block/noop-iosched.c

@@ -9,6 +9,7 @@
 
 
 static void elevator_noop_add_request(request_queue_t *q, struct request *rq)
 static void elevator_noop_add_request(request_queue_t *q, struct request *rq)
 {
 {
+	rq->flags |= REQ_NOMERGE;
 	elv_dispatch_add_tail(q, rq);
 	elv_dispatch_add_tail(q, rq);
 }
 }
 
 

+ 1 - 1
drivers/char/s3c2410-rtc.c

@@ -20,7 +20,7 @@
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/string.h>
 #include <linux/string.h>
 #include <linux/init.h>
 #include <linux/init.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
 #include <linux/rtc.h>
 #include <linux/rtc.h>
 #include <linux/bcd.h>
 #include <linux/bcd.h>

+ 1 - 0
drivers/char/sonypi.c

@@ -48,6 +48,7 @@
 #include <linux/dmi.h>
 #include <linux/dmi.h>
 #include <linux/err.h>
 #include <linux/err.h>
 #include <linux/kfifo.h>
 #include <linux/kfifo.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>
 #include <asm/io.h>
 #include <asm/io.h>

+ 1 - 1
drivers/char/tb0219.c

@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
  */
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/module.h>

+ 1 - 1
drivers/char/vr41xx_giu.c

@@ -19,7 +19,7 @@
  *  along with this program; if not, write to the Free Software
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
  */
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/init.h>
 #include <linux/init.h>

+ 1 - 1
drivers/char/vr41xx_rtc.c

@@ -17,7 +17,7 @@
  *  along with this program; if not, write to the Free Software
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
  */
-#include <linux/device.h>
+#include <linux/platform_device.h>
 #include <linux/fs.h>
 #include <linux/fs.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
 #include <linux/ioport.h>

+ 1 - 1
drivers/char/watchdog/mpcore_wdt.c

@@ -29,7 +29,7 @@
 #include <linux/reboot.h>
 #include <linux/reboot.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/interrupt.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 
 #include <asm/hardware/arm_twd.h>
 #include <asm/hardware/arm_twd.h>
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>

部分文件因文件數量過多而無法顯示