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 |