From: NIIBE Y. <gn...@m1...> - 2002-01-24 11:03:28
|
Here's the change from mainline. (2.5.2 has been tagged.) Obviously, we need to do some work for drivers/pcmcia/hd64465_ss.c. Anyone? Updated to 2.5.3-pre4. * Documentation/Configure.help, Documentation/cachetlb.txt, arch/sh/vmlinux.lds.S, arch/sh/kernel/init_task.c, arch/sh/kernel/process.c, arch/sh/mm/cache-sh4.c, arch/sh/mm/fault.c, arch/sh/vmlinux.lds.S, drivers/net/Config.in, drivers/pcmcia/hd64465_ss.c, drivers/video/hitfb.c, drivers/video/pvr2fb.c, include/asm-sh/ide.h, include/asm-sh/pci.h, include/asm-sh/pgalloc.h, include/asm-sh/pgtable.h, include/linux/highmem.h, init/main.c, mm/memory.c: Include changes from mainline (2.5.3-pre4). * AGAINST-2.5.3-pre4: New file. * AGAINST-2.5.2: Removed. Index: Documentation/Configure.help =================================================================== RCS file: /cvsroot/linuxsh/linux/Documentation/Configure.help,v retrieving revision 1.4 diff -u -3 -p -r1.4 Configure.help --- Documentation/Configure.help 2002/01/15 07:59:52 1.4 +++ Documentation/Configure.help 2002/01/24 10:53:18 @@ -2433,6 +2433,14 @@ CONFIG_IP_NF_MATCH_LENGTH If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. If unsure, say `N'. +AH/ESP match support +CONFIG_IP_NF_MATCH_AH_ESP + These two match extensions (`ah' and `esp') allow you to match a + range of SPIs inside AH or ESP headers of IPSec packets. + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + TOS match support CONFIG_IP_NF_MATCH_TOS TOS matching allows you to match packets based on the Type Of @@ -2600,6 +2608,19 @@ CONFIG_IP_NF_MATCH_TCPMSS If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. If unsure, say `N'. +ULOG target support +CONFIG_IP_NF_TARGET_ULOG + This option adds a `ULOG' target, which allows you to create rules in + any iptables table. The packet is passed to a userspace logging + daemon using netlink multicast sockets; unlike the LOG target + which can only be viewed through syslog. + + The apropriate userspace logging daemon (ulogd) may be obtained from + http://www.gnumonks.org/projects/ulogd + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + LOG target support CONFIG_IP_NF_TARGET_LOG This option adds a `LOG' target, which allows you to create rules in @@ -2656,6 +2677,23 @@ CONFIG_IP6_NF_MATCH_MULTIPORT If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. If unsure, say `N'. +IPV6 queue handler (EXPERIMENTAL) +CONFIG_IP6_NF_QUEUE + + This option adds a queue handler to the kernel for IPv6 + packets which lets us to receive the filtered packets + with QUEUE target using libiptc as we can do with + the IPv4 now. + + (C) Fernando Anton 2001 + IPv64 Project - Work based in IPv64 draft by Arturo Azcorra. + Universidad Carlos III de Madrid + Universidad Politecnica de Alcala de Henares + email: fa...@it... + + If you want to compile it as a module, say M here and read + Documentation/modules.txt. If unsure, say `N'. + Owner match support CONFIG_IP6_NF_MATCH_OWNER Packet owner matching allows you to match locally-generated packets @@ -4128,6 +4166,16 @@ CONFIG_FB_L7200 This driver supports the L7200 Color LCD. Say Y if you want graphics support. +NeoMagic display support (EXPERIMENTAL) +CONFIG_FB_NEOMAGIC + This driver supports notebooks with NeoMagic PCI chips. + Say Y if you have such a graphics card. + + The driver is also available as a module ( = code which can be + inserted and removed from the running kernel whenever you want). The + module will be called neofb.o. If you want to compile it as a + module, say M here and read Documentation/modules.txt. + PowerMac "control" frame buffer device support CONFIG_FB_CONTROL This driver supports a frame buffer for the graphics adapter in the @@ -5949,32 +5997,6 @@ CONFIG_PACKET_MMAP If unsure, say N. -Kernel/User network link driver -CONFIG_NETLINK - This driver allows for two-way communication between the kernel and - user processes. It does so by creating a new socket family, - PF_NETLINK. Over this socket, the kernel can send and receive - datagrams carrying information. It is documented on many systems in - netlink(7). - - So far, the kernel uses this feature to publish some network related - information if you say Y to "Routing messages", below. You also need - to say Y here if you want to use arpd, a daemon that helps keep the - internal ARP cache (a mapping between IP addresses and hardware - addresses on the local network) small. The ethertap device, which - lets user space programs read and write raw Ethernet frames, also - needs the network link driver. - - If unsure, say Y. - -Routing messages -CONFIG_RTNETLINK - If you say Y here, user space programs can receive some network - related routing information over the netlink. 'rtmon', supplied - with the iproute2 package (<ftp://ftp.inr.ac.ru/>), can read and - interpret this data. Information sent to the kernel over this link - is ignored. - Netlink device emulation CONFIG_NETLINK_DEV This option will be removed soon. Any programs that want to use @@ -8158,6 +8180,19 @@ CONFIG_IEEE1394_VIDEO1394 this option only if you have an IEEE 1394 video device connected to an OHCI-1394 card. +OHCI-DV I/O support +CONFIG_IEEE1394_DV1394 + This driver allows you to transmit and receive DV (digital video) + streams on an OHCI-1394 card using a simple frame-oriented + interface. + + The user-space API for dv1394 is documented in dv1394.h. + + If you want to compile this as a module ( = code which can be + inserted in and removed from the running kernel whenever you want), + say M here and read <file:Documentation/modules.txt>. The module + will be called dv1394.o. + SBP-2 support (Harddisks etc.) CONFIG_IEEE1394_SBP2 This option enables you to use SBP-2 devices connected to your IEEE @@ -10133,6 +10168,12 @@ CONFIG_8139TOO_8129 instead of an internal one. Disabling this option will save some memory by making the code size smaller. If unsure, say Y. +Support for Dreamcast Broad Band Adaptor +CONFIG_8139TOO_DREAMCAST + This enables support for the SEGA Broad Band Adaptor for Dreamcast. + It uses 16KB buffer and doesn't support mapping main memory to DMA. + If unsure, say N. + SiS 900/7016 PCI Fast Ethernet Adapter support CONFIG_SIS900 This is a driver for the Fast Ethernet PCI network cards based on @@ -23873,6 +23914,14 @@ CONFIG_SH_DREAMCAST <http://www.m17n.org/linux-sh/dreamcast/>. There is a Dreamcast project is at <http://linuxdc.sourceforge.net/>. +SH-2000 +CONFIG_SH_SH2000 + SH-2000 is a single-board computer based around SH7709A chip + intended for embedded applications. + It has an Ethernet interface (CS8900A), direct connected + Compact Flash socket, three serial ports and PC-104 bus. + More information at <http://sh2000.sh-linux.org>. + BareCPU CONFIG_SH_UNKNOWN "Bare CPU" aka "unknown" means an SH-based system which is not one @@ -23916,6 +23965,14 @@ SH7750 CONFIG_CPU_SUBTYPE_SH7750 Select SH7750 if you have a 200 Mhz SH-4 HD6417750 CPU. +SH7751 +CONFIG_CPU_SUBTYPE_SH7751 + Select SH7750 if you have a 166 Mhz SH-4 HD6417751 CPU. + +ST40STB1 +CONFIG_CPU_SUBTYPE_ST40STB1 + Select ST40STB1 if you have a ST40STB1 CPU. + Physical memory start address CONFIG_MEMORY_START Computers built with Hitachi SuperH processors always @@ -24029,6 +24086,16 @@ CONFIG_GDB_CONSOLE would like kernel messages to be formatted into GDB $O packets so that GDB prints them as program output, say 'Y'. +802.1Q VLAN Support +CONFIG_VLAN_8021Q + Select this and you will be able to create 802.1Q VLAN interfaces on your + ethernet interfaces. 802.1Q VLAN supports almost everything a regular + ethernet interface does, including firewalling, bridging, and of course + IP traffic. You will need the 'vconfig' tool from the VLAN project in + order to effectively use VLANs. See the VLAN web page for more + information: http://www.candelatech.com/~greear/vlan.html If unsure, + you can safely say 'N'. + # # A couple of things I keep forgetting: # capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet, @@ -24078,10 +24145,10 @@ CONFIG_GDB_CONSOLE # LocalWords: filesystems smbfs ATA ppp PCTech RZ www powerquest txt CMD ESDI # LocalWords: chipset FB multicast MROUTE appletalk ifconfig IBMTR multiport # LocalWords: Multisession STALDRV EasyIO EC EasyConnection ISTALLION ONboard -# LocalWords: Brumby pci TNC cis ohio faq usenet NETLINK dev hydra ca Tyne mem +# LocalWords: Brumby pci TNC cis ohio faq usenet dev hydra ca Tyne mem # LocalWords: carleton DECstation SUNFD JENSEN Noname XXXM SLiRP LILO's amifb # LocalWords: pppd Zilog ZS SRM bootloader ez mainmenu rarp ipfwadm paride pcd -# LocalWords: RTNETLINK mknod xos MTU lwared Macs netatalk macs cs Wolff +# LocalWords: mknod xos MTU lwared Macs netatalk macs cs Wolff # LocalWords: dartmouth flowerpt MultiMaster FlashPoint tudelft etherexpress # LocalWords: ICL EtherTeam ETH IDESCSI TXC SmartRAID SmartCache httpd sjc dlp # LocalWords: thesphere TwoServers BOOTP DHCP ncpfs BPQETHER BPQ MG HIPPI cern Index: Documentation/cachetlb.txt =================================================================== RCS file: /cvsroot/linuxsh/linux/Documentation/cachetlb.txt,v retrieving revision 1.2 diff -u -3 -p -r1.2 cachetlb.txt --- Documentation/cachetlb.txt 2001/12/03 22:15:34 1.2 +++ Documentation/cachetlb.txt 2002/01/24 10:53:18 @@ -49,17 +49,18 @@ changes occur: page table operations such as what happens during fork, and exec. -3) void flush_tlb_range(struct mm_struct *mm, +3) void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) Here we are flushing a specific range of (user) virtual address translations from the TLB. After running, this interface must make sure that any previous page table - modifications for the address space 'mm' in the range 'start' - to 'end' will be visible to the cpu. That is, after running, - there will be no entries in the TLB for 'mm' for virtual - addresses in the range 'start' to 'end'. + modifications for the address space 'vma->vm_mm' in the range + 'start' to 'end' will be visible to the cpu. That is, after + running, here will be no entries in the TLB for 'mm' for + virtual addresses in the range 'start' to 'end'. + The "vma" is the backing store being used for the region. Primarily, this is used for munmap() type operations. The interface is provided in hopes that the port can find @@ -130,9 +131,9 @@ the sequence will be in one of the follo change_all_page_tables_of(mm); flush_tlb_mm(mm); - 2) flush_cache_range(mm, start, end); + 2) flush_cache_range(vma, start, end); change_range_of_page_tables(mm, start, end); - flush_tlb_range(mm, start, end); + flush_tlb_range(vma, start, end); 3) flush_cache_page(vma, page); set_pte(pte_pointer, new_pte_val); @@ -173,14 +174,15 @@ Here are the routines, one by one: page table operations such as what happens during fork, exit, and exec. -3) void flush_cache_range(struct mm_struct *mm, +3) void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) Here we are flushing a specific range of (user) virtual addresses from the cache. After running, there will be no - entries in the cache for 'mm' for virtual addresses in the - range 'start' to 'end'. + entries in the cache for 'vma->vm_mm' for virtual addresses in + the range 'start' to 'end'. + The "vma" is the backing store being used for the region. Primarily, this is used for munmap() type operations. The interface is provided in hopes that the port can find @@ -275,7 +277,7 @@ Here is the new interface: for example, uses this technique. The "address" parameter tells the virtual address where the - user will ultimately this page mapped. + user will ultimately have this page mapped. If D-cache aliasing is not an issue, these two routines may simply call memcpy/memset directly and do nothing more. Index: arch/sh/vmlinux.lds.S =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/vmlinux.lds.S,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 vmlinux.lds.S --- arch/sh/vmlinux.lds.S 2001/10/15 20:44:47 1.1.1.1 +++ arch/sh/vmlinux.lds.S 2002/01/24 10:53:18 @@ -63,7 +63,15 @@ SECTIONS .setup.init : { *(.setup.init) } __setup_end = .; __initcall_start = .; - .initcall.init : { *(.initcall.init) } + .initcall.init : { + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) + *(.initcall7.init) + } __initcall_end = .; __machvec_start = .; .machvec.init : { *(.machvec.init) } Index: arch/sh/kernel/init_task.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/init_task.c,v retrieving revision 1.1 diff -u -3 -p -r1.1 init_task.c --- arch/sh/kernel/init_task.c 2001/10/15 20:44:48 1.1 +++ arch/sh/kernel/init_task.c 2002/01/24 10:53:18 @@ -1,6 +1,7 @@ #include <linux/mm.h> #include <linux/sched.h> #include <linux/init.h> +#include <linux/init_task.h> #include <asm/uaccess.h> #include <asm/pgtable.h> Index: arch/sh/kernel/process.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/process.c,v retrieving revision 1.2 diff -u -3 -p -r1.2 process.c --- arch/sh/kernel/process.c 2002/01/15 07:59:52 1.2 +++ arch/sh/kernel/process.c 2002/01/24 10:53:18 @@ -42,11 +42,11 @@ void cpu_idle(void *unused) /* endless idle loop with no priority at all */ while (1) { if (hlt_counter) { - if (current->need_resched) + if (need_resched()) break; } else { __cli(); - while (!current->need_resched) { + while (!need_resched()) { __sti(); asm volatile("sleep" : : : "memory"); __cli(); Index: arch/sh/mm/cache-sh4.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/cache-sh4.c,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 cache-sh4.c --- arch/sh/mm/cache-sh4.c 2001/10/15 20:44:53 1.1.1.1 +++ arch/sh/mm/cache-sh4.c 2002/01/24 10:53:18 @@ -295,7 +295,7 @@ void flush_cache_mm(struct mm_struct *mm * Flushing the cache lines for U0 only isn't enough. * We need to flush for P1 too, which may contain aliases. */ -void flush_cache_range(struct mm_struct *mm, unsigned long start, +void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { /* Index: arch/sh/mm/fault.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/fault.c,v retrieving revision 1.3 diff -u -3 -p -r1.3 fault.c --- arch/sh/mm/fault.c 2002/01/15 07:59:52 1.3 +++ arch/sh/mm/fault.c 2002/01/24 10:53:18 @@ -375,9 +375,11 @@ void flush_tlb_page(struct vm_area_struc } } -void flush_tlb_range(struct mm_struct *mm, unsigned long start, +void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { + struct mm_struct *mm = vma->vm_mm; + if (mm->context != NO_CONTEXT) { unsigned long flags; int size; Index: drivers/net/Config.in =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/Config.in,v retrieving revision 1.2 diff -u -3 -p -r1.2 Config.in --- drivers/net/Config.in 2001/12/03 22:15:34 1.2 +++ drivers/net/Config.in 2002/01/24 10:53:18 @@ -10,9 +10,7 @@ tristate 'Bonding driver support' CONFIG tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER tristate 'Universal TUN/TAP device driver support' CONFIG_TUN if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then - if [ "$CONFIG_NETLINK" = "y" ]; then - tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP - fi + tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP fi if [ "$CONFIG_ISAPNP" = "y" -o "$CONFIG_ISAPNP" = "m" ]; then @@ -294,7 +292,6 @@ comment 'Wireless LAN (non-hamradio)' bool 'Wireless LAN (non-hamradio)' CONFIG_NET_RADIO if [ "$CONFIG_NET_RADIO" = "y" ]; then dep_tristate ' STRIP (Metricom starmode radio IP)' CONFIG_STRIP $CONFIG_INET - tristate ' AT&T WaveLAN & DEC RoamAbout DS support' CONFIG_WAVELAN tristate ' Aironet Arlan 655 & IC2200 DS support' CONFIG_ARLAN tristate ' Aironet 4500/4800 series adapters' CONFIG_AIRONET4500 dep_tristate ' Aironet 4500/4800 ISA/PCI/PNP/365 support ' CONFIG_AIRONET4500_NONCS $CONFIG_AIRONET4500 Index: drivers/pcmcia/hd64465_ss.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/pcmcia/hd64465_ss.c,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 hd64465_ss.c --- drivers/pcmcia/hd64465_ss.c 2001/10/15 20:45:05 1.1.1.1 +++ drivers/pcmcia/hd64465_ss.c 2002/01/24 10:53:18 @@ -673,6 +673,10 @@ static int hs_set_io_map(unsigned int so */ DPRINTK("remap_page_range(vaddr=0x%08lx, paddr=0x%08lx, size=0x%08lxx)\n", vaddrbase + pstart, paddrbase + pstart, psize); +#error This does not work. Firstly remap_page_range() uses current->mm for +#error the address space, which is wrong for kernel mappings. remap_page_range +#error also does flush_{cache,tlb}_range() which ONLY works for user mappings. +#error Next, remap_page_range() now wants to take a vm_area_struct arg. remap_page_range(vaddrbase + pstart, paddrbase + pstart, psize, prot); /* Index: drivers/video/hitfb.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/video/hitfb.c,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 hitfb.c --- drivers/video/hitfb.c 2001/10/15 20:45:05 1.1.1.1 +++ drivers/video/hitfb.c 2002/01/24 10:53:18 @@ -344,7 +344,7 @@ static struct fb_ops hitfb_ops = { int __init hitfb_init(void) { strcpy(fb_info.gen.info.modename, "Hitachi HD64461"); - fb_info.gen.info.node = -1; + fb_info.gen.info.node = NODEV; fb_info.gen.info.flags = FBINFO_FLAG_DEFAULT; fb_info.gen.info.fbops = &hitfb_ops; fb_info.gen.info.disp = &fb_info.disp; Index: drivers/video/pvr2fb.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/video/pvr2fb.c,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 pvr2fb.c --- drivers/video/pvr2fb.c 2001/10/15 20:45:05 1.1.1.1 +++ drivers/video/pvr2fb.c 2002/01/24 10:53:18 @@ -1034,7 +1034,7 @@ int __init pvr2fb_init(void) strcpy(fb_info.modename, pvr2fb_name); fb_info.changevar = NULL; - fb_info.node = -1; + fb_info.node = NODEV; fb_info.fbops = &pvr2fb_ops; fb_info.disp = &disp; fb_info.switch_con = &pvr2fbcon_switch; Index: include/asm-sh/ide.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/ide.h,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 ide.h --- include/asm-sh/ide.h 2001/10/15 20:45:08 1.1.1.1 +++ include/asm-sh/ide.h 2002/01/24 10:53:18 @@ -116,7 +116,19 @@ typedef union { unsigned lba : 1; /* using LBA instead of CHS */ unsigned bit7 : 1; /* always 1 */ } b; - } select_t; +} select_t; + +typedef union { + unsigned all : 8; /* all of the bits together */ + struct { + unsigned bit0 : 1; + unsigned nIEN : 1; /* device INTRQ to host */ + unsigned SRST : 1; /* host soft reset bit */ + unsigned bit3 : 1; /* ATA-2 thingy */ + unsigned reserved456 : 3; + unsigned HOB : 1; /* 48-bit address ordering */ + } b; +} control_t; #define ide_request_irq(irq,hand,flg,dev,id) request_irq((irq),(hand),(flg),(dev),(id)) #define ide_free_irq(irq,dev_id) free_irq((irq), (dev_id)) Index: include/asm-sh/pci.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pci.h,v retrieving revision 1.3 diff -u -3 -p -r1.3 pci.h --- include/asm-sh/pci.h 2002/01/20 07:32:17 1.3 +++ include/asm-sh/pci.h 2002/01/24 10:53:18 @@ -95,6 +95,31 @@ static inline dma_addr_t pci_map_single( return virt_to_bus(ptr); } +/* pci_unmap_{single,page} being a nop depends upon the + * configuration. + */ +#ifdef CONFIG_SH_PCIDMA_NONCOHERENT +#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) \ + dma_addr_t ADDR_NAME; +#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) \ + __u32 LEN_NAME; +#define pci_unmap_addr(PTR, ADDR_NAME) \ + ((PTR)->ADDR_NAME) +#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) \ + (((PTR)->ADDR_NAME) = (VAL)) +#define pci_unmap_len(PTR, LEN_NAME) \ + ((PTR)->LEN_NAME) +#define pci_unmap_len_set(PTR, LEN_NAME, VAL) \ + (((PTR)->LEN_NAME) = (VAL)) +#else +#define DECLARE_PCI_UNMAP_ADDR(ADDR_NAME) +#define DECLARE_PCI_UNMAP_LEN(LEN_NAME) +#define pci_unmap_addr(PTR, ADDR_NAME) (0) +#define pci_unmap_addr_set(PTR, ADDR_NAME, VAL) do { } while (0) +#define pci_unmap_len(PTR, LEN_NAME) (0) +#define pci_unmap_len_set(PTR, LEN_NAME, VAL) do { } while (0) +#endif + /* Unmap a single streaming mode DMA translation. The dma_addr and size * must match what was provided for in a previous pci_map_single call. All * other usages are undefined. Index: include/asm-sh/pgalloc.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgalloc.h,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 pgalloc.h --- include/asm-sh/pgalloc.h 2001/10/15 20:45:11 1.1.1.1 +++ include/asm-sh/pgalloc.h 2002/01/24 10:53:18 @@ -78,14 +78,14 @@ static inline int do_check_pgt_cache(int * - flush_tlb_all() flushes all processes TLBs * - flush_tlb_mm(mm) flushes the specified mm context TLB's * - flush_tlb_page(vma, vmaddr) flushes one page - * - flush_tlb_range(mm, start, end) flushes a range of pages + * - flush_tlb_range(vma, start, end) flushes a range of pages * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables */ extern void flush_tlb(void); extern void flush_tlb_all(void); extern void flush_tlb_mm(struct mm_struct *mm); -extern void flush_tlb_range(struct mm_struct *mm, unsigned long start, +extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page); extern void __flush_tlb_page(unsigned long asid, unsigned long page); Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.3 diff -u -3 -p -r1.3 pgtable.h --- include/asm-sh/pgtable.h 2001/12/22 10:26:56 1.3 +++ include/asm-sh/pgtable.h 2002/01/24 10:53:18 @@ -23,7 +23,7 @@ extern void paging_init(void); * - flush_cache_all() flushes entire cache * - flush_cache_mm(mm) flushes the specified mm context's cache lines * - flush_cache_page(mm, vmaddr) flushes a single page - * - flush_cache_range(mm, start, end) flushes a range of pages + * - flush_cache_range(vma, start, end) flushes a range of pages * * - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache * - flush_page_to_ram(page) write back kernel page to ram @@ -35,7 +35,7 @@ extern void paging_init(void); */ #define flush_cache_all() do { } while (0) #define flush_cache_mm(mm) do { } while (0) -#define flush_cache_range(mm, start, end) do { } while (0) +#define flush_cache_range(vma, start, end) do { } while (0) #define flush_cache_page(vma, vmaddr) do { } while (0) #define flush_page_to_ram(page) do { } while (0) #define flush_dcache_page(page) do { } while (0) @@ -55,7 +55,7 @@ extern void paging_init(void); extern void flush_cache_all(void); extern void flush_cache_mm(struct mm_struct *mm); -extern void flush_cache_range(struct mm_struct *mm, unsigned long start, +extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr); extern void flush_dcache_page(struct page *pg); Index: include/linux/highmem.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/linux/highmem.h,v retrieving revision 1.3 diff -u -3 -p -r1.3 highmem.h --- include/linux/highmem.h 2002/01/07 03:57:48 1.3 +++ include/linux/highmem.h 2002/01/24 10:53:18 @@ -95,17 +95,6 @@ static inline void clear_highpage(struct kunmap(page); } -static inline void memclear_highpage(struct page *page, unsigned int offset, unsigned int size) -{ - char *kaddr; - - if (offset + size > PAGE_SIZE) - BUG(); - kaddr = kmap(page); - memset(kaddr + offset, 0, size); - kunmap(page); -} - /* * Same but also flushes aliased cache contents to RAM. */ @@ -117,6 +106,7 @@ static inline void memclear_highpage_flu BUG(); kaddr = kmap(page); memset(kaddr + offset, 0, size); + flush_dcache_page(page); flush_page_to_ram(page); kunmap(page); } @@ -130,17 +120,6 @@ static inline void copy_user_highpage(st copy_user_page(vto, vfrom, vaddr); kunmap_atomic(vfrom, KM_USER0); kunmap_atomic(vto, KM_USER1); -} - -static inline void copy_highpage(struct page *to, struct page *from) -{ - char *vfrom, *vto; - - vfrom = kmap(from); - vto = kmap(to); - copy_page(vto, vfrom); - kunmap(from); - kunmap(to); } #endif /* _LINUX_HIGHMEM_H */ Index: init/main.c =================================================================== RCS file: /cvsroot/linuxsh/linux/init/main.c,v retrieving revision 1.5 diff -u -3 -p -r1.5 main.c --- init/main.c 2002/01/15 08:16:56 1.5 +++ init/main.c 2002/01/24 10:53:19 @@ -38,35 +38,10 @@ #include <asm/ccwcache.h> #endif -#ifdef CONFIG_PCI -#include <linux/pci.h> -#endif - -#ifdef CONFIG_DIO -#include <linux/dio.h> -#endif - -#ifdef CONFIG_ZORRO -#include <linux/zorro.h> -#endif - #ifdef CONFIG_MTRR # include <asm/mtrr.h> #endif -#ifdef CONFIG_NUBUS -#include <linux/nubus.h> -#endif - -#ifdef CONFIG_ISAPNP -#include <linux/isapnp.h> -#endif - -#ifdef CONFIG_IRDA -extern int irda_proto_init(void); -extern int irda_device_init(void); -#endif - #ifdef CONFIG_X86_LOCAL_APIC #include <asm/smp.h> #endif @@ -92,10 +67,8 @@ extern void sock_init(void); extern void fork_init(unsigned long); extern void mca_init(void); extern void sbus_init(void); -extern void ppc_init(void); extern void sysctl_init(void); extern void signals_init(void); -extern int init_pcmcia_ds(void); extern void free_initmem(void); @@ -103,8 +76,6 @@ extern void free_initmem(void); extern void tc_init(void); #endif -extern void ecard_init(void); - #if defined(CONFIG_SYSVIPC) extern void ipc_init(void); #endif @@ -290,8 +261,6 @@ static void __init parse_options(char *l extern void setup_arch(char **); extern void cpu_idle(void); -unsigned long wait_init_idle; - #ifndef CONFIG_SMP #ifdef CONFIG_X86_LOCAL_APIC @@ -305,6 +274,16 @@ static void __init smp_init(void) #else +static unsigned long __initdata wait_init_idle; + +void __init idle_startup_done(void) +{ + clear_bit(smp_processor_id(), &wait_init_idle); + while (wait_init_idle) { + cpu_relax(); + barrier(); + } +} /* Called by boot processor to activate the rest. */ static void __init smp_init(void) @@ -315,6 +294,7 @@ static void __init smp_init(void) smp_threads_ready=1; smp_commence(); + idle_startup_done(); } #endif @@ -411,12 +391,15 @@ asmlinkage void __init start_kernel(void check_bugs(); printk("POSIX conformance testing by UNIFIX\n"); + init_idle(); /* * We count on the initial thread going ok * Like idlers init is an unlocked kernel thread, which will * make syscalls (and thus be locked). */ smp_init(); + + /* Do the rest non-__init'ed, we're now alive */ rest_init(); } @@ -480,50 +463,11 @@ static void __init do_basic_setup(void) /* bring up the device tree */ device_driver_init(); -#ifdef CONFIG_PCI - pci_init(); -#endif -#ifdef CONFIG_SBUS - sbus_init(); -#endif -#if defined(CONFIG_PPC) - ppc_init(); -#endif -#ifdef CONFIG_MCA - mca_init(); -#endif -#ifdef CONFIG_ARCH_ACORN - ecard_init(); -#endif -#ifdef CONFIG_ZORRO - zorro_init(); -#endif -#ifdef CONFIG_DIO - dio_init(); -#endif -#ifdef CONFIG_NUBUS - nubus_init(); -#endif -#ifdef CONFIG_ISAPNP - isapnp_init(); -#endif -#ifdef CONFIG_TC - tc_init(); -#endif - /* Networking initialization needs a process context */ sock_init(); start_context_thread(); do_initcalls(); - -#ifdef CONFIG_IRDA - irda_proto_init(); - irda_device_init(); /* Must be done after protocol initialization */ -#endif -#ifdef CONFIG_PCMCIA - init_pcmcia_ds(); /* Do this last */ -#endif } extern void prepare_namespace(void); Index: mm/memory.c =================================================================== RCS file: /cvsroot/linuxsh/linux/mm/memory.c,v retrieving revision 1.5 diff -u -3 -p -r1.5 memory.c --- mm/memory.c 2002/01/15 07:59:52 1.5 +++ mm/memory.c 2002/01/24 10:53:19 @@ -355,8 +355,9 @@ static inline int zap_pmd_range(mmu_gath /* * remove user pages in a given range. */ -void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size) +void zap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size) { + struct mm_struct *mm = vma->vm_mm; mmu_gather_t *tlb; pgd_t * dir; unsigned long start = address, end = address + size; @@ -374,8 +375,8 @@ void zap_page_range(struct mm_struct *mm if (address >= end) BUG(); spin_lock(&mm->page_table_lock); - flush_cache_range(mm, address, end); - tlb = tlb_gather_mmu(mm); + flush_cache_range(vma, address, end); + tlb = tlb_gather_mmu(vma); do { freed += zap_pmd_range(tlb, dir, address, end - address); @@ -757,16 +758,16 @@ static inline int zeromap_pmd_range(stru return 0; } -int zeromap_page_range(unsigned long address, unsigned long size, pgprot_t prot) +int zeromap_page_range(struct vm_area_struct *vma, unsigned long address, unsigned long size, pgprot_t prot) { int error = 0; pgd_t * dir; unsigned long beg = address; unsigned long end = address + size; - struct mm_struct *mm = current->mm; + struct mm_struct *mm = vma->vm_mm; dir = pgd_offset(mm, address); - flush_cache_range(mm, beg, end); + flush_cache_range(vma, beg, end); if (address >= end) BUG(); @@ -783,7 +784,7 @@ int zeromap_page_range(unsigned long add dir++; } while (address && (address < end)); spin_unlock(&mm->page_table_lock); - flush_tlb_range(mm, beg, end); + flush_tlb_range(vma, beg, end); return error; } @@ -838,17 +839,17 @@ static inline int remap_pmd_range(struct } /* Note: this is only safe if the mm semaphore is held when called. */ -int remap_page_range(unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot) +int remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long phys_addr, unsigned long size, pgprot_t prot) { int error = 0; pgd_t * dir; unsigned long beg = from; unsigned long end = from + size; - struct mm_struct *mm = current->mm; + struct mm_struct *mm = vma->vm_mm; phys_addr -= from; dir = pgd_offset(mm, from); - flush_cache_range(mm, beg, end); + flush_cache_range(vma, beg, end); if (from >= end) BUG(); @@ -865,7 +866,7 @@ int remap_page_range(unsigned long from, dir++; } while (from && (from < end)); spin_unlock(&mm->page_table_lock); - flush_tlb_range(mm, beg, end); + flush_tlb_range(vma, beg, end); return error; } @@ -980,7 +981,6 @@ no_mem: static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long pgoff) { do { - struct mm_struct *mm = mpnt->vm_mm; unsigned long start = mpnt->vm_start; unsigned long end = mpnt->vm_end; unsigned long len = end - start; @@ -988,7 +988,7 @@ static void vmtruncate_list(struct vm_ar /* mapping wholly truncated? */ if (mpnt->vm_pgoff >= pgoff) { - zap_page_range(mm, start, len); + zap_page_range(mpnt, start, len); continue; } @@ -1001,7 +1001,7 @@ static void vmtruncate_list(struct vm_ar /* Ok, partially affected.. */ start += diff << PAGE_SHIFT; len = (len - diff) << PAGE_SHIFT; - zap_page_range(mm, start, len); + zap_page_range(mpnt, start, len); } while ((mpnt = mpnt->vm_next_share) != NULL); } @@ -1242,7 +1242,7 @@ static int do_no_page(struct mm_struct * page_cache_release(new_page); return -1; } - copy_highpage(page, new_page); + copy_user_highpage(page, new_page, address); page_cache_release(new_page); lru_cache_add(page); new_page = page; |