You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(11) |
Jun
(66) |
Jul
(16) |
Aug
(2) |
Sep
(7) |
Oct
(17) |
Nov
(1) |
Dec
(220) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(154) |
Feb
(167) |
Mar
(159) |
Apr
(172) |
May
(35) |
Jun
(58) |
Jul
(97) |
Aug
(285) |
Sep
(139) |
Oct
(252) |
Nov
(8) |
Dec
(3) |
2004 |
Jan
(13) |
Feb
(159) |
Mar
(136) |
Apr
(33) |
May
(50) |
Jun
(42) |
Jul
(140) |
Aug
(42) |
Sep
(199) |
Oct
(31) |
Nov
(55) |
Dec
|
2005 |
Jan
|
Feb
(12) |
Mar
(214) |
Apr
(119) |
May
(21) |
Jun
(2) |
Jul
(127) |
Aug
(10) |
Sep
(3) |
Oct
(24) |
Nov
(1) |
Dec
|
2006 |
Jan
|
Feb
|
Mar
|
Apr
(45) |
May
(13) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
(26) |
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(35) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: Kenn H. <ke...@us...> - 2002-12-07 00:32:26
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/arm/mm In directory sc8-pr-cvs1:/tmp/cvs-serv26432/arch/arm/mm Removed Files: armv4-early-abort.S armv4t-early-abort.S armv4t-late-abort.S armv5ej-early-abort.S Log Message: Merge with 2.5.7 --- armv4-early-abort.S DELETED --- --- armv4t-early-abort.S DELETED --- --- armv4t-late-abort.S DELETED --- --- armv5ej-early-abort.S DELETED --- |
From: Kenn H. <ke...@us...> - 2002-12-07 00:32:25
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/arm/lib In directory sc8-pr-cvs1:/tmp/cvs-serv26432/arch/arm/lib Removed Files: copy_page-armv3.S copy_page-armv4.S copy_page-armv4mc.S copy_page-armv5te.S Log Message: Merge with 2.5.7 --- copy_page-armv3.S DELETED --- --- copy_page-armv4.S DELETED --- --- copy_page-armv4mc.S DELETED --- --- copy_page-armv5te.S DELETED --- |
Update of /cvsroot/linux-vax/kernel-2.5/Documentation/sound In directory sc8-pr-cvs1:/tmp/cvs-serv26016/Documentation/sound Removed Files: AD1816 ALS AWE32 AudioExcelDSP16 CMI8330 CMI8338 CS4232 ChangeLog.awe ChangeLog.multisound ESS ESS1868 INSTALL.awe Introduction MAD16 Maestro Maestro3 MultiSound NEWS NM256 OPL3 OPL3-SA OPL3-SA2 Opti PAS16 PSS PSS-updates README.OSS README.awe README.modules README.ymfsb SoundPro Soundblaster Tropez+ VIA-chipset VIBRA16 WaveArtist Wavefront btaudio cs46xx es1370 es1371 mwave solo1 sonicvibes ultrasound vwsnd Log Message: Merge with 2.5.7 --- AD1816 DELETED --- --- ALS DELETED --- --- AWE32 DELETED --- --- AudioExcelDSP16 DELETED --- --- CMI8330 DELETED --- --- CMI8338 DELETED --- --- CS4232 DELETED --- --- ChangeLog.awe DELETED --- --- ChangeLog.multisound DELETED --- --- ESS DELETED --- --- ESS1868 DELETED --- --- INSTALL.awe DELETED --- --- Introduction DELETED --- --- MAD16 DELETED --- --- Maestro DELETED --- --- Maestro3 DELETED --- --- MultiSound DELETED --- --- NEWS DELETED --- --- NM256 DELETED --- --- OPL3 DELETED --- --- OPL3-SA DELETED --- --- OPL3-SA2 DELETED --- --- Opti DELETED --- --- PAS16 DELETED --- --- PSS DELETED --- --- PSS-updates DELETED --- --- README.OSS DELETED --- --- README.awe DELETED --- --- README.modules DELETED --- --- README.ymfsb DELETED --- --- SoundPro DELETED --- --- Soundblaster DELETED --- --- Tropez+ DELETED --- --- VIA-chipset DELETED --- --- VIBRA16 DELETED --- --- WaveArtist DELETED --- --- Wavefront DELETED --- --- btaudio DELETED --- --- cs46xx DELETED --- --- es1370 DELETED --- --- es1371 DELETED --- --- mwave DELETED --- --- solo1 DELETED --- --- sonicvibes DELETED --- --- ultrasound DELETED --- --- vwsnd DELETED --- |
From: Kenn H. <ke...@us...> - 2002-12-07 00:16:52
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax In directory sc8-pr-cvs1:/tmp/cvs-serv15601 Modified Files: mman.h Log Message: 2.5.7 needs a PROT_SEM definition Index: mman.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mman.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- mman.h 20 May 2002 00:33:39 -0000 1.3 +++ mman.h 7 Dec 2002 00:16:49 -0000 1.4 @@ -4,6 +4,7 @@ #define PROT_READ 0x1 /* page can be read */ #define PROT_WRITE 0x2 /* page can be written */ #define PROT_EXEC 0x4 /* page can be executed */ +#define PROT_SEM 0x4 /* page may be used for atomic ops */ #define PROT_NONE 0x0 /* page can not be accessed */ #define MAP_SHARED 0x01 /* Share changes */ |
From: Kenn H. <ke...@us...> - 2002-12-07 00:15:42
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax In directory sc8-pr-cvs1:/tmp/cvs-serv14648 Modified Files: system.h Log Message: smp_wmb needed for new sys_futex syscall Index: system.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/system.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- system.h 1 Dec 2002 23:56:26 -0000 1.4 +++ system.h 7 Dec 2002 00:15:39 -0000 1.5 @@ -51,7 +51,10 @@ #define wmb() mb() #define set_mb(var, value) do { xchg(&var, value); } while (0) #define set_wmb(var, value) do { var = value; wmb(); } while (0) + #define smp_mb() mb() +#define smp_rmb() rmb() +#define smp_wmb() wmb() #define getipl() __mfpr(PR_IPL) |
From: Kenn H. <ke...@us...> - 2002-12-07 00:15:00
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/vax/kernel In directory sc8-pr-cvs1:/tmp/cvs-serv13999 Modified Files: ptrace.c signal.c Log Message: p_pptr member of task struct renamed to parent Index: ptrace.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/kernel/ptrace.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ptrace.c 29 Oct 2002 00:52:50 -0000 1.6 +++ ptrace.c 7 Dec 2002 00:14:56 -0000 1.7 @@ -187,9 +187,9 @@ child->ptrace |= PT_PTRACED; write_lock_irq(&tasklist_lock); - if (child->p_pptr != current) { + if (child->parent != current) { REMOVE_LINKS(child); - child->p_pptr = current; + child->parent = current; SET_LINKS(child); } write_unlock_irq(&tasklist_lock); @@ -205,7 +205,7 @@ if (request != PTRACE_KILL) goto out_tsk; } - if (child->p_pptr != current) + if (child->parent != current) goto out_tsk; switch (request) { case PTRACE_PEEKTEXT: /* read word at location addr. */ Index: signal.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/kernel/signal.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- signal.c 1 Dec 2002 23:58:45 -0000 1.5 +++ signal.c 7 Dec 2002 00:14:56 -0000 1.6 @@ -701,8 +701,8 @@ info.si_signo = signr; info.si_errno = 0; info.si_code = SI_USER; - info.si_pid = current->p_pptr->pid; - info.si_uid = current->p_pptr->uid; + info.si_pid = current->parent->pid; + info.si_uid = current->parent->uid; } /* If the (new) signal is now blocked, requeue it. */ @@ -746,7 +746,7 @@ case SIGSTOP: current->state = TASK_STOPPED; current->exit_code = signr; - if (!(current->p_pptr->sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) + if (!(current->parent->sig->action[SIGCHLD-1].sa.sa_flags & SA_NOCLDSTOP)) notify_parent(current, SIGCHLD); schedule(); continue; |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:53
|
Update of /cvsroot/linux-vax/kernel-2.5/init In directory sc8-pr-cvs1:/tmp/cvs-serv4896/init Modified Files: main.c Log Message: Merge Linus' 2.5.6 release Index: main.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/init/main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- main.c 29 Oct 2002 00:52:51 -0000 1.6 +++ main.c 4 Dec 2002 10:48:49 -0000 1.7 @@ -274,8 +274,35 @@ #define smp_init() do { } while (0) #endif +static inline void setup_per_cpu_areas(void) +{ +} #else +#ifndef __HAVE_ARCH_PER_CPU +unsigned long __per_cpu_offset[NR_CPUS]; + +static void __init setup_per_cpu_areas(void) +{ + unsigned long size, i; + char *ptr; + /* Created by linker magic */ + extern char __per_cpu_start[], __per_cpu_end[]; + + /* Copy section for each CPU (we discard the original) */ + size = ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES); + if (!size) + return; + + ptr = alloc_bootmem(size * NR_CPUS); + + for (i = 0; i < NR_CPUS; i++, ptr += size) { + __per_cpu_offset[i] = ptr - __per_cpu_start; + memcpy(ptr, __per_cpu_start, size); + } +} +#endif /* !__HAVE_ARCH_PER_CPU */ + /* Called by boot processor to activate the rest. */ static void __init smp_init(void) { @@ -318,6 +345,7 @@ lock_kernel(); printk(linux_banner); setup_arch(&command_line); + setup_per_cpu_areas(); printk("Kernel command line: %s\n", saved_command_line); parse_options(command_line); trap_init(); @@ -358,9 +386,8 @@ #endif mem_init(); kmem_cache_sizes_init(); -#if defined(CONFIG_X86_PAE) pgtable_cache_init(); -#endif + mempages = num_physpages; fork_init(mempages); @@ -382,6 +409,7 @@ printk("POSIX conformance testing by UNIFIX\n"); init_idle(current, smp_processor_id()); + /* * We count on the initial thread going ok * Like idlers init is an unlocked kernel thread, which will @@ -418,7 +446,12 @@ */ static void __init do_basic_setup(void) { - + /* + * Let the per-CPU migration threads start up: + */ +#if CONFIG_SMP + migration_init(); +#endif /* * Tell the world that we're going to be the grim * reaper of innocent orphaned children. @@ -460,6 +493,8 @@ static int init(void * unused) { + static char * argv_sh[] = { "sh", NULL, }; + lock_kernel(); do_basic_setup(); @@ -491,6 +526,6 @@ execve("/sbin/init",argv_init,envp_init); execve("/etc/init",argv_init,envp_init); execve("/bin/init",argv_init,envp_init); - execve("/bin/sh",argv_init,envp_init); + execve("/bin/sh",argv_sh,envp_init); panic("No init found. Try passing init= option to kernel."); } |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:53
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers/net In directory sc8-pr-cvs1:/tmp/cvs-serv4896/drivers/net Modified Files: Makefile Log Message: Merge Linus' 2.5.6 release Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/net/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile 2 Dec 2002 00:04:41 -0000 1.6 +++ Makefile 4 Dec 2002 10:48:49 -0000 1.7 @@ -8,7 +8,7 @@ obj-n := obj- := -mod-subdirs := appletalk arcnet fc irda tokenring pcmcia wireless wan +mod-subdirs := appletalk arcnet fc irda tokenring tulip pcmcia wireless wan O_TARGET := net.o @@ -21,8 +21,11 @@ list-multi := rcpci.o rcpci-objs := rcpci45.o rclanmtl.o -ifeq ($(CONFIG_TULIP),y) - obj-y += tulip/tulip.o +ifeq ($(CONFIG_E100),y) + obj-y += e100/e100.o +endif +ifeq ($(CONFIG_E1000),y) + obj-y += e1000/e1000.o endif ifeq ($(CONFIG_ISDN_PPP),y) @@ -31,7 +34,9 @@ subdir-$(CONFIG_NET_PCMCIA) += pcmcia subdir-$(CONFIG_NET_WIRELESS) += wireless -subdir-$(CONFIG_TULIP) += tulip +subdir-$(CONFIG_NET_TULIP) += tulip +subdir-$(CONFIG_E100) += e100 +subdir-$(CONFIG_E1000) += e1000 subdir-$(CONFIG_IRDA) += irda subdir-$(CONFIG_TR) += tokenring subdir-$(CONFIG_WAN) += wan @@ -69,7 +74,6 @@ obj-$(CONFIG_TLAN) += tlan.o obj-$(CONFIG_EPIC100) += epic100.o mii.o obj-$(CONFIG_SIS900) += sis900.o -obj-$(CONFIG_DM9102) += dmfe.o obj-$(CONFIG_YELLOWFIN) += yellowfin.o obj-$(CONFIG_ACENIC) += acenic.o obj-$(CONFIG_VETH) += veth.o @@ -77,6 +81,7 @@ obj-$(CONFIG_NS83820) += ns83820.o obj-$(CONFIG_STNIC) += stnic.o 8390.o obj-$(CONFIG_FEALNX) += fealnx.o mii.o +obj-$(CONFIG_TIGON3) += tg3.o ifeq ($(CONFIG_SK98LIN),y) obj-y += sk98lin/sk98lin.o @@ -99,7 +104,7 @@ obj-$(CONFIG_AIRONET4500_PROC) += aironet4500_proc.o obj-$(CONFIG_AIRONET4500_CS) += aironet4500_proc.o -obj-$(CONFIG_WINBOND_840) += winbond-840.o mii.o +obj-$(CONFIG_WINBOND_840) += mii.o obj-$(CONFIG_SUNDANCE) += sundance.o obj-$(CONFIG_HAMACHI) += hamachi.o obj-$(CONFIG_NET) += Space.o setup.o net_init.o loopback.o @@ -171,8 +176,6 @@ obj-$(CONFIG_DEPCA) += depca.o obj-$(CONFIG_EWRK3) += ewrk3.o obj-$(CONFIG_ATP) += atp.o -obj-$(CONFIG_DE4X5) += de4x5.o -obj-$(CONFIG_DE2104X) += de2104x.o obj-$(CONFIG_NI5010) += ni5010.o obj-$(CONFIG_NI52) += ni52.o obj-$(CONFIG_NI65) += ni65.o |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:53
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers/char In directory sc8-pr-cvs1:/tmp/cvs-serv4896/drivers/char Modified Files: Makefile Log Message: Merge Linus' 2.5.6 release Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/char/Makefile,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Makefile 29 Oct 2002 00:52:50 -0000 1.3 +++ Makefile 4 Dec 2002 10:48:49 -0000 1.4 @@ -23,7 +23,7 @@ export-objs := busmouse.o console.o keyboard.o sysrq.o \ misc.o pty.o random.o selection.o serial.o \ - sonypi.o tty_io.o tty_ioctl.o generic_serial.o + sonypi.o tty_io.o tty_ioctl.o generic_serial.o rtc.o mod-subdirs := ftape drm pcmcia |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:53
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers/scsi In directory sc8-pr-cvs1:/tmp/cvs-serv4896/drivers/scsi Modified Files: Makefile Log Message: Merge Linus' 2.5.6 release Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/scsi/Makefile,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Makefile 31 May 2002 01:58:39 -0000 1.3 +++ Makefile 4 Dec 2002 10:48:49 -0000 1.4 @@ -1,7 +1,7 @@ # # Makefile for linux/drivers/scsi # -# 30 May 2000, Christoph Hellwig <chh...@gm...> +# 30 May 2000, Christoph Hellwig <hc...@in...> # Rewritten to use lists instead of if-statements. # # 20 Sep 2000, Torben Mathiasen <tm...@im...> |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:52
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers In directory sc8-pr-cvs1:/tmp/cvs-serv4896/drivers Modified Files: Makefile Log Message: Merge Linus' 2.5.6 release Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile 2 Dec 2002 00:03:42 -0000 1.6 +++ Makefile 4 Dec 2002 10:48:49 -0000 1.7 @@ -1,7 +1,7 @@ # # Makefile for the Linux kernel device drivers. # -# 15 Sep 2000, Christoph Hellwig <hc...@ca...> +# 15 Sep 2000, Christoph Hellwig <hc...@in...> # Rewritten to use lists instead of if-statements. # |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:52
|
Update of /cvsroot/linux-vax/kernel-2.5 In directory sc8-pr-cvs1:/tmp/cvs-serv4896 Modified Files: Makefile Log Message: Merge Linus' 2.5.6 release Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- Makefile 2 Dec 2002 00:07:44 -0000 1.9 +++ Makefile 4 Dec 2002 10:48:49 -0000 1.10 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 5 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -164,6 +164,7 @@ DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o DRIVERS-$(CONFIG_NET_PCMCIA) += drivers/net/pcmcia/pcmcia_net.o DRIVERS-$(CONFIG_NET_WIRELESS) += drivers/net/wireless/wireless_net.o +DRIVERS-$(CONFIG_NET_TULIP) += drivers/net/tulip/tulip_net.o DRIVERS-$(CONFIG_PCMCIA_CHRDEV) += drivers/char/pcmcia/pcmcia_char.o DRIVERS-$(CONFIG_DIO) += drivers/dio/dio.a DRIVERS-$(CONFIG_SBUS) += drivers/sbus/sbus_all.o |
From: Kenn H. <ke...@us...> - 2002-12-04 10:48:02
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/vax In directory sc8-pr-cvs1:/tmp/cvs-serv4334/arch/vax Modified Files: 460.config Log Message: Update the default config for KA46 (VS4000/60) Index: 460.config =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/460.config,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- 460.config 6 Jun 2002 00:12:24 -0000 1.5 +++ 460.config 4 Dec 2002 10:47:59 -0000 1.6 @@ -45,8 +45,6 @@ # Bus support # # CONFIG_QBUS is not set -# CONFIG_UNIBUS is not set -# CONFIG_VAXBI is not set CONFIG_VSBUS=y CONFIG_VAX_4000HC=y @@ -68,8 +66,7 @@ # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_INITRD is not set # @@ -122,27 +119,7 @@ # # SCSI support # -CONFIG_SCSI=y - -# -# SCSI support type (disk, tape, CDrom) -# -CONFIG_BLK_DEV_SD=y -CONFIG_CHR_DEV_ST=y -CONFIG_BLK_DEV_SR=y -CONFIG_CHR_DEV_SG=y - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -CONFIG_SCSI_CONSTANTS=y - -# -# SCSI low-level drivers -# -# CONFIG_SCSI_VAX_5380 is not set -# CONFIG_SCSI_VAX_53C94 is not set +# CONFIG_SCSI is not set # # Network device support @@ -157,6 +134,7 @@ # CONFIG_VAX_LANCE=y # CONFIG_SGEC is not set +# CONFIG_DELQA is not set # # File systems @@ -164,7 +142,7 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set -CONFIG_REISERFS_FS=y +# CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_PROC_INFO is not set # CONFIG_ADFS_FS is not set @@ -175,10 +153,10 @@ # CONFIG_EXT3_FS is not set # CONFIG_JBD is not set # CONFIG_JBD_DEBUG is not set -CONFIG_FAT_FS=y -CONFIG_MSDOS_FS=y +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set # CONFIG_UMSDOS_FS is not set -CONFIG_VFAT_FS=y +# CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set # CONFIG_JFFS2_FS is not set @@ -188,6 +166,9 @@ CONFIG_ISO9660_FS=y CONFIG_JOLIET=y # CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set # CONFIG_MINIX_FS is not set # CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set @@ -205,7 +186,7 @@ # CONFIG_SYSV_FS is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set -CONFIG_UFS_FS=y +# CONFIG_UFS_FS is not set # CONFIG_UFS_FS_WRITE is not set # @@ -218,6 +199,7 @@ CONFIG_ROOT_NFS=y # CONFIG_NFSD is not set # CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y # CONFIG_SMB_FS is not set @@ -300,7 +282,7 @@ # CONFIG_VT is not set CONFIG_SERIAL=y CONFIG_DZ=y -CONFIG_SERIAL_MTPR=y +# CONFIG_SERIAL_IPR is not set CONFIG_SERIAL_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 |
From: Kenn H. <ke...@us...> - 2002-12-04 10:37:08
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv29103/mm Modified Files: pgtable.h Log Message: Define an empty pgtable_cache_init() like the other arches that don't have page table caches Index: pgtable.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pgtable.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- pgtable.h 2 Dec 2002 01:08:08 -0000 1.4 +++ pgtable.h 4 Dec 2002 10:37:04 -0000 1.5 @@ -187,4 +187,10 @@ #define PageSkip(page) (0) #define kern_addr_valid(addr) (1) +/* + * No page table caches to initialise + */ +#define pgtable_cache_init() do { } while (0) + + #endif |
From: Kenn H. <ke...@us...> - 2002-12-04 10:36:25
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax In directory sc8-pr-cvs1:/tmp/cvs-serv28730 Modified Files: siginfo.h Log Message: Define SI_DETHREAD for 2.5.6 Index: siginfo.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/siginfo.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- siginfo.h 29 Oct 2002 00:52:51 -0000 1.4 +++ siginfo.h 4 Dec 2002 10:36:21 -0000 1.5 @@ -110,6 +110,7 @@ #define SI_ASYNCIO -4 /* sent by AIO completion */ #define SI_SIGIO -5 /* sent by queued SIGIO */ #define SI_TKILL -6 /* sent by tkill system call */ +#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */ #define SI_FROMUSER(siptr) ((siptr)->si_code <= 0) #define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0) |
From: Kenn H. <ke...@us...> - 2002-12-02 01:08:18
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv19236/include/asm-vax/mm Modified Files: pagelet.h pagelet_pgd.h pagelet_pmd.h pgalloc.h pgtable.h Log Message: 2.5.5 uses struct page * pointers to refer to pages in process page tables (to allow PTEs in HIGHMEM on x86). It also does away with the pgtable_cache quicklists. Dealing with these changes triggered quite a few changes in the VAX MM code. While working on this, I found that our existing page table allocation and management code wasn't very clear. So I've taken the opportunity to clean things up. o pgd_val(), __pgd(), pmd_val() and __pmd() are now gone. The MM core doesn't use them, and there is no reason why VAX-specific code should use them. After all, we have to be intimately familiar with the actual contents of pgd_t and pmd_t. pmd_val() and friends just obscure rather than clarify and are very type-unsafe. The pmd_t structure now contains a pte_t * instead of an unsigned long. This allows us to remove a lot of ugly casts. (Look at pte_offset() for example.) o PMDs are no longer allocated via a quicklist. They are allocated and freed directly via alloc_pages() and __free_pages(). o The job of invalidating the SPTE for a page in a process page table is now done by pmd_clear(). We used to do this in pte_free(), but we can't any more (and we shouldn't anyway), since pte_free() only gets a struct page * now, so we can't tell where in the process page table this page lies. pmd_clear() gets the address of the PMD entry, which then points to the PTE page that we need. o PTE pagesare no longer allocated via a quicklist, but via alloc_page() and __free_page(). o The old quicklist structure is now pgd_free_list, since this better describes its current function (holding previously allocated PGDs, which makes balance slot allocation simpler). pgd_t gets a .next member to simply free list insertion and removal. o pmd_populate() is now much simpler. We don't try to fill holes in page tables anymore. So each call to pmd_populate() only has to deal with one page (which the core already allocates for us). o Checks against WSMAX and STKMAX are now done in pte_alloc_one(), since the user address that we need is handed directly to pte_alloc_one(), whereas pmd_populate() would have to calculate it. The MM core can deal with pte_alloc_one() returning NULL, so calls to brk() or mmap() that would go beyond WSMAX will get ENOMEM rather than a SEGV. o pmd_populate_S0() is gone, since it's a bug if anything tries to expand our system page table. Index: pagelet.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pagelet.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pagelet.h 20 May 2002 00:33:39 -0000 1.3 +++ pagelet.h 2 Dec 2002 01:08:08 -0000 1.4 @@ -64,6 +64,15 @@ * expects them here */ #ifndef __ASSEMBLY__ +/* definition of pte_t */ +typedef struct pagelet_pagecluster pte_t; + +/* definition of pmd_t, an entry in a Page Middle Directory. Each entry + is a pointer to a page of process PTEs */ +typedef struct { + pte_t *pte_page; +} pmd_t; + /* * this struct contains the base and length registers * needed for each part of the pgd @@ -79,32 +88,17 @@ * arch/vax/boot/head.S (ASM_SBR_OFFSET and ASM_SLR_OFFSET) */ -/* definition of pmd_t - needed for pgd_t */ -typedef struct { - unsigned long pmd; -} pmd_t; - - struct pgd_descriptor { unsigned long br; unsigned long lr; - pmd_t *pmd; /* first four pages of the task PTE slot are the pmds - * Our pmds hold 2048 entries and are 2 pages long */ - unsigned long slot; /* the base address of this slot */ - unsigned long segment; /* The segment index - used in pgd_clear */ + pmd_t *pmd; /* first four pages of the task PTE slot are the pmds + * Our pmds hold 2048 entries and are 2 pages long */ + unsigned long slot; /* the base address of this slot */ + unsigned long segment; /* The segment index - used in pgd_clear */ + struct pgd_descriptor *next; /* Links for PGD entry free list */ }; -/* pgd_t definitions */ typedef struct pgd_descriptor pgd_t; -/* the .pmd is not a typo */ -#define pgd_val(x) ((x).pmd) -#define __pgd(x) ((pgd_t) { (x) } ) - -#define pmd_val(x) ((x).pmd) -#define __pmd(x) ((pmd_t) { (x) } ) - -/* definition of pte_t */ -typedef struct pagelet_pagecluster pte_t; #define pte_val(x) ((x).pte) #define __pte(x) ((pte_t) { (x) } ) Index: pagelet_pgd.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pagelet_pgd.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pagelet_pgd.h 20 May 2002 00:33:39 -0000 1.3 +++ pagelet_pgd.h 2 Dec 2002 01:08:08 -0000 1.4 @@ -33,7 +33,7 @@ #define pgd_ERROR(e) \ - printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) + printk("%s:%d: bad pgd - pmd is %p.\n", __FILE__, __LINE__, (e).pmd) /* This is the kernel pgd */ @@ -45,9 +45,9 @@ * into the pgd entry) * All the actual stuff is done by the pmd_xxx functions */ -static inline int pgd_none(pgd_t pgd) { return !(pgd).pmd; } -static inline int pgd_bad(pgd_t pgd) { return !(pgd).br; } -static inline int pgd_present(pgd_t pgd) { return ((pgd).pmd != 0); } +static inline int pgd_none(pgd_t pgd) { return !pgd.pmd; } +static inline int pgd_bad(pgd_t pgd) { return !pgd.br; } +static inline int pgd_present(pgd_t pgd) { return (pgd.pmd != 0); } extern void pgd_clear(pgd_t * pgdp); Index: pagelet_pmd.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pagelet_pmd.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pagelet_pmd.h 20 May 2002 00:33:39 -0000 1.3 +++ pagelet_pmd.h 2 Dec 2002 01:08:08 -0000 1.4 @@ -26,7 +26,7 @@ #define PTRS_PER_PMD 2048 #define pmd_ERROR(e) \ - printk("%s:%d: bad pmd %08lx.\n", __FILE__, __LINE__, pmd_val(e)) + printk("%s:%d: bad pmd entry %p.\n", __FILE__, __LINE__, (e).pte_page) /* pmd_xxx functions */ @@ -41,28 +41,27 @@ * -- Change to a pmd that is a two page block of memeory. * -- remove special flag. */ -#define set_pmd(pmdptr, pmdval) -static inline int pmd_none(pmd_t pmd) -{ - return (pmd_val(pmd) == 0); -} -static inline int pmd_bad(pmd_t pmd) { return (pmd_val(pmd) == 0); } -static inline int pmd_present(pmd_t pmd) { return (pmd_val(pmd) != 0); } +static inline int pmd_none(pmd_t pmd) { return (pmd.pte_page == NULL); } +static inline int pmd_bad(pmd_t pmd) { return (pmd.pte_page == NULL); } +static inline int pmd_present(pmd_t pmd) { return (pmd.pte_page != NULL); } -/* clear the pmd entry */ -static inline void pmd_clear(pmd_t * pmdp) { pmd_val(*pmdp) = 0; } +/* Implemented in arch/vax/mm/pgalloc.c */ +void pmd_clear(pmd_t *pmd); /* Find an entry in the second-level page table.. */ #define pmd_index(address) ((address >> PMD_SHIFT) & (PTRS_PER_PMD-1)) +/* Given an PMD entry (which points to a page of PTEs), return the + struct page * for that page */ +#define pmd_page(p) virt_to_page((p).pte_page) static inline pmd_t * pmd_offset(pgd_t * dir, unsigned long address) { /* locate the pmd entry according to address */ pmd_t *ptr; - ptr = (pmd_t *)pmd_val(*dir) + pmd_index(address); -// printk("pmd_offset: pgd %8p, pmd_val %8lx, address %8lx, index %8lx, offset %8p\n",dir,pmd_val(*dir),address,pmd_index(address),ptr); + ptr = dir->pmd + pmd_index(address); +// printk("pmd_offset: pgd %8p, pmd %p, address %8lx, index %8lx, offset %8p\n",dir,dir->pmd,address,pmd_index(address),ptr); return ptr; } Index: pgalloc.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pgalloc.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pgalloc.h 20 May 2002 00:33:39 -0000 1.3 +++ pgalloc.h 2 Dec 2002 01:08:08 -0000 1.4 @@ -31,60 +31,35 @@ #include <linux/threads.h> #include <asm/mm/virtmap.h> #include <linux/vmalloc.h> +#include <asm/mm/task.h> #ifndef CONFIG_SMP -extern struct pgtable_cache_struct { - unsigned long *pgd_cache; /* These are special recyclable slots */ - unsigned long pgd_slots_used; - unsigned long pgd_cache_sz; - unsigned long *pmd_cache; /* These are two page blocks */ - unsigned long pmd_cache_sz; - unsigned long *pte_cache; /* These are one page blocks */ - unsigned long pgtable_cache_sz; -} quicklists; +extern struct pgd_cache { + pgd_t *head; /* These are special recyclable slots */ + unsigned long slots_used; + unsigned long size; +} pgd_free_list; #else - #include <asm/smp.h> //#define quicklists cpu_data[smp_processor_id()] #error SMP not supported #endif -#define pgd_quicklist (quicklists.pgd_cache) -#define pmd_quicklist (quicklists.pmd_cache) -#define pte_quicklist (quicklists.pte_cache) -#define pmd_cache_size (quicklists.pmd_cache_sz) -#define pgtable_cache_size (quicklists.pgtable_cache_sz) -#define pgd_cache_size (quicklists.pgd_cache_sz) -#define pgd_slots_used (quicklists.pgd_slots_used) /* * Allocate and free page tables. The xxx_kernel() versions are * used to allocate a kernel page table - this turns on ASN bits - * if any. + * if any in other archs. On VAX, we cannot manipulate the S0 page + * table after init, so they are BUG()-ed out. */ - -static inline void free_pgd_fast(pgd_t *pgd) -{ - *(unsigned long *)pgd = (unsigned long) pgd_quicklist; - pgd_quicklist = (unsigned long *) pgd; - pgd_cache_size++; -} - -static inline void free_pgd_slow(pgd_t *pgd) +static inline void pgd_free(pgd_t *pgd) { - /* - * atp Mar 2002. - * We never free pgd 'pages'. The cache structure maintains - * a free list of free pgd/memory map slots, in the user page - * tables. This is contiguous in S0 page space - * If we need a pgd, we pick a 'slot' which holds all the pmds - * and ptes in a contiguous block of system address space. - */ - + pgd->next = pgd_free_list.head; + pgd_free_list.head = pgd; + pgd_free_list.size++; } /* renamed from get_pmd_slow to pmd_alloc_one, mar 2002 */ -/* FIXME: This can be statically inlined -> pgalloc.h */ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address) { pmd_t *ret; @@ -96,90 +71,50 @@ return ret; } -/* Page Mid level directory handling routines. - * renamed from get_pmd_fast */ -static inline pmd_t *pmd_alloc_one_fast(struct mm_struct *mm, unsigned long address) +static inline void pmd_free(pmd_t *pmd) { - unsigned long *ret; - - if ((ret = (unsigned long *)pmd_quicklist) != NULL) { - pmd_quicklist = (unsigned long *)(*ret); - ret[0] = 0; - pmd_cache_size--; - } - return (pmd_t *)ret; + free_pages((unsigned long)pmd, 1); } -static inline void free_pmd_fast(pmd_t *pmd) -{ - *(unsigned long *)pmd = (unsigned long) pmd_quicklist; - pmd_quicklist = (unsigned long *) pmd; - pmd_cache_size++; -} - -static inline void free_pmd_slow(pmd_t *pmd) -{ - /* - * a pmd is a *two* page block of memory, allocated with - * __get_free_pages(GFP_KERNEL, 1); - */ - free_pages(((unsigned long)pmd),1); -} -/* renamed from get_pte_fast, mar 2002 */ -static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address) +static inline struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) { - unsigned long *ret; + struct page *page; - if((ret = (unsigned long *)pte_quicklist) != NULL) { - pte_quicklist = (unsigned long *)(*ret); - ret[0] = 0; - pgtable_cache_size--; + /* Is this an attempt to allocate a page outside the maximum memory + limits? */ + if ((address >= TASK_WSMAX) && (address < (0x80000000-TASK_STKMAX))) { + /* The address is in the no-go zone. Returning NULL here + will get treated as ENOMEM by callers, which is a + reasonable way to fail this, I think */ + return NULL; } - return (pte_t *)ret; -} -/* renamed from get_pte_slow mar 2002 */ -static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) -{ - unsigned long pte; - - pte = (unsigned long) __get_free_page(GFP_KERNEL); - if (pte) { - return (pte_t *) pte; - } - return NULL; + page = alloc_page(GFP_KERNEL); + if (page) { + clear_page(page_address(page)); + } + return page; } -static inline void free_pte_fast(pte_t *pte) +static inline void pte_free(struct page *pte_page) { - *(unsigned long *)pte = (unsigned long) pte_quicklist; - pte_quicklist = (unsigned long *) pte; - pgtable_cache_size++; + __free_page(pte_page); } - /* in arch/vax/mm/pgalloc.c */ -extern pgd_t *pgd_alloc(struct mm_struct *mm); -extern pgd_t *get_pgd_fast(void); -extern void pmd_free(pmd_t *pmd); -extern void pte_free(pte_t *pte); -extern pte_t *get_pageaddr_from_pte(pte_t *ptep); -extern void free_pte_slow(pte_t *pte); -extern void remap_and_clear_pte_page(pmd_t *s0addr, pte_t *page); -extern void remap_pte_invalidate(pmd_t *s0addr); -extern void pte_free_kernel(pte_t *pte); -extern pte_t * vax_pte_alloc_one(pmd_t *pmd); -extern void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd); -extern void pmd_populate(struct mm_struct *mm, pmd_t * pmd, pte_t *pte); -extern void pmd_populate_S0(pgd_t *pgd, pmd_t *pmd); - - -/* in arch/vax/mm/init.c */ -extern int do_check_pgt_cache(int, int); - -#define pgd_free(pgd) free_pgd_fast(pgd) - +pgd_t *pgd_alloc(struct mm_struct *mm); +void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd); +void pmd_populate(struct mm_struct *mm, pmd_t * pmd, struct page *pte); +void pmd_clear(pmd_t *pmd); + +/* Due to limitation of VAX memory management, dynamic allocation and + freeing of system PTEs is impossible. Nothing should be trying to + allocate or free these. */ +#define pte_free_kernel(pte) BUG() +#define pmd_populate_kernel(mm, pmd, pte) BUG() +#define pte_alloc_one_kernel(mm, address) ({ BUG(); (pte_t *)0; }) +#define pmd_page_kernel(pmd) BUG() /* tlb routines */ Index: pgtable.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pgtable.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pgtable.h 20 May 2002 00:33:39 -0000 1.3 +++ pgtable.h 2 Dec 2002 01:08:08 -0000 1.4 @@ -63,9 +63,9 @@ * if you alter pgd_t change these. */ /* swapper_pg_dir[2].br */ -#define ASM_SBR_OFFSET 40 +#define ASM_SBR_OFFSET 48 /* swapper_pg_dir[2].lr */ -#define ASM_SLR_OFFSET 44 +#define ASM_SLR_OFFSET 52 /* * Macros to get page table addresses + offsets. @@ -164,7 +164,6 @@ */ extern unsigned long empty_zero_page[1024] __attribute__ ((__aligned__(PAGE_SIZE))); #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) -#define page_address(page) ((page)->virtual) /* Encode and de-code a swap entry */ #define SWP_TYPE(x) (((x).val >> 1) & 0x3f) |
From: Kenn H. <ke...@us...> - 2002-12-02 01:08:16
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv19236/arch/vax/mm Modified Files: pgalloc.c Log Message: 2.5.5 uses struct page * pointers to refer to pages in process page tables (to allow PTEs in HIGHMEM on x86). It also does away with the pgtable_cache quicklists. Dealing with these changes triggered quite a few changes in the VAX MM code. While working on this, I found that our existing page table allocation and management code wasn't very clear. So I've taken the opportunity to clean things up. o pgd_val(), __pgd(), pmd_val() and __pmd() are now gone. The MM core doesn't use them, and there is no reason why VAX-specific code should use them. After all, we have to be intimately familiar with the actual contents of pgd_t and pmd_t. pmd_val() and friends just obscure rather than clarify and are very type-unsafe. The pmd_t structure now contains a pte_t * instead of an unsigned long. This allows us to remove a lot of ugly casts. (Look at pte_offset() for example.) o PMDs are no longer allocated via a quicklist. They are allocated and freed directly via alloc_pages() and __free_pages(). o The job of invalidating the SPTE for a page in a process page table is now done by pmd_clear(). We used to do this in pte_free(), but we can't any more (and we shouldn't anyway), since pte_free() only gets a struct page * now, so we can't tell where in the process page table this page lies. pmd_clear() gets the address of the PMD entry, which then points to the PTE page that we need. o PTE pagesare no longer allocated via a quicklist, but via alloc_page() and __free_page(). o The old quicklist structure is now pgd_free_list, since this better describes its current function (holding previously allocated PGDs, which makes balance slot allocation simpler). pgd_t gets a .next member to simply free list insertion and removal. o pmd_populate() is now much simpler. We don't try to fill holes in page tables anymore. So each call to pmd_populate() only has to deal with one page (which the core already allocates for us). o Checks against WSMAX and STKMAX are now done in pte_alloc_one(), since the user address that we need is handed directly to pte_alloc_one(), whereas pmd_populate() would have to calculate it. The MM core can deal with pte_alloc_one() returning NULL, so calls to brk() or mmap() that would go beyond WSMAX will get ENOMEM rather than a SEGV. o pmd_populate_S0() is gone, since it's a bug if anything tries to expand our system page table. Index: pgalloc.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/mm/pgalloc.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- pgalloc.c 31 May 2002 01:58:38 -0000 1.5 +++ pgalloc.c 2 Dec 2002 01:08:08 -0000 1.6 @@ -13,8 +13,8 @@ * License: GNU GPL */ -#include <linux/sched.h> #include <linux/mm.h> +#include <linux/slab.h> #include <asm/page.h> #include <asm/pgtable.h> #include <asm/pgalloc.h> @@ -29,69 +29,75 @@ * maintaining a bit map as we put pgds that are finished with * on our quicklists pool */ -pgd_t *get_pgd_fast(void) +static inline pgd_t *get_pgd_fast(void) { - unsigned long *ret; + pgd_t *pgd; - if ((ret = pgd_quicklist) != NULL) { - pgd_quicklist = (unsigned long *)(*ret); - ret[0] = 0; - pgd_cache_size--; + if ((pgd = pgd_free_list.head) != NULL) { + pgd_free_list.head = pgd->next; + pgd->next = NULL; + pgd_free_list.size--; } - return (pgd_t *)ret; + return pgd; } /* allocate a pgd */ pgd_t *pgd_alloc(struct mm_struct *mm) { - /* this is rather wasteful, as only a few longwords are + /* this is rather wasteful, as only a few longwords are * used in the entire 4kb page. Perhaps we can do something * smarter here by using the quicklists to pack the pgds into * a single page. */ - pgd_t *ret; - unsigned long taskslot; + pgd_t *pgd; + unsigned long taskslot; - /* grab a pgd off the cache */ - ret = get_pgd_fast(); + /* grab a pgd off the cache */ + pgd = get_pgd_fast(); - if (!ret) { - /* check if we have run out of balance slots */ - if (pgd_slots_used >= TASK_MAXUPRC) return (pgd_t *)NULL; - ret = (pgd_t *)__get_free_page(GFP_KERNEL); - taskslot = GET_TASKSLOT(pgd_slots_used); - /* one more slot used */ - pgd_slots_used++; - ret[0].pmd = 0; /* These are blank */ - ret[1].pmd = 0; - - } else { - /* pgd_clear keeps this */ - taskslot=ret->slot; - } - - if (ret) { - - /* set the values of the base + length registers */ - ret[0].br = taskslot+ (P0PTE_OFFSET); /* skip the PMD */ - ret[0].lr = 0x0; - /* this comes in handy later */ - ret[0].slot = taskslot; - /* p1br points at what would be page mapping 0x40000000 (i.e. the _end_ of the slot)*/ - ret[1].br = taskslot+ (P1PTE_OFFSET) - 0x800000 ; - /* This is the unmapped number of PTEs */ - ret[1].lr = 0x40000; - ret[1].slot = taskslot; + if (!pgd) { + /* check if we have run out of balance slots */ + if (pgd_free_list.slots_used >= TASK_MAXUPRC) return NULL; + + pgd = kmalloc(sizeof(pgd_t) * PTRS_PER_PGD, GFP_KERNEL); + if (!pgd) return NULL; + + memset(pgd, 0, sizeof(pgd_t) * PTRS_PER_PGD); + + taskslot = GET_TASKSLOT(pgd_free_list.slots_used); + /* one more slot used */ + pgd_free_list.slots_used++; + + pgd[0].pmd = 0; /* These are blank */ + pgd[1].pmd = 0; - ret[0].segment = 0; - ret[1].segment = 1; + } else { + /* pgd_clear keeps this */ + taskslot=pgd->slot; + } -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM:pgd_alloc: p0: %8lX, %8lX, p1: %8lX, %8lx, slot %ld, taskslot %8lx\n", ret[0].br, ret[0].lr, ret[1].br, ret[1].lr, pgd_slots_used-1, ret[0].slot); + if (pgd) { + + /* set the values of the base + length registers */ + pgd[0].br = taskslot+ (P0PTE_OFFSET); /* skip the PMD */ + pgd[0].lr = 0x0; + /* this comes in handy later */ + pgd[0].slot = taskslot; + /* p1br points at what would be page mapping 0x40000000 (i.e. the _end_ of the slot)*/ + pgd[1].br = taskslot+ (P1PTE_OFFSET) - 0x800000 ; + /* This is the unmapped number of PTEs */ + pgd[1].lr = 0x40000; + pgd[1].slot = taskslot; + + pgd[0].segment = 0; + pgd[1].segment = 1; + +#ifdef VAX_MM_PGALLOC_DEBUG + printk(KERN_DEBUG "VAXMM:pgd_alloc: p0: %8lX, %8lX, p1: %8lX, %8lx, slot %ld, taskslot %8lx\n", pgd[0].br, pgd[0].lr, pgd[1].br, pgd[1].lr, pgd_free_list.slots_used-1, pgd[0].slot); #endif - /* set the s0 region, from the master copy in swapper_pg_dir */ - memcpy(ret + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); + /* set the s0 region, from the master copy in swapper_pg_dir */ + memcpy(pgd + USER_PTRS_PER_PGD, swapper_pg_dir + USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); } - return ret; + return pgd; } void pgd_clear(pgd_t * pgdp) @@ -111,6 +117,79 @@ } +/* remap a given page to be part of a contiguous page table for p0/1 space + * + * This is like remap_pte_range in memory.c but VAX specific. It's called + * when we're creating part of a process page table. A new, blank page + * has just been allocated and we want to use this page to back part of + * the process page table. This will result in this new page being + * double-mapped. One mapping will be its 'identity' mapping where + * VIRT = (PHYS + PAGE_OFFSET). The other mapping will be in the middle + * of the process page table. + * + * s0addr is the address in S0 space that we need to remap the page + * pointed at by pte_page to. + * + * This is also called to remap the two pages in our page middle directory. + * + */ +static void remap_pgtable_page(void *s0addr, struct page *page) +{ + pte_t *s0pte; + + /* sanity checks */ + if (!s0addr) { + vaxpanic("VAXMM: null S0 address in remap_pgtable_page!\n"); + return; + } + if (!page) { + vaxpanic("VAXMM: null pte_page in remap_pgtable_page!\n"); + return; + } + + /* locate the S0 pte that describes the page pointed to by s0addr */ + + s0pte = GET_SPTE_VIRT(s0addr); + + /* is it already pointing somewhere? */ +#ifdef VAX_MM_PGALLOC_DEBUG + if (pte_present(*s0pte)) { + printk(KERN_DEBUG "VAXMM: S0 pte %8p already valid in remap_pgtable_page??\n",s0pte); + } + printk(KERN_DEBUG "VAXMM: mapping PTE page %p at %p\n", page, s0addr); +#endif + + /* zap the map */ + set_pte(s0pte,mk_pte(page, __pgprot(_PAGE_VALID|_PAGE_KW))); + + flush_tlb_all(); +} + +/* invalidate the S0 pte that was remapped to point at this page in the + process page table or the page middle directory */ +static void unmap_pgtable_page(void *page) +{ + pte_t *s0pte; + + /* sanity checks */ + if (!page) { + vaxpanic(KERN_ERR "VAXMM: null S0 address in unmap_pgtable_page!\n"); + return; + } + /* locate the S0 pte that describes the page pointed to by pte_page */ + + s0pte = GET_SPTE_VIRT(page); + +#ifdef VAX_MM_PGALLOC_DEBUG + printk("unmap_pgtable_page: s0addr %p, s0pte %p\n", page, s0pte); +#endif + + set_pte(s0pte, pte_mkinvalid(*s0pte)); + /* FIXME: these flush_tlb_alls need replacing with flush_tlb_8 */ + flush_tlb_all(); +// __flush_tlb_one(s0addr); +} + /* we used to call this routine pmd_alloc. At vn 2.4.3 pmd_alloc got removed * to include/linux/mm.h, and we have now pgd_populate and pmd_populate. * this is pgd_populate */ @@ -138,12 +217,12 @@ is_p1 = pgd->segment; #ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM: Calling pgd_populate with (mm=%8p, pgd=%8p, pmd=%8lx\n",mm,pgd,pgd->pmd); + printk(KERN_DEBUG "VAXMM: Calling pgd_populate with (mm=%8p, pgd=%8p, pmd=%8p\n",mm,pgd,pgd->pmd); #endif /* sanity check */ if (pgd->pmd) { #ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM: Calling pmd_alloc on already allocated page (pgd=%8p,pmd=%8lx)\n",pgd,pgd->pmd); + printk(KERN_DEBUG "VAXMM: Calling pmd_alloc on already allocated page (pgd=%8p,pmd=%8p)\n",pgd,pgd->pmd); #endif return; } @@ -153,7 +232,8 @@ s0addr += (is_p1) ? (P1PMD_OFFSET/sizeof(pmd_t)): (P0PMD_OFFSET/sizeof(pmd_t)); /* remap and clear the first page */ - remap_and_clear_pte_page(s0addr, (pte_t *)pmd); + clear_page(pmd); + remap_pgtable_page(s0addr, virt_to_page(pmd)); /* this is the pointer to our pmd table. */ pgd->pmd=s0addr; @@ -162,386 +242,152 @@ s0addr += (PAGE_SIZE/sizeof(pmd_t)); pmd += (PAGE_SIZE/sizeof(pmd_t)); - remap_and_clear_pte_page(s0addr, (pte_t *)pmd); + clear_page(pmd); + remap_pgtable_page(s0addr, virt_to_page(pmd)); #ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM: pmd_alloc: pgd %8p, pgd->br %8lx, pgd->lr %8lx, \n\tpgd->pmd %8lx\n",pgd,pgd->br, pgd->lr, pgd->pmd); + printk(KERN_DEBUG "VAXMM: pmd_alloc: pgd %8p, pgd->br %8lx, pgd->lr %8lx, \n\tpgd->pmd %8p\n",pgd,pgd->br, pgd->lr, pgd->pmd); #endif return; } -/* This inverts the remapping done in remap_and_clear */ -pte_t *get_pageaddr_from_pte(pte_t *ptep) -{ - pte_t *addr; - pte_t *s0pte; - - s0pte = GET_SPTE_VIRT(ptep); - - addr = (pte_t *)(((pte_val(*s0pte)&PAGELET_PFN_MASK)<<PAGELET_SHIFT)|PAGE_OFFSET); - return addr; -} - -/* free a 'pmd'. */ -void pmd_free(pmd_t *pmd) -{ - pmd_t *pmdp; - pmdp = pmd+(PAGE_SIZE/sizeof(pmd_t)); -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM:pmd_free: freeing pmd %p\n",pmd); -#endif - /* This is a double page block */ - free_pmd_fast((pmd_t *)get_pageaddr_from_pte((pte_t *)pmd)); - /* invalidate the S0 ptes that map this, one per page */ - remap_pte_invalidate(pmd); - remap_pte_invalidate(pmdp); -} - -/* remap a given page to be part of a contiguous page table for p0/1 space - * - * This is like remap_pte_range in memory.c but VAX specific - * - * s0addr is the address in S0 space that we need to remap the page - * pointed at by pte_page to. We also clear the page pointed at by pte_page - */ -void remap_and_clear_pte_page(pmd_t *s0addr, pte_t *pte_page) -{ - - pte_t *s0pte; - - /* sanity checks */ - if (!s0addr) { - vaxpanic("VAXMM: null S0 address in remap_and_clear_pte_page!\n"); - return; - } - if (!pte_page) { - vaxpanic("VAXMM: null pte_page in remap_and_clear_pte_page!\n"); - return; - } - - /* locate the S0 pte that describes the page pointed to by s0addr */ - - s0pte = GET_SPTE_VIRT(s0addr); - - /* is it already pointing somewhere? */ -#ifdef VAX_MM_PGALLOC_DEBUG - if (pte_present(*s0pte)) { - printk(KERN_DEBUG "VAXMM: S0 pte %8p already valid in remap_and_clear_pte_page??\n",s0pte); - } -#endif - - clear_page(pte_page); - - /* zap the map */ - set_pte(s0pte,__mk_pte((unsigned long int)pte_page,__pgprot(_PAGE_VALID|_PAGE_KW))); -// print_pte(s0pte); - flush_tlb_all(); - -} - -/* invalidate the S0 pte that was remapped to point at this page */ -void remap_pte_invalidate(pmd_t *s0addr) -{ - pte_t *s0pte; - - /* sanity checks */ - if (!s0addr) { - vaxpanic(KERN_ERR "VAXMM: null S0 address in remap_and_clear_pte_page!\n"); - return; - } - /* locate the S0 pte that describes the page pointed to by s0addr */ - - s0pte = GET_SPTE_VIRT(s0addr); - set_pte(s0pte, pte_mkinvalid(*s0pte)); - /* FIXME: these flush_tlb_alls need replacing with flush_tlb_8 */ - flush_tlb_all(); -// __flush_tlb_one(s0addr); -} - /* - * Allocate a page, to hold page table entries for a user process. + * pmd_populate is called when the MM core wants to make a page in + * a process page table valid. The core has already allocated a + * page for this, and it now wants for us to use this page to + * hold PTEs for the range corresponding to the PMD entry pointed + * to by the pmd parameter. * - * We grab a random page. The only catch is that it must be virtually - * contiguous within the P0 or P1 page tables, which are held in S0 - * space. So, we remap the page table area in S0 space too. + * It's made a bit trickier by the fact that we need to work out if + * it's a P0 or P1 page table being populated. And then we also + * need to watch for this new page of PTEs being beyond the current + * P0LR or P1LR and extending P0/1LR as necessary. * - * The idea here is that a given task has an area in kernel - * address space that is TASK_WSMAX+TASK_STKSIZE in size (plus a few other bits). - * This space is initially unmapped. If the process needs to expand its page table - * (by mapping a page beyond the end of the relevant process page table) - * It can as long as it doesnt go beyond TASK_WSMAX in P0 and TASK_STKSIZE in P1. - * See asm-vax/mm/task.h for details. + * We used to check against WSMAX and STKMAX here, but we now do this + * check in pte_alloc_one(), where it's easier to check (since pte_alloc_one() + * is handed the user address). * * We make use of the knowledge that the pmd is a single block, to work back * to the pgd, which is where the base and length register values are held. * - * pmd is a pointer to the slot in our bogus pmd table we want to use. - * - * free_pte_fast: - * We may have to allocate many pages to hold ptes, as our page table is - * not sparse. So, we just pop the pte we have been given by the upper - * layers on the pte cache, and reallocate it as needed. Its not exactly - * in tune with all the page table locking done in pte_alloc, but this is - * square peg in a decidedly round hole, and the page table locking is one - * of the corners. - * We used to have our own pte_alloc_one. This is now called vax_pte_alloc_one. - * - * pte_alloc_kernel: - * If we get handed a request to map something into S0 or S1 space, then - * we dont do it. S0 page tables are fixed by the need to be contiguous - * in PHYSICAL memory. On a running system, expansion of or copying of the - * system page tables are almost impossible (its the "find me a couple of - * megabytes of continuous physical ram" problem). - * * FIXMES: page table locking. */ -void pmd_populate(struct mm_struct *mm, pmd_t * pmd, pte_t *pte) -{ - pgd_t *pgdp; - pmd_t *pmd_basep, *s0addr; - unsigned long int current_last_page,pgd_segment,target_page; - unsigned long int npages,pte_number,adjusted_address, is_p1; - pte_t *pte_page; - pmd_t *pmdi; - long int direction,ii; - - pmd_basep = (pmd_t *)((unsigned long)pmd & PTE_TASK_MASK); /* base of the pmd */ - /* see note above */ - free_pte_fast(pte); - -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM:pmd_populate: mm %8p, pgd %8lx, pmd %8lx, pmd_basep %8lx, pmd_val %8lx,\n",mm,mm->pgd,pmd,pmd_basep,pmd_val(*pmd)); -#endif - /* - * This is the base of the pgd array. We need to check which pgd - * entry we need. This is a bit clunky, but better than what was here - * before. - */ - pgdp = mm->pgd; +/* This function could be simpler if we used system page table + entries as PMD entries. */ +void pmd_populate(struct mm_struct *mm, pmd_t *pmd, struct page *pte_page) +{ + pmd_t *pmd_base; + unsigned long pmd_index; + unsigned int pspace; + pte_t *pte_addr; + unsigned long page_index; + pgd_t *pgd_entry; + + /* Find the start of the page middle directory containing this PMD entry */ + pmd_base = (pmd_t *)((unsigned long)pmd & PTE_TASK_MASK); /* base of the pmd */ + + /* The process page table page that we want to remap is at offset + pmd_index into the relevant page middle directory */ + pmd_index = pmd - pmd_base; + + /* But, is it a P0 or a P1 PMD? Assume P0 until proven otherwise */ + pspace = 0; + + if (pmd_base == mm->pgd[0].pmd) { + pspace = 0; + } else if (pmd_base == mm->pgd[1].pmd) { + pspace = 1; + } else { + BUG(); + } - if (!pgdp) { - printk(KERN_ERR "VAXMM: null pgd ptr in task mm struct %8p\n",mm); - goto give_segv; - } - - /* decide on the segment we are in */ - pgd_segment=0; - while ((pgdp[pgd_segment].pmd != pmd_basep)&&(pgd_segment<4)) { - pgd_segment++; - } - - switch(pgd_segment) { - case 0: - case 1: - /* user segments */ - is_p1=pgd_segment; - pgdp = &pgdp[pgd_segment]; - break; - case 2: - /* pte_alloc_kernel?, should we free the pte here? */ -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM:pmd_populate: kernel S0 segment pmd, %p, pte %8lx\n",pmd,pte); -#endif - pgdp = &pgdp[2]; /* swapper_pg_dir */ - pmd_populate_S0(pgdp, pmd); - return; - case 3: - default: - /* no match - something has gone very wrong. free ptes? send segv? */ -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM:pmd_populate: kernel S1 segment pmd, %p, pte %8lx\n",pmd,pte); -#endif - printk( KERN_ERR "VAXMM: pmd_populate: Attempting to set S1 pte. pmd, %p, pte %p\n",pmd,pte); - goto give_segv; - return; - } - - /* make an adjusted address + calculate linear page table entry */ - - adjusted_address = (((pmd-pmd_basep))<<(PAGE_SHIFT+7)); - - /* enforce wsmax memory limits */ - if (is_p1){ - adjusted_address |= 0x40000000; - if (adjusted_address <= (PAGE_OFFSET-TASK_STKMAX)) { - printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_STKMAX (%dMB) addr %8lx\n",current,(TASK_STKMAX>>20),adjusted_address); - goto give_segv; - } - pte_number = (adjusted_address - 0x40000000) >> PAGE_SHIFT; - } else { - if (adjusted_address >= (TASK_WSMAX)) { - printk(KERN_NOTICE "VAXMM: process %p exceeded TASK_WSMAX (%dMB) addr %8lx\n",current,(TASK_WSMAX>>20),adjusted_address); - goto give_segv; - } - pte_number = (adjusted_address>>PAGE_SHIFT); - } + pgd_entry = mm->pgd + pspace; + + /* Now we can work out the system virtual address of the relevant + page in the process page table */ + pte_addr = (pte_t *)(pgd_entry->br + (pmd_index << PAGE_SHIFT)); - - /* check that the pte we want isnt already allocated */ - if (is_p1) { - if ((pte_number) > (pgdp->lr)) { -#ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM: pte_alloc called on already allocated page (pte %8lx, lr %8lx)\n",pte_number,pgdp->lr); -#endif - return; - } - } else { - if ((pte_number) < (pgdp->lr)) { #ifdef VAX_MM_PGALLOC_DEBUG - printk(KERN_DEBUG "VAXMM: pte_alloc called on already allocated page (pte %8lx, lr %8lx)\n",pte_number,pgdp->lr); + printk(KERN_DEBUG "VAXMM: pmd_populate: mm %p br %08lx lr %04lx pmd %p page %p pte_addr %p reg %d index %04lx\n", + mm, pgd_entry->br, pgd_entry->lr, pmd, pte_page, pte_addr, pspace, pmd_index); #endif - return; - } - } - - /* find the current last page in the page table */ - current_last_page = (pgdp->lr >> 7) - 1; /* 128 PTE's per page */ - target_page = pmd_index(adjusted_address); - - if (is_p1) { - npages = current_last_page - target_page + 1; - /* The s0 address of the current end page in the page table is - * current_last_page * 128 ptes/page * 32 bytes/pte_t + base reg */ - - s0addr = (pmd_t *) ((((current_last_page)<<7)*BYTES_PER_PTE_T)+pgdp->br); - direction = -1; - pmdi = pmd_basep+(current_last_page); - } else { - npages = target_page - current_last_page; - s0addr = (pmd_t *) ((((current_last_page + 1)<<7)*BYTES_PER_PTE_T)+pgdp->br); - direction = 1; - pmdi = pmd_basep+(current_last_page + 1); - } - - for (ii=0; ii<npages; ii++) { - if (!(pte_page=vax_pte_alloc_one(pmdi))) { - printk(KERN_ERR "VAXMM: Unable to expand process page table (pgd=%8p)\n",pgdp); - goto give_segv; - } - - /* remap and clear this page */ - remap_and_clear_pte_page(s0addr, pte_page); - - /* set the pmd */ - pmd_val(*pmdi) = (unsigned long) s0addr; - - /* increment/decrement length register. */ - pgdp->lr += (direction*128); - s0addr += (direction * (PAGE_SIZE>>2)); - pmdi += direction; - - } - - /* if task == current, the hw registers need to be set */ - if (is_p1) { - if (current->thread.pcb.p1br == pgdp->br) { - current->thread.pcb.p1lr = pgdp->lr * 8; - set_vaxmm_regs_p1(pgdp); - - } - } else { - if (current->thread.pcb.p0br == pgdp->br) { - current->thread.pcb.p0lr = pgdp->lr * 8; - set_vaxmm_regs_p0(pgdp); - } - } - - /* we flush tlb anways as we have touched S0 page tables */ - flush_tlb_all(); - return; + /* Double-map the newly-allocated page to this S0 address */ + remap_pgtable_page(pte_addr, pte_page); -give_segv: - printk(KERN_NOTICE "VAXMM pmd_populate: sending SIGSEGV to process %p\n",current); - force_sig(SIGSEGV,current); - return; - -} /* pte_alloc */ - -/* - * Special case of a system page table pmd entry in the S0 region. - * These are never actually allocated, we just enter the existing - * allocated page into the system pmd table. Or die horribly if its outside - * the existing limits. - */ -void pmd_populate_S0(pgd_t *pgd, pmd_t *pmd) -{ - pmd_t *pmd_base; - unsigned long int page_address, pte_number; - pte_t *spte; - - pmd_base = (pmd_t *)pgd->pmd; - /* get physical page address */ - page_address = (((pmd-pmd_base))<<(PAGE_SHIFT+7)); - /* The length register for S0 is in pagelets */ - pte_number = (page_address>>PAGELET_SHIFT); - /* convert to a virtual address */ - page_address |= PAGE_OFFSET; - - if (pte_number >= pgd->lr) { - printk(KERN_ERR "VAXMM: attempting to access out of bounds S0 page table entry (address %8lx, pte=%8lx, limit=%8lx)\n",page_address,pte_number, pgd->lr); - vaxpanic("VAXMM: bugcheck!\n"); - return; - } - - /* calculate the appropriate system page table entry */ - spte = GET_SPTE_VIRT(page_address); - /* and enter it into the page table */ - *pmd = __pmd(spte); - - return; -} -/* allocate a page for the page table */ -/* This used to be called pte_alloc_one, until that name was used in the - * arch independent code. See notes above pmd_populate for why this is here - */ -pte_t * vax_pte_alloc_one(pmd_t *pmd) -{ - if (pmd_none(*pmd)) { - pte_t *page = pte_alloc_one_fast(NULL, 0); - - if (!page) return pte_alloc_one(NULL, 0); - - return page; - } - /* notreached */ - return NULL; -} + /* And point the PMD entry to this new mapping */ + pmd->pte_page = pte_addr; + /* Now adjust the P0LR or P1LR if we we've mapped a new + page at the end of the region */ + /* Calculate how far into the region the newly-added page lives */ + if (pspace == 0) { + /* For P0 space, we want to consider the top end of the new + page of PTEs */ + page_index = (pte_addr + PTRS_PER_PTE) - (pte_t *)pgd_entry->br; + + if (pgd_entry->lr < page_index) { + pgd_entry->lr = page_index; + } + } else { + /* For P1 space, we want to consider the bottom end of the new + page of PTEs */ + page_index = pte_addr - (pte_t *)pgd_entry->br; + + if (pgd_entry->lr > page_index) { + pgd_entry->lr = page_index; + } + } -/* free the page after recovering the original address */ -void pte_free(pte_t *pte) -{ - free_pte_fast(get_pageaddr_from_pte(pte)); - /* invalidate the S0 pte that maps this */ - remap_pte_invalidate((pmd_t *)pte); -} +#ifdef VAX_MM_PGALLOC_DEBUG + printk(KERN_DEBUG "VAXMM: pmd_populate: new lr %04lx\n", pgd_entry->lr); +#endif -/* This is only ever called from do_pgt_cache, all the unmapping have been done - * before the page has been placed on the pgt cache */ -void free_pte_slow(pte_t *pte) -{ - free_page((unsigned long int)pte); + /* If all this work is for the current process, then we need to + update the hardware registers */ + if (pspace == 0) { + + if (current->thread.pcb.p0br == pgd_entry->br) { +#ifdef VAX_MM_PGALLOC_DEBUG + printk(KERN_DEBUG "VAXMM: pmd_populate: updating hardware regs\n"); +#endif + current->thread.pcb.p0lr = pgd_entry->lr * 8; + set_vaxmm_regs_p0(pgd_entry); + } + + } else { + if (current->thread.pcb.p1br == pgd_entry->br) { +#ifdef VAX_MM_PGALLOC_DEBUG + printk(KERN_DEBUG "VAXMM: pmd_populate: updating hardware regs\n"); +#endif + current->thread.pcb.p1lr = pgd_entry->lr * 8; + set_vaxmm_regs_p1(pgd_entry); + } + } } -/* Find an entry in the third-level page table.. */ -#ifdef VAX_MM_PGALLOC_DEBUG -pte_t * pte_offset(pmd_t * dir, unsigned long address) +/* The pmd argument points to a single PMD entry (which corresponds to + a single page in a process page table). We should invalidate the + mapping of this page in the process page table and then clear out + the PMD entry itself */ +void pmd_clear(pmd_t *pmd) { - unsigned long int offset; - offset = (pmd_val(*dir)+(((address>>PAGE_SHIFT)&(PTRS_PER_PTE-1))<<SIZEOF_PTE_LOG2)); -// printk(KERN_DEBUG "VAXMM:pte_offset: pmd %8p, address %8lx, pte_offset %8lx\n",dir, address, offset); - return offset; + unmap_pgtable_page(pmd->pte_page); + pmd->pte_page = NULL; } -#else -pte_t * pte_offset(pmd_t * dir, unsigned long address) + +/* Find an entry in the third-level page table.. */ +pte_t * pte_offset(pmd_t *pmd, unsigned long address) { - return (pte_t *)(pmd_val(*dir)+(((address>>PAGE_SHIFT)&(PTRS_PER_PTE-1))<<SIZEOF_PTE_LOG2)); -} + pte_t *pte; + pte = pmd->pte_page + ((address>>PAGE_SHIFT) & (PTRS_PER_PTE-1)); +#ifdef VAX_MM_PGALLOC_DEBUG + printk(KERN_DEBUG "VAXMM:pte_offset: pmd %p, address %8lx, pte_pte %p\n", pmd, address, pte); #endif - + return pte; +} |
From: Kenn H. <ke...@us...> - 2002-12-02 00:13:53
|
Update of /cvsroot/linux-vax/kernel-2.5/arch/vax/kernel In directory sc8-pr-cvs1:/tmp/cvs-serv17511 Modified Files: clock.c Log Message: Fix a compiler warning about a printf format string Index: clock.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/arch/vax/kernel/clock.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- clock.c 20 May 2002 01:09:49 -0000 1.3 +++ clock.c 2 Dec 2002 00:13:50 -0000 1.4 @@ -40,7 +40,7 @@ void ka4x_clock_init(void) { mv->clock_base = ioremap(VSA_CLOCK_BASE,1); /* 1 page */ - printk("Mapped RTC clock page (v %8lx p %8lx )\n",mv->clock_base,VSA_CLOCK_BASE); + printk("Mapped RTC clock page (v %p p %08x )\n",mv->clock_base,VSA_CLOCK_BASE); printk("RTC date is %2.2d:%2.2d:%4.4d %2.2d:%2.2d:%2.2d\n", CMOS_READ(RTC_DAY_OF_MONTH), CMOS_READ(RTC_MONTH), CMOS_READ(RTC_YEAR), |
From: Kenn H. <ke...@us...> - 2002-12-02 00:13:20
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv17117 Modified Files: tlb.h Log Message: Argument types for flush_tlb_range changed in 2.5.5 Index: tlb.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/tlb.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- tlb.h 20 May 2002 00:33:39 -0000 1.3 +++ tlb.h 2 Dec 2002 00:13:17 -0000 1.4 @@ -43,10 +43,10 @@ __flush_tlb_one(addr); } -static inline void flush_tlb_range(struct mm_struct *mm, +static inline void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) { - if (mm == current->mm) + if (vma->vm_mm == current->mm) __flush_tlb(); } |
From: Kenn H. <ke...@us...> - 2002-12-02 00:12:33
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv15899 Modified Files: pagelet_pte.h Log Message: 2.5.5 uses struct page pointers to refer to pages in page tables (to allow PTEs in HIGHMEM). This requires a few more macros for other arches. We stub these out here (pte_offset_kernel, pte_offset_map, pte_offset_map_nested, pte_unmap and pte_unmap_nested). Index: pagelet_pte.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pagelet_pte.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- pagelet_pte.h 20 May 2002 00:33:39 -0000 1.3 +++ pagelet_pte.h 2 Dec 2002 00:12:30 -0000 1.4 @@ -275,7 +275,19 @@ static inline int pte_present(pte_t pte) { return (pte_val(pte) & _PAGE_VALID); } extern pte_t * pte_offset(pmd_t * dir, unsigned long address); - + +/* These variants on pte_offset are for i386 where pages of PTEs might + be in highmem and thus have to be re-mapped < 4GB before accessing. + The pte_unmap() functions undo whatever has to be done by the _map() + functions */ +#define pte_offset_kernel(dir, address) pte_offset(dir, address) +#define pte_offset_map(dir, address) pte_offset(dir, address) +#define pte_offset_map_nested(dir, address) pte_offset(dir, address) +#define pte_unmap(pte) /* nothing to undo */ +#define pte_unmap_nested(pte) /* nothing to undo */ + + + /* items to manipulate a hwpte (for the S0 tables ) */ static inline void set_hwpte(hwpte_t *ptep, hwpte_t pte) |
From: Kenn H. <ke...@us...> - 2002-12-02 00:10:27
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv14542 Modified Files: page.h Log Message: Redefine MAP_NR() and virt_to_page() such that they work for _any_ S0 address, not just the "identity-mapped" addresses from PAGE_OFFSET to PAGE_OFFSET + RAM_SIZE. VM_DATA_DEFAULT_FLAGS also defined as required in 2.5.5 Index: page.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/page.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- page.h 20 May 2002 00:33:39 -0000 1.3 +++ page.h 2 Dec 2002 00:10:23 -0000 1.4 @@ -79,9 +79,16 @@ #define PAGE_OFFSET __PAGE_OFFSET #define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) #define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) -#define MAP_NR(addr) (__pa(addr) >> PAGE_SHIFT) -#define virt_to_page(kaddr) (mem_map + (__pa(kaddr) >> PAGE_SHIFT)) + +/* Find this SPTE for addr and extract the PFN from that. This is safe + to use for _any_ S0 address */ +#define MAP_NR(addr) (((GET_HWSPTE_VIRT(addr))->hwpte & PAGELET_PFN_MASK) >> 3) + +#define virt_to_page(kaddr) (mem_map + MAP_NR(kaddr)) #define VALID_PAGE(page) ((page - mem_map) < max_mapnr) + +#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) #endif /* __KERNEL__ */ |
From: Kenn H. <ke...@us...> - 2002-12-02 00:08:23
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv14218 Modified Files: cache.h Log Message: Need flush_icache_user_range for 2.5.5 Index: cache.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/cache.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- cache.h 20 May 2002 00:33:39 -0000 1.3 +++ cache.h 2 Dec 2002 00:08:18 -0000 1.4 @@ -17,9 +17,9 @@ #define flush_dcache_page(page) do { } while (0) /* Flushing the instruction cache is all-or-nothing on VAX. */ -#define flush_icache_range(start, end) flush_icache() - -#define flush_icache_page(vma, pg) flush_icache() +#define flush_icache_range(start, end) flush_icache() +#define flush_icache_user_range(vma, pg, start, end) flush_icache() +#define flush_icache_page(vma, pg) flush_icache() static inline void flush_icache(void) { |
From: Kenn H. <ke...@us...> - 2002-12-02 00:07:47
|
Update of /cvsroot/linux-vax/kernel-2.5 In directory sc8-pr-cvs1:/tmp/cvs-serv13924 Modified Files: Makefile Rules.make Log Message: 2.5.5 merge Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/Makefile,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- Makefile 29 Oct 2002 00:52:49 -0000 1.8 +++ Makefile 2 Dec 2002 00:07:44 -0000 1.9 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 5 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -124,7 +124,7 @@ NETWORKS =net/network.o LIBS =$(TOPDIR)/lib/lib.a -SUBDIRS =kernel lib drivers mm fs net ipc +SUBDIRS =kernel lib drivers mm fs net ipc sound DRIVERS-n := DRIVERS-y := @@ -158,7 +158,7 @@ DRIVERS-y += drivers/cdrom/driver.o endif -DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o +DRIVERS-$(CONFIG_SOUND) += sound/sound.o DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o @@ -210,7 +210,7 @@ drivers/char/drm/*-mod.c \ drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \ drivers/zorro/devlist.h drivers/zorro/gen-devlist \ - drivers/sound/bin2hex drivers/sound/hex2hex \ + sound/oss/bin2hex sound/oss/hex2hex \ drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \ drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \ drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \ @@ -231,11 +231,11 @@ drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \ drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \ drivers/net/hamradio/soundmodem/gentbl \ - drivers/sound/*_boot.h drivers/sound/.*.boot \ - drivers/sound/msndinit.c \ - drivers/sound/msndperm.c \ - drivers/sound/pndsperm.c \ - drivers/sound/pndspini.c \ + sound/oss/*_boot.h sound/oss/.*.boot \ + sound/oss/msndinit.c \ + sound/oss/msndperm.c \ + sound/oss/pndsperm.c \ + sound/oss/pndspini.c \ drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \ .version .config* config.in config.old \ scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \ @@ -356,7 +356,7 @@ init/do_mounts.o: init/do_mounts.c include/config/MARKER $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $< -Wa,-adnhls=$*.lst -fs lib mm ipc kernel drivers net: dummy +fs lib mm ipc kernel drivers net sound: dummy $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@) TAGS: dummy Index: Rules.make =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/Rules.make,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Rules.make 29 Oct 2002 00:52:49 -0000 1.3 +++ Rules.make 2 Dec 2002 00:07:44 -0000 1.4 @@ -209,6 +209,8 @@ ifneq "$(strip $(export-objs))" "" MODINCL = $(TOPDIR)/include/linux/modules +MODCURDIR = $(subst $(TOPDIR)/,,$(shell /bin/pwd)) +MODPREFIX = $(subst /,-,$(MODCURDIR))__ # The -w option (enable warnings) for genksyms will return here in 2.1 # So where has it gone? @@ -223,20 +225,20 @@ genksyms_smp_prefix := endif -$(MODINCL)/%.ver: %.c - @if [ ! -r $(MODINCL)/$*.stamp -o $(MODINCL)/$*.stamp -ot $< ]; then \ +$(MODINCL)/$(MODPREFIX)%.ver: %.c + @if [ ! -r $(MODINCL)/$(MODPREFIX)$*.stamp -o $(MODINCL)/$(MODPREFIX)$*.stamp -ot $< ]; then \ echo '$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -E -D__GENKSYMS__ $<'; \ echo '| $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp'; \ $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -E -D__GENKSYMS__ $< \ | $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp; \ if [ -r $@ ] && cmp -s $@ $@.tmp; then echo $@ is unchanged; rm -f $@.tmp; \ else echo mv $@.tmp $@; mv -f $@.tmp $@; fi; \ - fi; touch $(MODINCL)/$*.stamp + fi; touch $(MODINCL)/$(MODPREFIX)$*.stamp -$(addprefix $(MODINCL)/,$(export-objs:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h +$(addprefix $(MODINCL)/$(MODPREFIX),$(export-objs:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h # updates .ver files but not modversions.h -fastdep: $(addprefix $(MODINCL)/,$(export-objs:.o=.ver)) +fastdep: $(addprefix $(MODINCL)/$(MODPREFIX),$(export-objs:.o=.ver)) # updates .ver files and modversions.h like before (is this needed?) dep: fastdep update-modverfile |
From: Kenn H. <ke...@us...> - 2002-12-02 00:05:49
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers/scsi In directory sc8-pr-cvs1:/tmp/cvs-serv12778 Modified Files: scsi_merge.c Log Message: 2.5.5 merge Index: scsi_merge.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/scsi/scsi_merge.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- scsi_merge.c 5 Jun 2002 21:55:04 -0000 1.3 +++ scsi_merge.c 2 Dec 2002 00:05:46 -0000 1.4 @@ -123,7 +123,7 @@ { struct Scsi_Host *SHpnt = SDpnt->host; request_queue_t *q = &SDpnt->request_queue; - dma64_addr_t bounce_limit; + u64 bounce_limit; /* * The generic merging functions work just fine for us. |
From: Kenn H. <ke...@us...> - 2002-12-02 00:04:44
|
Update of /cvsroot/linux-vax/kernel-2.5/drivers/net In directory sc8-pr-cvs1:/tmp/cvs-serv12099 Modified Files: Makefile Log Message: 2.5.5 merge Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/drivers/net/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Makefile 29 Oct 2002 00:52:50 -0000 1.5 +++ Makefile 2 Dec 2002 00:04:41 -0000 1.6 @@ -57,7 +57,6 @@ obj-$(CONFIG_MACE) += mace.o obj-$(CONFIG_BMAC) += bmac.o -obj-$(CONFIG_GMAC) += gmac.o obj-$(CONFIG_OAKNET) += oaknet.o 8390.o @@ -65,7 +64,7 @@ obj-$(CONFIG_RCPCI) += rcpci.o obj-$(CONFIG_VORTEX) += 3c59x.o obj-$(CONFIG_NE2K_PCI) += ne2k-pci.o 8390.o -obj-$(CONFIG_PCNET32) += pcnet32.o +obj-$(CONFIG_PCNET32) += pcnet32.o mii.o obj-$(CONFIG_EEPRO100) += eepro100.o obj-$(CONFIG_TLAN) += tlan.o obj-$(CONFIG_EPIC100) += epic100.o mii.o |