You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
(12) |
May
(82) |
Jun
(72) |
Jul
(39) |
Aug
(104) |
Sep
(61) |
Oct
(55) |
Nov
(101) |
Dec
(48) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(52) |
Feb
(67) |
Mar
(18) |
Apr
(16) |
May
(33) |
Jun
(12) |
Jul
(102) |
Aug
(168) |
Sep
(65) |
Oct
(60) |
Nov
(43) |
Dec
(121) |
2002 |
Jan
(69) |
Feb
(32) |
Mar
(90) |
Apr
(59) |
May
(45) |
Jun
(43) |
Jul
(33) |
Aug
(21) |
Sep
(11) |
Oct
(20) |
Nov
(26) |
Dec
(3) |
2003 |
Jan
(12) |
Feb
(18) |
Mar
(11) |
Apr
(11) |
May
(41) |
Jun
(76) |
Jul
(77) |
Aug
(15) |
Sep
(38) |
Oct
(56) |
Nov
(19) |
Dec
(39) |
2004 |
Jan
(17) |
Feb
(52) |
Mar
(36) |
Apr
(34) |
May
(48) |
Jun
(85) |
Jul
(38) |
Aug
(42) |
Sep
(41) |
Oct
(77) |
Nov
(27) |
Dec
(19) |
2005 |
Jan
(32) |
Feb
(35) |
Mar
(29) |
Apr
(8) |
May
(7) |
Jun
(31) |
Jul
(46) |
Aug
(93) |
Sep
(65) |
Oct
(85) |
Nov
(219) |
Dec
(47) |
2006 |
Jan
(170) |
Feb
(103) |
Mar
(49) |
Apr
(43) |
May
(45) |
Jun
(29) |
Jul
(77) |
Aug
(82) |
Sep
(43) |
Oct
(45) |
Nov
(26) |
Dec
(85) |
2007 |
Jan
(42) |
Feb
(48) |
Mar
(64) |
Apr
(31) |
May
(88) |
Jun
(53) |
Jul
(175) |
Aug
(212) |
Sep
(91) |
Oct
(103) |
Nov
(110) |
Dec
(5) |
2008 |
Jan
(20) |
Feb
(11) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(5) |
Sep
(3) |
Oct
(12) |
Nov
|
Dec
|
From: NIIBE Y. <gn...@m1...> - 2002-03-22 04:21:24
|
Include changes from mainline 2.5.6. 2002-03-22 NIIBE Yutaka <gn...@m1...> Update to 2.5.6. * AGAINST-2.5.6: New file. * AGAINST-2.5.5: Removed. * Makefile: Version 2.5.6. * Makefile, drivers/Makefile, drivers/block/rd.c, drivers/char/Config.help, drivers/char/Makefile, drivers/net/8139too.c, drivers/net/Config.help, drivers/net/Config.in, drivers/pci/pci.ids, init/do_mounts.c, mm/memory.c: Include changes from mainline (2.5.6). Index: Makefile =================================================================== RCS file: /cvsroot/linuxsh/linux/Makefile,v retrieving revision 1.10 diff -u -3 -p -r1.10 Makefile --- Makefile 22 Mar 2002 00:59:15 -0000 1.10 +++ Makefile 22 Mar 2002 04:18:29 -0000 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 5 -SUBLEVEL = 5 +SUBLEVEL = 6 EXTRAVERSION = -sh KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -162,6 +162,7 @@ DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtd 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 Index: drivers/Makefile =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/Makefile,v retrieving revision 1.5 diff -u -3 -p -r1.5 Makefile --- drivers/Makefile 22 Mar 2002 00:59:15 -0000 1.5 +++ drivers/Makefile 22 Mar 2002 04:18:29 -0000 @@ -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. # Index: drivers/block/rd.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/block/rd.c,v retrieving revision 1.4 diff -u -3 -p -r1.4 rd.c --- drivers/block/rd.c 15 Jan 2002 07:59:52 -0000 1.4 +++ drivers/block/rd.c 22 Mar 2002 04:18:29 -0000 @@ -268,7 +268,7 @@ static int rd_make_request(request_queue goto fail; set_bit(BIO_UPTODATE, &sbh->bi_flags); - sbh->bi_end_io(sbh, len >> 9); + sbh->bi_end_io(sbh); return 0; fail: bio_io_error(sbh); @@ -311,7 +311,7 @@ static int rd_ioctl(struct inode *inode, case BLKROSET: case BLKROGET: case BLKSSZGET: - error = blk_ioctl(inode->i_rdev, cmd, arg); + error = blk_ioctl(inode->i_bdev, cmd, arg); }; out: return error; Index: drivers/char/Config.help =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/char/Config.help,v retrieving revision 1.2 diff -u -3 -p -r1.2 Config.help --- drivers/char/Config.help 26 Feb 2002 09:15:15 -0000 1.2 +++ drivers/char/Config.help 22 Mar 2002 04:18:30 -0000 @@ -425,6 +425,24 @@ CONFIG_ISTALLION read <file:Documentation/modules.txt>. The module will be called istallion.o. +CONFIG_SERIAL_TX3912 + The TX3912 is a Toshiba RISC processor based o the MIPS 3900 core; + see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>. + Say Y here to enable kernel support for the on-board serial port. + +CONFIG_SERIAL_TX3912_CONSOLE + The TX3912 is a Toshiba RISC processor based o the MIPS 3900 core; + see <http://www.toshiba.com/taec/components/Generic/risc/tx3912.htm>. + Say Y here to direct console I/O to the on-board serial port. + +CONFIG_AU1000_SERIAL_CONSOLE + If you have an Alchemy AU1000 processor (MIPS based) and you want + to use a console on a serial port, say Y. Otherwise, say N. + +CONFIG_AU1000_UART + If you have an Alchemy AU1000 processor (MIPS based) and you want + to use serial ports, say Y. Otherwise, say N. + CONFIG_SYNCLINK Provides support for the SyncLink ISA and PCI multiprotocol serial adapters. These adapters support asynchronous and HDLC bit @@ -941,6 +959,11 @@ CONFIG_W83877F_WDT The module is called mixcomwd.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. Most people will say N. + +CONFIG_EUROTECH_WDT + Enable support for the watchdog timer on the Eurotech CPU-1220 and + CPU-1410 cards. These are PC/104 SBCs. Spec sheets and product + information are at <http://www.eurotech.it/>. CONFIG_IB700_WDT This is the driver for the hardware watchdog on the IB700 Single Index: drivers/char/Makefile =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/char/Makefile,v retrieving revision 1.3 diff -u -3 -p -r1.3 Makefile --- drivers/char/Makefile 1 Mar 2002 01:55:10 -0000 1.3 +++ drivers/char/Makefile 22 Mar 2002 04:18:30 -0000 @@ -23,7 +23,7 @@ obj-y += mem.o tty_io.o n_tty.o tty_ioc 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 Index: drivers/net/8139too.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/8139too.c,v retrieving revision 1.8 diff -u -3 -p -r1.8 8139too.c --- drivers/net/8139too.c 22 Mar 2002 00:59:15 -0000 1.8 +++ drivers/net/8139too.c 22 Mar 2002 04:18:30 -0000 @@ -2521,7 +2521,7 @@ static struct pci_driver rtl8139_pci_dri name: DRV_NAME, id_table: rtl8139_pci_tbl, probe: rtl8139_init_one, - remove: rtl8139_remove_one, + remove: __devexit_p(rtl8139_remove_one), #ifdef CONFIG_PM suspend: rtl8139_suspend, resume: rtl8139_resume, Index: drivers/net/Config.help =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/Config.help,v retrieving revision 1.3 diff -u -3 -p -r1.3 Config.help --- drivers/net/Config.help 1 Mar 2002 01:55:10 -0000 1.3 +++ drivers/net/Config.help 22 Mar 2002 04:18:30 -0000 @@ -3,6 +3,10 @@ CONFIG_BAGETLANCE MIPS-32-based Baget embedded system. This chipset is better known via the NE2100 cards. +CONFIG_LASI_82596 + Say Y here to support the on-board Intel 82596 ethernet controller + built into Hewlett-Packard PA-RISC machines. + CONFIG_MIPS_JAZZ_SONIC This is the driver for the onboard card of MIPS Magnum 4000, Acer PICA, Olivetti M700-10 and a few other identical OEM systems. @@ -214,6 +218,12 @@ CONFIG_PPPOE pppd, along with binaries of a patched pppd package can be found at: <http://www.shoshin.uwaterloo.ca/~mostrows/>. +CONFIG_PPPOATM + Support PPP (Point to Point Protocol) encapsulated in ATM frames. + This implementation does not yet comply with section 8 of RFC2364, + which can lead to bad results if the ATM peer loses state and + changes its encapsulation unilaterally. + CONFIG_NET_RADIO Support for wireless LANs and everything having to do with radio, but not with amateur radio or FM broadcasting. @@ -793,6 +803,14 @@ CONFIG_SUNGEM Support for the Sun GEM chip, aka Sun GigabitEthernet/P 2.0. See also <http://www.sun.com/products-n-solutions/hardware/docs/pdf/806-3985-10.pdf>. +CONFIG_TIGON3 + This driver supports Broadcom Tigon3 based gigabit Ethernet cards. + + If you want to compile this driver as a module ( = code which can be + inserted in and removed from the running kernel whenever you want), + say M here and read <file:Documentation/modules.txt>. This is + recommended. The module will be called tg3.o. + CONFIG_MYRI_SBUS This driver supports MyriCOM Sbus gigabit Ethernet cards. @@ -812,6 +830,42 @@ CONFIG_DL2K say M here and read <file:Documentation/modules.txt>. This is recommended. The module will be called dl2k.o. +CONFIG_E1000 + This driver supports Intel(R) PRO/1000 gigabit ethernet family of + adapters, which includes: + + Controller Adapter Name Board IDs + ---------- ------------ --------- + 82542 PRO/1000 Gigabit Server Adapter 700262-xxx, + 717037-xxx + 82543 PRO/1000 F Server Adapter 738640-xxx, + A38888-xxx, + A06512-xxx + 82543 PRO/1000 T Server Adapter A19845-xxx, + A33948-xxx + 82544 PRO/1000 XT Server Adapter A51580-xxx + 82544 PRO/1000 XF Server Adapter A50484-xxx + 82544 PRO/1000 T Desktop Adapter A62947-xxx + + For more information on how to identify your adapter, go to the + Adapter & Driver ID Guide at: + + <http://support.intel.com/support/network/adapter/pro100/21397.htm> + + For general information and support, go to the Intel support + website at: + + <http://support.intel.com> + + More specific information on configuring the driver is in + <file:Documentation/networking/e1000.txt>. + + This driver is also available as a module ( = code which can be + inserted in and removed from the running kernel whenever you want). + The module will be called e1000.o. If you want to compile it as a + module, say M here and read <file:Documentation/modules.txt> as well + as <file:Documentation/networking/net-modules.txt>. + CONFIG_LANCE If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from @@ -823,6 +877,10 @@ CONFIG_LANCE say M here and read <file:Documentation/modules.txt>. This is recommended. The module will be called lance.o. +CONFIG_MIPS_AU1000_ENET + If you have an Alchemy Semi AU1000 ethernet controller + on an SGI MIPS system, say Y. Otherwise, say N. + CONFIG_SGI_IOC3_ETH If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from @@ -1281,39 +1339,6 @@ CONFIG_APRICOT <file:Documentation/networking/net-modules.txt>. The module will be called apricot.o. -CONFIG_DE4X5 - This is support for the DIGITAL series of PCI/EISA Ethernet cards. - These include the DE425, DE434, DE435, DE450 and DE500 models. If - you have a network card of this type, say Y and read the - Ethernet-HOWTO, available from - <http://www.linuxdoc.org/docs.html#howto>. More specific - information is contained in - <file:Documentation/networking/de4x5.txt>. - - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called de4x5.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> as well - as <file:Documentation/networking/net-modules.txt>. - -CONFIG_TULIP - This driver is developed for the SMC EtherPower series Ethernet - cards and also works with cards based on the DECchip - 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are - of this type. (If your card is NOT SMC EtherPower 10/100 PCI - (smc9332dst), you can also try the driver for "Generic DECchip" - cards, above. However, most people with a network card of this type - will say Y here.) Do read the Ethernet-HOWTO, available from - <http://www.linuxdoc.org/docs.html#howto>. More specific - information is contained in - <file:Documentation/networking/tulip.txt>. - - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called tulip.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> as well - as <file:Documentation/networking/net-modules.txt>. - CONFIG_DGRS This is support for the Digi International RightSwitch series of PCI/EISA Ethernet switch cards. These include the SE-4 and the SE-6 @@ -1344,6 +1369,11 @@ CONFIG_FEALNX cards. Specifications and data at <http://www.myson.com.hk/mtd/datasheet/>. +CONFIG_LP486E + Say Y here to support the 82596-based on-board Ethernet controller + for the Panther motherboard, which is one of the two shipped in the + Intel Professional Workstation. + CONFIG_ETH16I If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from @@ -1383,17 +1413,15 @@ CONFIG_VIA_RHINE a module, say M here and read <file:Documentation/modules.txt> as well as <file:Documentation/networking/net-modules.txt>. -CONFIG_DM9102 - This driver is for DM9102(A)/DM9132/DM9801 compatible PCI cards from - Davicom (<http://www.davicom.com.tw/>). If you have such a network - (Ethernet) card, say Y. Some information is contained in the file - <file:Documentation/networking/dmfe.txt>. +CONFIG_VIA_RHINE_MMIO + This instructs the driver to use PCI shared memory (MMIO) instead of + programmed I/O ports (PIO). Enabling this gives an improvement in + processing time in parts of the driver. - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called dmfe.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> as well - as <file:Documentation/networking/net-modules.txt>. + It is not known if this works reliably on all "rhine" based cards, + but it has been tested successfully on some DFE-530TX adapters. + + If unsure, say N. CONFIG_ES3210 If you have a network (Ethernet) card of this type, say Y and read @@ -1425,12 +1453,6 @@ CONFIG_SUNDANCE This driver is for the Sundance "Alta" chip. More specific information and updates are available from <http://www.scyld.com/network/sundance.html>. - -CONFIG_WINBOND_840 - This driver is for the Winbond W89c840 chip. It also works with - the TX9882 chip on the Compex RL100-ATX board. - More specific information and updates are available from - <http://www.scyld.com/network/drivers.html>. CONFIG_ZNET The Zenith Z-Note notebook computer has a built-in network Index: drivers/net/Config.in =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/Config.in,v retrieving revision 1.5 diff -u -3 -p -r1.5 Config.in --- drivers/net/Config.in 22 Mar 2002 00:59:15 -0000 1.5 +++ drivers/net/Config.in 22 Mar 2002 04:18:30 -0000 @@ -149,23 +149,17 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; the fi if [ "$CONFIG_NET_PCI" = "y" ]; then dep_tristate ' AMD PCnet32 PCI support' CONFIG_PCNET32 $CONFIG_PCI - dep_tristate ' Adaptec Starfire support (EXPERIMENTAL)' CONFIG_ADAPTEC_STARFIRE $CONFIG_PCI $CONFIG_EXPERIMENTAL + dep_tristate ' Adaptec Starfire/DuraLAN support' CONFIG_ADAPTEC_STARFIRE $CONFIG_PCI if [ "$CONFIG_ISA" = "y" -o "$CONFIG_EISA" = "y" ]; then dep_tristate ' Ansel Communications EISA 3200 support (EXPERIMENTAL)' CONFIG_AC3200 $CONFIG_EXPERIMENTAL fi dep_tristate ' Apricot Xen-II on board Ethernet' CONFIG_APRICOT $CONFIG_ISA - dep_tristate ' DECchip Tulip (dc21x4x) PCI support' CONFIG_TULIP $CONFIG_PCI - if [ "$CONFIG_TULIP" = "y" -o "$CONFIG_TULIP" = "m" ]; then - dep_bool ' New bus configuration (EXPERIMENTAL)' CONFIG_TULIP_MWI $CONFIG_EXPERIMENTAL - bool ' Use PCI shared mem for NIC registers' CONFIG_TULIP_MMIO - fi if [ "$CONFIG_PCI" = "y" -o "$CONFIG_EISA" = "y" ]; then - tristate ' Generic DECchip & DIGITAL EtherWORKS PCI/EISA' CONFIG_DE4X5 tristate ' Digi Intl. RightSwitch SE-X support' CONFIG_DGRS fi - dep_tristate ' Davicom DM910x/DM980x support' CONFIG_DM9102 $CONFIG_PCI - dep_tristate ' EtherExpressPro/100 support' CONFIG_EEPRO100 $CONFIG_PCI + dep_tristate ' EtherExpressPro/100 support (eepro100, original Becker driver)' CONFIG_EEPRO100 $CONFIG_PCI + dep_tristate ' EtherExpressPro/100 support (e100, Alternate Intel driver)' CONFIG_E100 $CONFIG_PCI dep_tristate ' Mylex EISA LNE390A/B support (EXPERIMENTAL)' CONFIG_LNE390 $CONFIG_EISA $CONFIG_EXPERIMENTAL dep_tristate ' Myson MTD-8xx PCI Ethernet support' CONFIG_FEALNX $CONFIG_PCI dep_tristate ' National Semiconductor DP8381x series PCI Ethernet support' CONFIG_NATSEMI $CONFIG_PCI @@ -190,7 +184,6 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; the fi dep_tristate ' VIA Rhine support' CONFIG_VIA_RHINE $CONFIG_PCI dep_mbool ' Use MMIO instead of PIO (EXPERIMENTAL)' CONFIG_VIA_RHINE_MMIO $CONFIG_VIA_RHINE $CONFIG_EXPERIMENTAL - dep_tristate ' Winbond W89c840 Ethernet support' CONFIG_WINBOND_840 $CONFIG_PCI if [ "$CONFIG_OBSOLETE" = "y" ]; then dep_bool ' Zenith Z-Note support (EXPERIMENTAL)' CONFIG_ZNET $CONFIG_ISA fi @@ -231,11 +224,13 @@ if [ "$CONFIG_ACENIC" != "n" ]; then bool ' Omit support for old Tigon I based AceNICs' CONFIG_ACENIC_OMIT_TIGON_I fi dep_tristate 'D-Link DL2000-based Gigabit Ethernet support' CONFIG_DL2K $CONFIG_PCI +dep_tristate 'Intel(R) PRO/1000 Gigabit Ethernet support' CONFIG_E1000 $CONFIG_PCI dep_tristate 'MyriCOM Gigabit Ethernet support' CONFIG_MYRI_SBUS $CONFIG_SBUS dep_tristate 'National Semiconduct DP83820 support' CONFIG_NS83820 $CONFIG_PCI dep_tristate 'Packet Engines Hamachi GNIC-II support' CONFIG_HAMACHI $CONFIG_PCI dep_tristate 'Packet Engines Yellowfin Gigabit-NIC support (EXPERIMENTAL)' CONFIG_YELLOWFIN $CONFIG_PCI $CONFIG_EXPERIMENTAL dep_tristate 'SysKonnect SK-98xx support' CONFIG_SK98LIN $CONFIG_PCI +dep_tristate 'Broadcom Tigon3 support' CONFIG_TIGON3 $CONFIG_PCI endmenu @@ -325,6 +320,9 @@ fi source drivers/net/wan/Config.in +if [ "$CONFIG_PCI" = "y" -o "$CONFIG_EISA" = "y" -o "$CONFIG_CARDBUS" != "n" ]; then + source drivers/net/tulip/Config.in +fi if [ "$CONFIG_HOTPLUG" = "y" -a "$CONFIG_PCMCIA" != "n" ]; then source drivers/net/pcmcia/Config.in fi Index: drivers/pci/pci.ids =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/pci/pci.ids,v retrieving revision 1.3 diff -u -3 -p -r1.3 pci.ids --- drivers/pci/pci.ids 22 Mar 2002 00:59:15 -0000 1.3 +++ drivers/pci/pci.ids 22 Mar 2002 04:18:30 -0000 @@ -3954,6 +3954,7 @@ 9511 16PCI954 Function 1 15ed 2000 Macrolink MCCR Serial p4-7 of 8 15ed 2001 Macrolink MCCR Serial p4-15 of 16 + 9521 Oxford Semi OX16PCI952 PCI/dual 16950 UART 1416 Multiwave Innovation pte Ltd 1417 Convergenet Technologies Inc 1418 Kyushu electronics systems Inc @@ -4184,12 +4185,18 @@ 14e3 AMTELCO 14e4 BROADCOM Corporation 1644 NetXtreme BCM5700 Gigabit Ethernet + 1014 0277 Broadcom Vigil B5700 1000Base-T + 1028 00d1 Broadcom BCM5700 + 1028 0106 Broadcom BCM5700 + 1028 0109 Broadcom BCM5700 + 1028 010a Broadcom BCM5700 10b7 1000 3C996-T 1000BaseTX 10b7 1001 3C996B-T 1000BaseTX 10b7 1002 3C996C-T 1000BaseTX 10b7 1003 3C997-T 1000BaseTX 10b7 1004 3C996-SX 1000BaseSX 10b7 1005 3C997-SX 1000BaseSX + 10b7 1008 3C942 Gigabit LOM (31X31) 14e4 0002 NetXtreme 1000BaseSX 14e4 0003 NetXtreme 1000BaseSX 14e4 0004 NetXtreme 1000BaseTX @@ -4198,6 +4205,7 @@ 0e11 007c NC7770 1000BaseTX 0e11 007d NC6770 1000BaseSX 0e11 0085 NC7780 1000BaseTX + 1028 0121 Broadcom BCM5701 10b7 1004 3C996-SX 1000BaseSX 10b7 1006 3C996B-T 1000BaseTX 10b7 1007 3C1000-T 1000BaseTX @@ -4208,7 +4216,16 @@ 14e4 0007 NetXtreme BCM5701 1000BaseSX 14e4 0008 NetXtreme BCM5701 1000BaseTX 14e4 8008 NetXtreme BCM5701 1000BaseTX + 1646 NetXtreme BCM5702 Gigabit Ethernet + 14e4 8009 Broadcom BCM5702 1647 NetXtreme BCM5703 Gigabit Ethernet + 0e11 009a NC7770 + 0e11 0099 NC7780 + 14e4 0009 Broadcom BCM5703 + 14e4 8009 Broadcom BCM5703 + 164d NetXtreme BCM5702FE Gigabit Ethernet + 16a6 NetXtreme BCM5702X Gigabit Ethernet + 16a7 NetXtreme BCM5703X Gigabit Ethernet 5820 BCM5820 Crypto Accelerator 14e5 Pixelfusion Ltd 14e6 SHINING Technology Inc @@ -4648,6 +4665,8 @@ 0400 FarSync T2P (2 port X.21/V.35/V.24) 0440 FarSync T4P (4 port X.21/V.35/V.24) 1668 Action Tec Electronics Inc +173b Altima (nee BroadCom) + 03e8 AC1000 Gigabit Ethernet 1813 Ambient Technologies Inc 1a08 Sierra semiconductor 0000 SC15064 Index: init/do_mounts.c =================================================================== RCS file: /cvsroot/linuxsh/linux/init/do_mounts.c,v retrieving revision 1.2 diff -u -3 -p -r1.2 do_mounts.c --- init/do_mounts.c 15 Jan 2002 07:59:52 -0000 1.2 +++ init/do_mounts.c 22 Mar 2002 04:18:30 -0000 @@ -841,7 +841,7 @@ out: mount_devfs_fs (); } -#ifdef BUILD_CRAMDISK +#if defined(BUILD_CRAMDISK) && defined(CONFIG_BLK_DEV_RAM) /* * gzip declarations @@ -986,4 +986,4 @@ static int __init crd_load(int in_fd, in return result; } -#endif /* BUILD_CRAMDISK */ +#endif /* BUILD_CRAMDISK && CONFIG_BLK_DEV_RAM */ Index: mm/memory.c =================================================================== RCS file: /cvsroot/linuxsh/linux/mm/memory.c,v retrieving revision 1.7 diff -u -3 -p -r1.7 memory.c --- mm/memory.c 22 Mar 2002 00:59:16 -0000 1.7 +++ mm/memory.c 22 Mar 2002 04:18:30 -0000 @@ -1036,31 +1036,35 @@ no_mem: return -1; } -static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long pgoff) +static void vmtruncate_list(list_t *head, unsigned long pgoff) { - do { - unsigned long start = mpnt->vm_start; - unsigned long end = mpnt->vm_end; - unsigned long len = end - start; - unsigned long diff; + unsigned long start, end, len, diff; + struct vm_area_struct *vma; + list_t *curr; + + list_for_each(curr, head) { + vma = list_entry(curr, struct vm_area_struct, shared); + start = vma->vm_start; + end = vma->vm_end; + len = end - start; /* mapping wholly truncated? */ - if (mpnt->vm_pgoff >= pgoff) { - zap_page_range(mpnt, start, len); + if (vma->vm_pgoff >= pgoff) { + zap_page_range(vma, start, len); continue; } /* mapping wholly unaffected? */ len = len >> PAGE_SHIFT; - diff = pgoff - mpnt->vm_pgoff; + diff = pgoff - vma->vm_pgoff; if (diff >= len) continue; /* Ok, partially affected.. */ start += diff << PAGE_SHIFT; len = (len - diff) << PAGE_SHIFT; - zap_page_range(mpnt, start, len); - } while ((mpnt = mpnt->vm_next_share) != NULL); + zap_page_range(vma, start, len); + } } /* @@ -1081,14 +1085,14 @@ int vmtruncate(struct inode * inode, lof goto do_expand; inode->i_size = offset; spin_lock(&mapping->i_shared_lock); - if (!mapping->i_mmap && !mapping->i_mmap_shared) + if (list_empty(&mapping->i_mmap) && list_empty(&mapping->i_mmap_shared)) goto out_unlock; pgoff = (offset + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; - if (mapping->i_mmap != NULL) - vmtruncate_list(mapping->i_mmap, pgoff); - if (mapping->i_mmap_shared != NULL) - vmtruncate_list(mapping->i_mmap_shared, pgoff); + if (!list_empty(&mapping->i_mmap)) + vmtruncate_list(&mapping->i_mmap, pgoff); + if (!list_empty(&mapping->i_mmap_shared)) + vmtruncate_list(&mapping->i_mmap_shared, pgoff); out_unlock: spin_unlock(&mapping->i_shared_lock); @@ -1484,8 +1488,9 @@ int make_pages_present(unsigned long add /* * Map a vmalloc()-space virtual address to the physical page. */ -struct page * vmalloc_to_page(unsigned long addr) +struct page * vmalloc_to_page(void * vmalloc_addr) { + unsigned long addr = (unsigned long) vmalloc_addr; struct page *page = NULL; pgd_t *pgd = pgd_offset_k(addr); pmd_t *pmd; |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 03:57:23
|
More follow-up to 2.5.5. 2002-03-22 NIIBE Yutaka <gn...@se...> * include/asm-sh/pgtable.h (pmd_page_kernel): Renamed from pmd_page. (pmd_page): New macro for user page. (pte_offset_kernel): New macro. (pte_offset_map, pte_offset_map_nested, pte_unmap, pte_unmap_nested): New macros. * arch/sh/mm/ioremap.c (remap_area_pmd): Use pte_alloc_kernel (was: pte_alloc). Index: arch/sh/mm/ioremap.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/ioremap.c,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 ioremap.c --- arch/sh/mm/ioremap.c 15 Oct 2001 20:44:54 -0000 1.1.1.1 +++ arch/sh/mm/ioremap.c 22 Mar 2002 03:47:36 -0000 @@ -52,7 +52,7 @@ static inline int remap_area_pmd(pmd_t * if (address >= end) BUG(); do { - pte_t * pte = pte_alloc(&init_mm, pmd, address); + pte_t * pte = pte_alloc_kernel(&init_mm, pmd, address); if (!pte) return -ENOMEM; remap_area_pte(pte, address, end - address, address + phys_addr, flags); Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.5 diff -u -3 -p -r1.5 pgtable.h --- include/asm-sh/pgtable.h 22 Mar 2002 00:59:15 -0000 1.5 +++ include/asm-sh/pgtable.h 22 Mar 2002 03:47:36 -0000 @@ -269,9 +271,12 @@ static inline pte_t pte_modify(pte_t pte #define page_pte(page) page_pte_prot(page, __pgprot(0)) -#define pmd_page(pmd) \ +#define pmd_page_kernel(pmd) \ ((unsigned long) __va(pmd_val(pmd) & PAGE_MASK)) +#define pmd_page(pmd) \ + (phys_to_page(pmd_val(pmd))) + /* to find an entry in a page-table-directory. */ #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) #define __pgd_offset(address) pgd_index(address) @@ -283,8 +288,13 @@ static inline pte_t pte_modify(pte_t pte /* Find an entry in the third-level page table.. */ #define __pte_offset(address) \ ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) -#define pte_offset(dir, address) ((pte_t *) pmd_page(*(dir)) + \ - __pte_offset(address)) +#define pte_offset_kernel(dir, address) \ + ((pte_t *) pmd_page_kernel(*(dir)) + __pte_offset(address)) +#define pte_offset_map(dir, address) \ + ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) +#define pte_offset_map_nested(dir, address) pte_offset_map(dir, address) +#define pte_unmap(pte) do { } while (0) +#define pte_unmap_nested(pte) do { } while (0) extern void update_mmu_cache(struct vm_area_struct * vma, unsigned long address, pte_t pte); |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 03:01:54
|
NIIBE Yutaka wrote: > Index: arch/sh/kernel/entry.S > =================================================================== > RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/entry.S,v > retrieving revision 1.5 > diff -u -3 -p -r1.5 entry.S > --- arch/sh/kernel/entry.S 19 Mar 2002 23:48:05 -0000 1.5 > +++ arch/sh/kernel/entry.S 22 Mar 2002 01:57:26 -0000 > @@ -268,19 +268,9 @@ error: > nop > > ! > -ENTRY(ret_from_fork) > - mov.l @r15+,r0 > - mov r0, r4 > - ! Call schedule_tail > - mov.l 3f, r1 > - mova syscall_exit, r0 > - jmp @r1 > - lds r0, pr > - > .align 2 > 1: .long SYMBOL_NAME(break_point_trap_software) > 2: .long SYMBOL_NAME(do_exception_error) > -3: .long SYMBOL_NAME(schedule_tail) > > .align 2 > work_pending: > @@ -406,6 +396,7 @@ syscall_call: > jsr @r11 ! jump to specific syscall handler > nop > mov.l r0, @(OFF_R0,r15) ! save the return value > +ENTRY(ret_from_fork): ^ No, we should not have colon here. > syscall_exit: > /* CLI */ > stc sr, r0 -- |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 02:56:48
|
NIIBE Yutaka wrote: > Index: include/asm-sh/system.h > =================================================================== > RCS file: /cvsroot/linuxsh/linux/include/asm-sh/system.h,v > retrieving revision 1.1.1.1 > diff -u -3 -p -r1.1.1.1 system.h > --- include/asm-sh/system.h 15 Oct 2001 20:45:11 -0000 1.1.1.1 > +++ include/asm-sh/system.h 22 Mar 2002 01:57:26 -0000 > @@ -20,8 +20,7 @@ typedef struct { > #error no SMP SuperH > #else > #define prepare_to_switch() do { } while(0) > -#define switch_to(prev,next,last) do { \ > - register struct task_struct *__last; \ > +#define switch_to(prev, next) do { \ > register unsigned long *__ts1 __asm__ ("r1") = &prev->thread.sp; \ > register unsigned long *__ts2 __asm__ ("r2") = &prev->thread.pc; \ > register unsigned long *__ts4 __asm__ ("r4") = (unsigned long *)prev; \ > @@ -40,7 +39,6 @@ typedef struct { > "mov.l r14, @-r15\n\t" \ > "mov.l r15, @r1 ! save SP\n\t" \ > "mov.l @r6, r15 ! change to new stack\n\t" \ > - "mov.l %0, @-r15 ! push R0 onto new stack\n\t" \ > "mova 1f, %0\n\t" \ > "mov.l %0, @r2 ! save PC\n\t" \ > "mov.l 2f, %0\n\t" \ > @@ -50,7 +48,6 @@ typedef struct { > "2:\n\t" \ > ".long " "__switch_to\n" \ > "1:\n\t" \ > - "mov.l @r15+, %0 ! pop R0 from new stack\n\t" \ > "mov.l @r15+, r14\n\t" \ > "mov.l @r15+, r13\n\t" \ > "mov.l @r15+, r12\n\t" \ > @@ -60,12 +57,11 @@ typedef struct { > "mov.l @r15+, r8\n\t" \ > "lds.l @r15+, pr\n\t" \ > "ldc.l @r15+, gbr\n\t" \ > - :"=&z" (__last) \ > - :"0" (prev), \ > - "r" (__ts1), "r" (__ts2), \ > - "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ > - :"r3", "t"); \ > - last = __last; \ > + : /* No output */ \ > + : "r" (prev), \ z This should be "z" so that we can use "mova" instruction (only r0 is allowed). > + "r" (__ts1), "r" (__ts2), \ > + "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ > + : "r3", "t"); \ > } while (0) > #endif -- |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 02:46:02
|
Other follow-up to 2.5.5. 2002-03-22 NIIBE Yutaka <gn...@m1...> * arch/sh/kernel/process.c (cpu_idle): Don't call check_pgt_cache. * include/asm-sh/pgalloc.h (pmd_populate_kernel): Renemed from pmd_populate. (pmd_populate): New function for U0 page. (do_check_pgt_cache): Removed. (pmd_free_slow, pmd_free_fast): Removed. (pmd_alloc_one_fast): Removed. (pte_free_slow): Renamed to pte_free. Macro removed. (pte_alloc_one_fast): Removed. (pte_alloc_one_kernel): New function. (pte_alloc_one): Call schedule_timeout and try again. Index: arch/sh/kernel/process.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/process.c,v retrieving revision 1.6 diff -u -3 -p -r1.6 process.c --- arch/sh/kernel/process.c 19 Mar 2002 23:48:06 -0000 1.6 +++ arch/sh/kernel/process.c 22 Mar 2002 02:42:15 -0000 @@ -55,7 +55,6 @@ void cpu_idle(void *unused) __sti(); } schedule(); - check_pgt_cache(); } } Index: include/asm-sh/pgalloc.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgalloc.h,v retrieving revision 1.2 diff -u -3 -p -r1.2 pgalloc.h --- include/asm-sh/pgalloc.h 24 Jan 2002 11:04:15 -0000 1.2 +++ include/asm-sh/pgalloc.h 22 Mar 2002 02:42:15 -0000 @@ -10,9 +10,15 @@ #define pte_quicklist ((unsigned long *)0) #define pgtable_cache_size 0L -#define pmd_populate(mm, pmd, pte) \ +#define pmd_populate_kernel(mm, pmd, pte) \ set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) +static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, + struct page *pte) +{ + set_pmd(pmd, __pmd(_PAGE_TABLE + page_to_phys(pte))); +} + /* * Allocate and free page tables. */ @@ -33,43 +39,58 @@ static inline void pgd_free(pgd_t *pgd) kfree(pgd); } -static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address) +static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) { - pte_t *pte = (pte_t *) __get_free_page(GFP_KERNEL); - if (pte) - clear_page(pte); + int count = 0; + pte_t *pte; + + do { + pte = (pte_t *) __get_free_page(GFP_KERNEL); + if (pte) + clear_page(pte); + else { + current->state = TASK_UNINTERRUPTIBLE; + schedule_timeout(HZ); + } + } while (!pte && (count++ < 10)); return pte; } -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) { - return 0; + int count = 0; + struct page *pte; + + do { + pte = alloc_pages(GFP_KERNEL, 0); + if (pte) + clear_page(pte); + else { + current->state = TASK_UNINTERRUPTIBLE; + schedule_timeout(HZ); + } + } while (!pte && (count++ < 10)); + return pte; } -static inline void pte_free_slow(pte_t *pte) +static inline void pte_free_kernel(pte_t *pte) { free_page((unsigned long)pte); } -#define pte_free(pte) pte_free_slow(pte) +static inline void pte_free(struct page *pte) +{ + __free_page(pte); +} /* * allocating and freeing a pmd is trivial: the 1-entry pmd is * inside the pgd, so has no extra memory associated with it. */ -static inline void pmd_free(pmd_t * pmd) -{ -} -#define pmd_alloc_one_fast(mm, addr) ({ BUG(); ((pmd_t *)1); }) #define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) -#define pmd_free_slow(x) do { } while (0) -#define pmd_free_fast(x) do { } while (0) #define pmd_free(x) do { } while (0) #define pgd_populate(mm, pmd, pte) BUG() - -/* Do nothing */ -static inline int do_check_pgt_cache(int low, int high) { } /* * TLB flushing: |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 02:00:01
|
Another follow up to 2.5.5. 2002-03-22 NIIBE Yutaka <gn...@m1...> * arch/sh/kernel/entry.S (ret_from_fork): Follow the change of switch_to. Don't call schedule_tail (it's now SMP only function). Move the label to syscall_exit. * include/asm-sh/system.h (switch_to): Change the API (removing last argument). * include/asm-sh/page.h (VM_DATA_DEFAULT_FLAGS): Defined. * include/asm-sh/bitops.h (sched_find_first_bit): 140-bit implementation. It's moved to here... * include/asm-sh/mmu_context.h: ... from here. (Removed). Index: arch/sh/kernel/entry.S =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/entry.S,v retrieving revision 1.5 diff -u -3 -p -r1.5 entry.S --- arch/sh/kernel/entry.S 19 Mar 2002 23:48:05 -0000 1.5 +++ arch/sh/kernel/entry.S 22 Mar 2002 01:57:26 -0000 @@ -268,19 +268,9 @@ error: nop ! -ENTRY(ret_from_fork) - mov.l @r15+,r0 - mov r0, r4 - ! Call schedule_tail - mov.l 3f, r1 - mova syscall_exit, r0 - jmp @r1 - lds r0, pr - .align 2 1: .long SYMBOL_NAME(break_point_trap_software) 2: .long SYMBOL_NAME(do_exception_error) -3: .long SYMBOL_NAME(schedule_tail) .align 2 work_pending: @@ -406,6 +396,7 @@ syscall_call: jsr @r11 ! jump to specific syscall handler nop mov.l r0, @(OFF_R0,r15) ! save the return value +ENTRY(ret_from_fork): syscall_exit: /* CLI */ stc sr, r0 Index: include/asm-sh/bitops.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/bitops.h,v retrieving revision 1.2 diff -u -3 -p -r1.2 bitops.h --- include/asm-sh/bitops.h 26 Feb 2002 09:15:15 -0000 1.2 +++ include/asm-sh/bitops.h 22 Mar 2002 01:57:26 -0000 @@ -262,6 +262,26 @@ found_middle: #define hweight16(x) generic_hweight16(x) #define hweight8(x) generic_hweight8(x) +/* + * Every architecture must define this function. It's the fastest + * way of searching a 140-bit bitmap where the first 100 bits are + * unlikely to be set. It's guaranteed that at least one of the 140 + * bits is cleared. + */ + +static inline int sched_find_first_bit(unsigned long *b) +{ + if (unlikely(b[0])) + return __ffs(b[0]); + if (unlikely(b[1])) + return __ffs(b[1]) + 32; + if (unlikely(b[2])) + return __ffs(b[2]) + 64; + if (b[3]) + return __ffs(b[3]) + 96; + return __ffs(b[4]) + 128; +} + #ifdef __LITTLE_ENDIAN__ #define ext2_set_bit(nr, addr) test_and_set_bit((nr), (addr)) #define ext2_clear_bit(nr, addr) test_and_clear_bit((nr), (addr)) Index: include/asm-sh/mmu_context.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/mmu_context.h,v retrieving revision 1.5 diff -u -3 -p -r1.5 mmu_context.h --- include/asm-sh/mmu_context.h 26 Feb 2002 09:15:16 -0000 1.5 +++ include/asm-sh/mmu_context.h 22 Mar 2002 01:57:26 -0000 @@ -186,38 +186,4 @@ enter_lazy_tlb(struct mm_struct *mm, str { } -/* - * Every architecture must define this function. It's the fastest - * way of searching a 168-bit bitmap where the first 128 bits are - * unlikely to be set. It's guaranteed that at least one of the 168 - * bits is cleared. - */ -#if MAX_RT_PRIO != 128 || MAX_PRIO != 168 -# error update this function. -#endif - -static inline int sched_find_first_bit(unsigned long *b) -{ - unsigned int rt; - - rt = b[0] & b[1] & b[2] & b[3]; - if (unlikely(rt != 0xffffffff)) - return find_first_zero_bit(b, MAX_RT_PRIO); - - if (b[4] != ~0) - return ffz(b[4]) + MAX_RT_PRIO; - return ffz(b[5]) + 32 + MAX_RT_PRIO; - if (unlikely(b[0])) - return __ffs(b[0]); - if (unlikely(b[1])) - return __ffs(b[1]) + 32; - if (unlikely(b[2])) - return __ffs(b[2]) + 64; - if (unlikely(b[3])) - return __ffs(b[3]) + 96; - if (b[4]) - return __ffs(b[4]) + 128; - return __ffs(b[5]) + 32 + 128; -} - #endif /* __ASM_SH_MMU_CONTEXT_H */ Index: include/asm-sh/page.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/page.h,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 page.h --- include/asm-sh/page.h 15 Oct 2001 20:45:10 -0000 1.1.1.1 +++ include/asm-sh/page.h 22 Mar 2002 01:57:26 -0000 @@ -86,6 +86,9 @@ typedef struct { unsigned long pgprot; } #define page_to_phys(page) (((page - mem_map) << PAGE_SHIFT) + __MEMORY_START) #endif +#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) + #define virt_to_page(kaddr) phys_to_page(__pa(kaddr)) #ifndef __ASSEMBLY__ Index: include/asm-sh/system.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/system.h,v retrieving revision 1.1.1.1 diff -u -3 -p -r1.1.1.1 system.h --- include/asm-sh/system.h 15 Oct 2001 20:45:11 -0000 1.1.1.1 +++ include/asm-sh/system.h 22 Mar 2002 01:57:26 -0000 @@ -20,8 +20,7 @@ typedef struct { #error no SMP SuperH #else #define prepare_to_switch() do { } while(0) -#define switch_to(prev,next,last) do { \ - register struct task_struct *__last; \ +#define switch_to(prev, next) do { \ register unsigned long *__ts1 __asm__ ("r1") = &prev->thread.sp; \ register unsigned long *__ts2 __asm__ ("r2") = &prev->thread.pc; \ register unsigned long *__ts4 __asm__ ("r4") = (unsigned long *)prev; \ @@ -40,7 +39,6 @@ typedef struct { "mov.l r14, @-r15\n\t" \ "mov.l r15, @r1 ! save SP\n\t" \ "mov.l @r6, r15 ! change to new stack\n\t" \ - "mov.l %0, @-r15 ! push R0 onto new stack\n\t" \ "mova 1f, %0\n\t" \ "mov.l %0, @r2 ! save PC\n\t" \ "mov.l 2f, %0\n\t" \ @@ -50,7 +48,6 @@ typedef struct { "2:\n\t" \ ".long " "__switch_to\n" \ "1:\n\t" \ - "mov.l @r15+, %0 ! pop R0 from new stack\n\t" \ "mov.l @r15+, r14\n\t" \ "mov.l @r15+, r13\n\t" \ "mov.l @r15+, r12\n\t" \ @@ -60,12 +57,11 @@ typedef struct { "mov.l @r15+, r8\n\t" \ "lds.l @r15+, pr\n\t" \ "ldc.l @r15+, gbr\n\t" \ - :"=&z" (__last) \ - :"0" (prev), \ - "r" (__ts1), "r" (__ts2), \ - "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ - :"r3", "t"); \ - last = __last; \ + : /* No output */ \ + : "r" (prev), \ + "r" (__ts1), "r" (__ts2), \ + "r" (__ts4), "r" (__ts5), "r" (__ts6), "r" (__ts7) \ + : "r3", "t"); \ } while (0) #endif |
From: NIIBE Y. <gn...@m1...> - 2002-03-22 01:28:54
|
Follow up to 2.5.5. 2002-03-22 NIIBE Yutaka <gn...@m1...> * arch/sh/mm/cache-sh4.c (flush_icache_user_range): New function. * include/asm-sh/pgtable.h (flush_icache_user_range): Declared. * kernel/ptrace.c (access_process_vm): Remove flush_dcache_page as we do flush_icache_user_range here. (No difference now.) Index: arch/sh/mm/cache-sh4.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/mm/cache-sh4.c,v retrieving revision 1.4 diff -u -3 -p -r1.4 cache-sh4.c --- arch/sh/mm/cache-sh4.c 19 Mar 2002 23:48:06 -0000 1.4 +++ arch/sh/mm/cache-sh4.c 22 Mar 2002 01:26:42 -0000 @@ -1,8 +1,8 @@ /* $Id: cache-sh4.c,v 1.4 2002/03/19 23:48:06 gniibe Exp $ * - * linux/arch/sh/mm/cache.c + * linux/arch/sh/mm/cache-sh4.c * - * Copyright (C) 1999, 2000 Niibe Yutaka + * Copyright (C) 1999, 2000, 2002 Niibe Yutaka * Copyright (C) 2001, 2002 Paul Mundt */ @@ -420,6 +420,22 @@ void flush_cache_page(struct vm_area_str } back_to_P1(); restore_flags(flags); +} + +/* + * flush_icache_user_range + * @vma: VMA of the process + * @page: page + * @addr: U0 address + * @len: length of the range (< page size) + */ +void flush_icache_user_range(struct vm_area_struct *vma, + struct page *page, unsigned long addr, int len) +{ + if (test_bit(PG_mapped, &page->flags)) { + __flush_icache_page(PHYSADDR(page_address(page))); + __flush_dcache_page(PHYSADDR(page_address(page))); + } } /* Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.5 diff -u -3 -p -r1.5 pgtable.h --- include/asm-sh/pgtable.h 22 Mar 2002 00:59:15 -0000 1.5 +++ include/asm-sh/pgtable.h 22 Mar 2002 01:26:42 -0000 @@ -62,10 +62,12 @@ extern void flush_cache_page(struct vm_a extern void flush_dcache_page(struct page *pg); extern void flush_icache_range(unsigned long start, unsigned long end); extern void flush_cache_sigtramp(unsigned long addr); +extern void flush_icache_user_range(struct vm_area_struct *vma, + struct page *page, unsigned long addr, + int len); #define flush_page_to_ram(page) do { } while (0) #define flush_icache_page(vma,pg) do { } while (0) -#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) /* Initialization of P3 area for copy_user_page */ extern void p3_cache_init(void); Index: kernel/ptrace.c =================================================================== RCS file: /cvsroot/linuxsh/linux/kernel/ptrace.c,v retrieving revision 1.5 diff -u -3 -p -r1.5 ptrace.c --- kernel/ptrace.c 22 Mar 2002 00:59:16 -0000 1.5 +++ kernel/ptrace.c 22 Mar 2002 01:26:42 -0000 @@ -150,7 +150,6 @@ int access_process_vm(struct task_struct maddr = kmap(page); if (write) { memcpy(maddr + offset, buf, bytes); - flush_dcache_page(page); flush_page_to_ram(page); flush_icache_user_range(vma, page, addr, bytes); } else { |
From: Fabio G. <fg...@ti...> - 2002-03-21 15:19:33
|
Hi Stuart, now I see what I hoped for several days and nights. Thanks for your support. |
From: David W. <dw...@in...> - 2002-03-21 10:33:59
|
tr...@ke... said: > > This does mean that extra care will have to be taken with sync ups > > with Linus though, since Linus doesn't like kernel debuggers. > He just doesn't like 'em on x86. As far as I know he's never > compilained about KGDB support on PPC, or xmon (very light debugger) > being in the tree. Or the MIPS gdb stubs, for that matter. -- dwmw2 |
From: hzeng <hz...@hf...> - 2002-03-21 03:26:28
|
SGksDQogICAgSSBhbSBhIG5ld2JpZSBvbiBsaW51eC1zaC4gSSBhbSB1c2VpbmcgdGhlIGJvYXJk IG9mIEFTUEVOIHdpdGggc2g3NzUwLiBJIGFtIHVzZWluZyBhIGdlbmVyYWwga2VybmVsIHdpdGgg c29tZSBwYXRjaHMgdG8NCnJ1biBvbiB0aGUgYm9hcmQuIE5vdyBJIGhhdmUgY29tcGxldGVkIHRo ZSBJL08gbWFwcGluZyBvZiB0aGUgbGVhc3Qga2VybmVsIHdpY2ggY2FuIG9ubHkgYm9vdCBidXQg IGRvIG5vdGhpbmcgYW5kIHdpdGhvdXQgDQphbnkgb3RoZXIgIHBlcmlwaGVyYWxzLiBDb250aW51 ZWx5IEkgd2FudCB0byBhZGQgdGhlIGV0aGVybmV0IGNhcmQgaW50byB0aGUga2VybmVsLCBpdCBp cyBzdWNjZXNzZnVsLiBXaGVuIGtlcm5lbCBib290LCBpdCBwcm9iZXMgdGhlIGV0aGVybmV0IGNh cmQgc21jOTE5NCBhbmQgcmVwb3J0ZWQgdGhlIHJpZ3RoIGFkZHJlc3Mgb2YgdGhlIGNhcmQgYW5k IHRoZSBpcnEgbnVtYmVyIGFkZGVkIGJ5IGhhbmQuIEluIHRoZSBrZXJuZWwsIHRoZSBpcnEgd2l0 aG91dCBwcm9iZS4gU28gSSB3YW50IHRvIGRvIHNvbWUgcHJvYmUgaW4gdGhlIGtlcm5lbC4gIElu IHRoZSBuZXQgY2FyZCBkcml2ZXIsIEkgIHJlZ2lzdGVyIGEgc2ltcGxlIGludGVycnVwdCBmb3Vu Y3Rpb24NCmFuZCBsZXQgdGhlIGNoaXAgZW1pdCBhIGludGVycnVwdChJUyBJVCBSSUdIVD8pLiBC dXQgbm90aGluZyBoYXBwZWQuIFRoZXJlIGlzIGEgRlBHQSBpbiB0aGUgYm9hcmQuIEkgdGhpbmsg dGhlIGdlbmVyYWwga2VybmVsIGRvIG5vdGhpbmcgYWJvdXQgdGhlIEZQR0EsIGFuZCB0aGUgaW50 ZXJydXB0IGlzIHNlbmQgdG8gdGhlIEZQR0EgZnJvbSB0aGUgbmV0IGNhcmQgLCBidXQgdGhlIEZQ R0EgZG8gbm90aGluZyBhYm91dCB0aGF0IGludGVycnVwdC4gU28gdGhlIGNwdSBtYXliZSByZWNl aXZlIHRoZSBpbnRlcnJ1cHQgYnV0IGRvIGEgd3JvbmcgSVJTIGZvdW5jdGlvbiBvciBtYXliZSBk b24ndCByZWNlaXZlIGFueSBpbnRlcnJ1cHQuIFNvIEkgc2hvdWxkIHByb2dyYW1lIHRoZSBGUEdB IGp1c3QgbGlrZSB0aGUgODI1OUEgaW4geDg2LiBJIHdvbmRlciB3aGV0aGVyIGl0J3MgcmlnaHQu IElmIGl0J3MgcmlnaHQsIGRvIHNvbWVib2R5IGhhdmUgZG9uZSB0aGUgRlBHQSBvciBjYW4gZ2l2 ZSBtZSBzb21lIGhlbHAuDQoNClRoYW5rcyB2ZXJ5IG11Y2ghDQpIemVuZyAgDQo= |
From: Jeremy S. <js...@mv...> - 2002-03-20 18:28:48
|
Fabio Giovagnini wrote: > what is the PCB ? Printed Circuit Board (your board... i.e. maybe the byte lanes are crossed in the wiring.) |
From: Fabio G. <fg...@ti...> - 2002-03-20 16:26:36
|
what is the PCB ? On Wednesday 20 March 2002 15:34, Stuart Menefy wrote: > I still don't see why you need to do the odd-even swap, but from what > you've described it sounds like it is needed. > > Have you chacked out the PCB? It wouldn't be the first time a board > designer had got the top and bottom half of the data bus swapped! > > So yes, this looks fine. > > Stuart > > On Wed, 20 Mar 2002 12:44:13 +0100 > > fg...@ti... wrote: > > Hi, > > I have some questions: > > 1) Supposing I compile correctly my sh-ipl+g. I obtain an sh-stub.srec. > > If I read it with a text editor I see someting like this: > > S00F000073682D737475622E737265634F > > S315A000000012D113D002210CD00B4009000FD111D070 > > S315A0000010022113D02E4010D00E4010D0036F07D16E > > S315A0000020047107D200E02231FD8F062205D00B40D5 > > S315A0000030090005D02B400900D02200A0000000AC8A > > S315A00000406C0900ACA02400A0001000A0ECFFFFFFEC > > S315A0000050080000000000000000000050000F00ACE7 > > S315A0000060000000A00000000000000000000000004A > > .... > > > > Using my eprom programmer, I do the following steps: > > a) I load the sh-stub.srec > > b) I swap even-odd byte > > c) I program my eprom. > > > > Is this procedure correct? > > > > Thanks. > > > > _______________________________________________ > > linuxsh-dev mailing list > > lin...@li... > > https://lists.sourceforge.net/lists/listinfo/linuxsh-dev |
From: Stuart M. <stu...@st...> - 2002-03-20 14:35:00
|
I still don't see why you need to do the odd-even swap, but from what you've described it sounds like it is needed. Have you chacked out the PCB? It wouldn't be the first time a board designer had got the top and bottom half of the data bus swapped! So yes, this looks fine. Stuart On Wed, 20 Mar 2002 12:44:13 +0100 fg...@ti... wrote: > Hi, > I have some questions: > 1) Supposing I compile correctly my sh-ipl+g. I obtain an sh-stub.srec. If I > read it with a text editor I see someting like this: > S00F000073682D737475622E737265634F > S315A000000012D113D002210CD00B4009000FD111D070 > S315A0000010022113D02E4010D00E4010D0036F07D16E > S315A0000020047107D200E02231FD8F062205D00B40D5 > S315A0000030090005D02B400900D02200A0000000AC8A > S315A00000406C0900ACA02400A0001000A0ECFFFFFFEC > S315A0000050080000000000000000000050000F00ACE7 > S315A0000060000000A00000000000000000000000004A > .... > > Using my eprom programmer, I do the following steps: > a) I load the sh-stub.srec > b) I swap even-odd byte > c) I program my eprom. > > Is this procedure correct? > > Thanks. > > _______________________________________________ > linuxsh-dev mailing list > lin...@li... > https://lists.sourceforge.net/lists/listinfo/linuxsh-dev -- Stuart Menefy stu...@st... STMicroelectronics Ltd ST Intranet: mo.bri.st.com Bristol, UK Rest of the World: www.linuxsh.st.com |
From: Stuart M. <stu...@st...> - 2002-03-20 14:33:01
|
On Wed, 20 Mar 2002 11:41:34 +0100 fg...@ti... wrote: > Hi, > how you can easily understand, I'm bot an expert but I'd like to understand > more. > > Following the suggestion of Stuart Menefy, I'm starting from sesh3 version > of sh-ipl+g for booting my card. > I have two question: > 1) to make working the sh-stub necessarely I need to execute : > > mov.l RTCSR_A,r1 /* RTCSR Address */ > mov.l RTCSR_D,r0 /* RTCSR Data */ > mov.w r0,@r1 > > mov.l RTCNT_A,r1 /* RTCNT Address */ > mov.l RTCNT_D,r0 /* RTCNT Data */ > mov.w r0,@r1 > > mov.l RTCOR_A,r1 /* RTCOR Address */ > mov.l RTCOR_D,r0 /* RTCOR Data */ > mov.w r0,@r1 > > mov.l RFCR_A,r1 /* RFCR Address */ > mov.l RFCR_D,r0 /* RFCR Data */ > mov.w r0,@r1 /* Clear reflesh counter */ > > /* Wait DRAM refresh 8 times */ > mov.l RFCR_A,r1 /* RFCR Address */ > mov #8,r3 > 1: > mov.w @r1,r0 > extu.w r0,r2 > cmp/hi r3,r2 > bf 1b > > mov.l SDMR3_A,r1 /* Set SDRAM mode */ > mov #0,r0 > mov.b r0,@r1 > > > I think so because I need SDRAM. You'll need something like this, but the exact values which are programmed into the registers will depend on the hardware on your board. So you'll need the timings for the memory you're using. > 2) what's the meaning of : > > mov.l BOOT_CONFIG_WORD,r1 > mov.w @r1,r0 > exts.b r0,r0 > cmp/eq #0xde,r0 ! MAGIC # for "doDEs" > bf 1f > mov.l 0f,r5 > mov.l 0f,r6 > mov.l 0f,r7 > bra 1f > nop > .align 2 > 0: .long 0xbabeface > 1: > rts > nop When the IPL starts up, it looks at some registers, and if they are set to a particular pattern, it assumes it has been asked to reboot the OS, and doesn't go into the interactive boot prompt part of the code. Have a look at where the the get_boot_signature() function is called from. These registers are normally set by trapping into the IPL to issue a 'shutdown' call, but from the code above, it looks like the SolutionEngines have a second way of setting this pattern at boot time. I know there are some switches on the board which can be read from software, so maybe that is what it being tested in this bit of assembler code. I'd remove this bit of code from your version until you have eveything else working, and then decide if you need a similar mechanism for your board. Stuart > > > Thanks a lot. > > _______________________________________________ > linuxsh-dev mailing list > lin...@li... > https://lists.sourceforge.net/lists/listinfo/linuxsh-dev -- Stuart Menefy stu...@st... STMicroelectronics Ltd ST Intranet: mo.bri.st.com Bristol, UK Rest of the World: www.linuxsh.st.com |
From: Fabio G. <fg...@ti...> - 2002-03-20 11:47:24
|
Hi, I have some questions: 1) Supposing I compile correctly my sh-ipl+g. I obtain an sh-stub.srec. If I read it with a text editor I see someting like this: S00F000073682D737475622E737265634F S315A000000012D113D002210CD00B4009000FD111D070 S315A0000010022113D02E4010D00E4010D0036F07D16E S315A0000020047107D200E02231FD8F062205D00B40D5 S315A0000030090005D02B400900D02200A0000000AC8A S315A00000406C0900ACA02400A0001000A0ECFFFFFFEC S315A0000050080000000000000000000050000F00ACE7 S315A0000060000000A00000000000000000000000004A .... Using my eprom programmer, I do the following steps: a) I load the sh-stub.srec b) I swap even-odd byte c) I program my eprom. Is this procedure correct? Thanks. |
From: Fabio G. <fg...@ti...> - 2002-03-20 10:42:17
|
Hi, how you can easily understand, I'm bot an expert but I'd like to understand more. Following the suggestion of Stuart Menefy, I'm starting from sesh3 version of sh-ipl+g for booting my card. I have two question: 1) to make working the sh-stub necessarely I need to execute : mov.l RTCSR_A,r1 /* RTCSR Address */ mov.l RTCSR_D,r0 /* RTCSR Data */ mov.w r0,@r1 mov.l RTCNT_A,r1 /* RTCNT Address */ mov.l RTCNT_D,r0 /* RTCNT Data */ mov.w r0,@r1 mov.l RTCOR_A,r1 /* RTCOR Address */ mov.l RTCOR_D,r0 /* RTCOR Data */ mov.w r0,@r1 mov.l RFCR_A,r1 /* RFCR Address */ mov.l RFCR_D,r0 /* RFCR Data */ mov.w r0,@r1 /* Clear reflesh counter */ /* Wait DRAM refresh 8 times */ mov.l RFCR_A,r1 /* RFCR Address */ mov #8,r3 1: mov.w @r1,r0 extu.w r0,r2 cmp/hi r3,r2 bf 1b mov.l SDMR3_A,r1 /* Set SDRAM mode */ mov #0,r0 mov.b r0,@r1 I think so because I need SDRAM. 2) what's the meaning of : mov.l BOOT_CONFIG_WORD,r1 mov.w @r1,r0 exts.b r0,r0 cmp/eq #0xde,r0 ! MAGIC # for "doDEs" bf 1f mov.l 0f,r5 mov.l 0f,r6 mov.l 0f,r7 bra 1f nop .align 2 0: .long 0xbabeface 1: rts nop Thanks a lot. |
From: NIIBE Y. <gn...@m1...> - 2002-03-20 01:50:43
|
Sync up to 2.5.5 (getting changes from patch-2.5.5.bz2). I add the change for your reference. Please note that it's note me who does this change, I just incorporate the change into the repository. 2002-03-20 NIIBE Yutaka <gn...@m1...> Update to 2.5.5. * AGAINST-2.5.5: New file. * AGAINST-2.5.4: Removed. * Documentation/cachetlb.txt: Include the change. * Makefile: Version 2.5.4. Merged. * arch/sh/config.in, drivers/Makefile: Sound driver move. * arch/sh/kernel/signal.c: recalc_sigpending API change. * drivers/net/8139too.c, drivers/net/Config.in: Update. * drivers/pci/pci.ids: Update. * include/asm-sh/pgtable.h: New API flush_icache_user_range, Removed page_address API here (move to linux/mm.h). * include/net/inet_ecn.h: Update. * kernel/ptrace.c: Use new API flush_icache_user_range. * mm/memory.c: Update. Index: Makefile =================================================================== RCS file: /cvsroot/linuxsh/linux/Makefile,v retrieving revision 1.9 diff -u -3 -p -r1.9 Makefile --- Makefile 1 Mar 2002 05:08:25 -0000 1.9 +++ Makefile 20 Mar 2002 01:46:38 -0000 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 5 -SUBLEVEL = 4 +SUBLEVEL = 5 EXTRAVERSION = -sh KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -122,7 +122,7 @@ CORE_FILES =kernel/kernel.o mm/mm.o fs/f NETWORKS =net/network.o LIBS =$(TOPDIR)/lib/lib.a -SUBDIRS =kernel drivers mm fs net ipc lib +SUBDIRS =kernel lib drivers mm fs net ipc sound DRIVERS-n := DRIVERS-y := @@ -156,7 +156,7 @@ ifneq ($(CONFIG_CD_NO_IDESCSI)$(CONFIG_B 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 @@ -202,7 +202,7 @@ CLEAN_FILES = \ 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 \ @@ -223,11 +223,11 @@ MRPROPER_FILES = \ 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 \ @@ -344,7 +344,7 @@ init/main.o: init/main.c include/config/ init/do_mounts.o: init/do_mounts.c include/config/MARKER $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $< -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: Documentation/cachetlb.txt =================================================================== RCS file: /cvsroot/linuxsh/linux/Documentation/cachetlb.txt,v retrieving revision 1.3 diff -u -3 -p -r1.3 cachetlb.txt --- Documentation/cachetlb.txt 24 Jan 2002 11:04:15 -0000 1.3 +++ Documentation/cachetlb.txt 20 Mar 2002 01:46:38 -0000 @@ -341,6 +341,17 @@ Here is the new interface: If the icache does not snoop stores then this routine will need to flush it. + void flush_icache_user_range(struct vm_area_struct *vma, + struct page *page, unsigned long addr, int len) + This is called when the kernel stores into addresses that are + part of the address space of a user process (which may be some + other process than the current process). The addr argument + gives the virtual address in that process's address space, + page is the page which is being modified, and len indicates + how many bytes have been modified. The modified region must + not cross a page boundary. Currently this is only called from + kernel/ptrace.c. + void flush_icache_page(struct vm_area_struct *vma, struct page *page) All the functionality of flush_icache_page can be implemented in flush_dcache_page and update_mmu_cache. In 2.5 the hope is to Index: arch/sh/config.in =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/config.in,v retrieving revision 1.5 diff -u -3 -p -r1.5 config.in --- arch/sh/config.in 19 Mar 2002 23:48:05 -0000 1.5 +++ arch/sh/config.in 20 Mar 2002 01:46:38 -0000 @@ -356,7 +356,7 @@ comment 'Sound' tristate 'Sound card support' CONFIG_SOUND if [ "$CONFIG_SOUND" != "n" ]; then - source drivers/sound/Config.in + source sound/Config.in fi endmenu Index: arch/sh/kernel/signal.c =================================================================== RCS file: /cvsroot/linuxsh/linux/arch/sh/kernel/signal.c,v retrieving revision 1.3 diff -u -3 -p -r1.3 signal.c --- arch/sh/kernel/signal.c 1 Mar 2002 01:55:10 -0000 1.3 +++ arch/sh/kernel/signal.c 20 Mar 2002 01:46:38 -0000 @@ -83,7 +83,7 @@ sys_sigsuspend(old_sigset_t mask, spin_lock_irq(¤t->sigmask_lock); saveset = current->blocked; siginitset(¤t->blocked, mask); - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); regs.regs[0] = -EINTR; @@ -112,7 +112,7 @@ sys_rt_sigsuspend(sigset_t *unewset, siz spin_lock_irq(¤t->sigmask_lock); saveset = current->blocked; current->blocked = newset; - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); regs.regs[0] = -EINTR; @@ -283,7 +283,7 @@ asmlinkage int sys_sigreturn(unsigned lo spin_lock_irq(¤t->sigmask_lock); current->blocked = set; - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); if (restore_sigcontext(®s, &frame->sc, &r0)) @@ -313,7 +313,7 @@ asmlinkage int sys_rt_sigreturn(unsigned sigdelsetmask(&set, ~_BLOCKABLE); spin_lock_irq(¤t->sigmask_lock); current->blocked = set; - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); if (restore_sigcontext(®s, &frame->uc.uc_mcontext, &r0)) @@ -558,7 +558,7 @@ handle_signal(unsigned long sig, struct spin_lock_irq(¤t->sigmask_lock); sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); sigaddset(¤t->blocked,sig); - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); } } Index: drivers/Makefile =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/Makefile,v retrieving revision 1.4 diff -u -3 -p -r1.4 Makefile --- drivers/Makefile 1 Mar 2002 01:55:10 -0000 1.4 +++ drivers/Makefile 20 Mar 2002 01:46:38 -0000 @@ -10,7 +10,7 @@ mod-subdirs := dio mtd sbus video macint message/i2o message/fusion scsi md ieee1394 pnp isdn atm \ fc4 net/hamradio i2c acpi bluetooth input/serio input/gameport maple -subdir-y := base parport char block net sound misc media cdrom hotplug +subdir-y := base parport char block net misc media cdrom hotplug subdir-m := $(subdir-y) Index: drivers/net/8139too.c =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/8139too.c,v retrieving revision 1.7 diff -u -3 -p -r1.7 8139too.c --- drivers/net/8139too.c 1 Mar 2002 01:55:10 -0000 1.7 +++ drivers/net/8139too.c 20 Mar 2002 01:46:39 -0000 @@ -229,6 +229,7 @@ typedef enum { DFE538TX, DFE690TXD, FE2000VX, + ALLIED8139, SEGABBA, RTL8129, } board_t; @@ -248,6 +249,7 @@ static struct { { "D-Link DFE-538TX (RealTek RTL8139)", RTL8139_CAPS }, { "D-Link DFE-690TXD (RealTek RTL8139)", RTL8139_CAPS }, { "AboCom FE2000VX (RealTek RTL8139)", RTL8139_CAPS }, + { "Allied Telesyn 8139 CardBus", RTL8139_CAPS }, { "SEGA Broadband Adapter", RTL8139_CAPS }, { "RealTek RTL8129", RTL8129_CAPS }, }; @@ -263,6 +265,7 @@ static struct pci_device_id rtl8139_pci_ {0x1186, 0x1300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DFE538TX }, {0x1186, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DFE690TXD }, {0x13d1, 0xab06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, FE2000VX }, + {0x1259, 0xa117, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ALLIED8139 }, {0x11db, 0x1234, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SEGABBA }, #ifdef CONFIG_8139TOO_8129 @@ -1580,7 +1583,7 @@ static int rtl8139_thread (void *data) reparent_to_init(); spin_lock_irq(¤t->sigmask_lock); sigemptyset(¤t->blocked); - recalc_sigpending(current); + recalc_sigpending(); spin_unlock_irq(¤t->sigmask_lock); strncpy (current->comm, dev->name, sizeof(current->comm) - 1); @@ -1669,23 +1672,24 @@ static int rtl8139_start_xmit (struct sk struct rtl8139_private *tp = dev->priv; void *ioaddr = tp->mmio_addr; unsigned int entry; + unsigned int len = skb->len; /* Calculate the next Tx descriptor entry. */ entry = tp->cur_tx % NUM_TX_DESC; - if (likely(skb->len < TX_BUF_SIZE)) { + if (likely(len < TX_BUF_SIZE)) { skb_copy_and_csum_dev(skb, tp->tx_buf[entry]); dev_kfree_skb(skb); } else { dev_kfree_skb(skb); tp->stats.tx_dropped++; return 0; - } + } /* Note: the chip doesn't have auto-pad! */ spin_lock_irq(&tp->lock); RTL_W32_F (TxStatus0 + (entry * sizeof (u32)), - tp->tx_flag | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN)); + tp->tx_flag | max(len, (unsigned int)ETH_ZLEN)); dev->trans_start = jiffies; @@ -1696,8 +1700,8 @@ static int rtl8139_start_xmit (struct sk netif_stop_queue (dev); spin_unlock_irq(&tp->lock); - DPRINTK ("%s: Queued Tx packet at %p size %u to slot %d.\n", - dev->name, skb->data, skb->len, entry); + DPRINTK ("%s: Queued Tx packet size %u to slot %d.\n", + dev->name, len, entry); return 0; } Index: drivers/net/Config.in =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/net/Config.in,v retrieving revision 1.4 diff -u -3 -p -r1.4 Config.in --- drivers/net/Config.in 1 Mar 2002 01:55:10 -0000 1.4 +++ drivers/net/Config.in 20 Mar 2002 01:46:39 -0000 @@ -37,7 +37,6 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; the bool ' Use AAUI port instead of TP by default' CONFIG_MACE_AAUI_PORT fi dep_tristate ' BMAC (G3 ethernet) support' CONFIG_BMAC $CONFIG_ALL_PPC - dep_tristate ' GMAC (G4/iBook ethernet) support' CONFIG_GMAC $CONFIG_ALL_PPC tristate ' National DP83902AV (Oak ethernet) support' CONFIG_OAKNET fi if [ "$CONFIG_ZORRO" = "y" ]; then Index: drivers/pci/pci.ids =================================================================== RCS file: /cvsroot/linuxsh/linux/drivers/pci/pci.ids,v retrieving revision 1.2 diff -u -3 -p -r1.2 pci.ids --- drivers/pci/pci.ids 3 Dec 2001 22:15:34 -0000 1.2 +++ drivers/pci/pci.ids 20 Mar 2002 01:46:39 -0000 @@ -1551,9 +1551,14 @@ 0001 i960 PCI bus interface 1076 VScom 800 8 port serial adaptor 1077 VScom 400 4 port serial adaptor + 9030 PCI <-> IOBus Bridge (Hot Swap) + 15ed 1002 Macrolink MCCS 8-port Serial (Hot Swap) + 15ed 1003 Macrolink MCCS 16-port Serial (Hot Swap) 9036 9036 9050 PCI <-> IOBus Bridge 10b5 2273 SH-ARC SoHard ARCnet card + 15ed 1000 Macrolink MCCS 8-port Serial + 15ed 1001 Macrolink MCCS 16-port Serial d84d 4006 EX-4006 1P d84d 4008 EX-4008 1P EPP/ECP d84d 4014 EX-4014 2P @@ -3943,6 +3948,12 @@ 1413 Addonics 1414 Microsoft Corporation 1415 Oxford Semiconductor Ltd + 9501 16PCI954 Function 0 + 15ed 2000 Macrolink MCCR Serial p0-3 of 8 + 15ed 2001 Macrolink MCCR Serial p0-3 of 16 + 9511 16PCI954 Function 1 + 15ed 2000 Macrolink MCCR Serial p4-7 of 8 + 15ed 2001 Macrolink MCCR Serial p4-15 of 16 1416 Multiwave Innovation pte Ltd 1417 Convergenet Technologies Inc 1418 Kyushu electronics systems Inc Index: include/asm-sh/pgtable.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/asm-sh/pgtable.h,v retrieving revision 1.4 diff -u -3 -p -r1.4 pgtable.h --- include/asm-sh/pgtable.h 24 Jan 2002 11:04:15 -0000 1.4 +++ include/asm-sh/pgtable.h 20 Mar 2002 01:46:39 -0000 @@ -41,6 +41,7 @@ extern void paging_init(void); #define flush_dcache_page(page) do { } while (0) #define flush_icache_range(start, end) do { } while (0) #define flush_icache_page(vma,pg) do { } while (0) +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) #define flush_cache_sigtramp(vaddr) do { } while (0) #define p3_cache_init() do { } while (0) @@ -64,6 +65,7 @@ extern void flush_cache_sigtramp(unsigne #define flush_page_to_ram(page) do { } while (0) #define flush_icache_page(vma,pg) do { } while (0) +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) /* Initialization of P3 area for copy_user_page */ extern void p3_cache_init(void); @@ -206,11 +208,6 @@ extern unsigned long empty_zero_page[102 #define pmd_clear(xp) do { set_pmd(xp, __pmd(0)); } while (0) #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) -/* - * Permanent address of a page. Obviously must never be - * called on a highmem page. - */ -#define page_address(page) ((page)->virtual) /* P1 address of the page */ #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) #define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) Index: include/net/inet_ecn.h =================================================================== RCS file: /cvsroot/linuxsh/linux/include/net/inet_ecn.h,v retrieving revision 1.2 diff -u -3 -p -r1.2 inet_ecn.h --- include/net/inet_ecn.h 20 Jan 2002 07:42:26 -0000 1.2 +++ include/net/inet_ecn.h 20 Mar 2002 01:46:39 -0000 @@ -28,15 +28,15 @@ static inline __u8 INET_ECN_encapsulate( return outer; } -#define INET_ECN_xmit(sk) do { (sk)->protinfo.af_inet.tos |= 2; } while (0) -#define INET_ECN_dontxmit(sk) do { (sk)->protinfo.af_inet.tos &= ~3; } while (0) +#define INET_ECN_xmit(sk) do { inet_sk(sk)->tos |= 2; } while (0) +#define INET_ECN_dontxmit(sk) do { inet_sk(sk)->tos &= ~3; } while (0) #define IP6_ECN_flow_init(label) do { \ (label) &= ~htonl(3<<20); \ } while (0) #define IP6_ECN_flow_xmit(sk, label) do { \ - if (INET_ECN_is_capable((sk)->protinfo.af_inet.tos)) \ + if (INET_ECN_is_capable(inet_sk(sk)->tos)) \ (label) |= __constant_htons(2 << 4); \ } while (0) Index: kernel/ptrace.c =================================================================== RCS file: /cvsroot/linuxsh/linux/kernel/ptrace.c,v retrieving revision 1.4 diff -u -3 -p -r1.4 ptrace.c --- kernel/ptrace.c 24 Jan 2002 10:28:23 -0000 1.4 +++ kernel/ptrace.c 20 Mar 2002 01:46:39 -0000 @@ -152,7 +152,7 @@ int access_process_vm(struct task_struct memcpy(maddr + offset, buf, bytes); flush_dcache_page(page); flush_page_to_ram(page); - flush_icache_page(vma, page); + flush_icache_user_range(vma, page, addr, bytes); } else { memcpy(buf, maddr + offset, bytes); flush_page_to_ram(page); Index: mm/memory.c =================================================================== RCS file: /cvsroot/linuxsh/linux/mm/memory.c,v retrieving revision 1.6 diff -u -3 -p -r1.6 memory.c --- mm/memory.c 24 Jan 2002 11:04:16 -0000 1.6 +++ mm/memory.c 20 Mar 2002 01:46:39 -0000 @@ -90,7 +90,7 @@ void __free_pte(pte_t pte) */ static inline void free_one_pmd(pmd_t * dir) { - pte_t * pte; + struct page *pte; if (pmd_none(*dir)) return; @@ -99,7 +99,7 @@ static inline void free_one_pmd(pmd_t * pmd_clear(dir); return; } - pte = pte_offset(dir, 0); + pte = pmd_page(*dir); pmd_clear(dir); pte_free(pte); } @@ -125,18 +125,6 @@ static inline void free_one_pgd(pgd_t * pmd_free(pmd); } -/* Low and high watermarks for page table cache. - The system should try to have pgt_water[0] <= cache elements <= pgt_water[1] - */ -int pgt_cache_water[2] = { 25, 50 }; - -/* Returns the number of pages freed */ -int check_pgt_cache(void) -{ - return do_check_pgt_cache(pgt_cache_water[0], pgt_cache_water[1]); -} - - /* * This function clears all user-level page tables of a process - this * is needed by execve(), so that old pages aren't in the way. @@ -152,11 +140,59 @@ void clear_page_tables(struct mm_struct page_dir++; } while (--nr); spin_unlock(&mm->page_table_lock); +} - /* keep the page table cache within bounds */ - check_pgt_cache(); +pte_t * pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address) +{ + if (!pmd_present(*pmd)) { + struct page *new; + + spin_unlock(&mm->page_table_lock); + new = pte_alloc_one(mm, address); + spin_lock(&mm->page_table_lock); + if (!new) + return NULL; + + /* + * Because we dropped the lock, we should re-check the + * entry, as somebody else could have populated it.. + */ + if (pmd_present(*pmd)) { + pte_free(new); + goto out; + } + pmd_populate(mm, pmd, new); + } +out: + if (pmd_present(*pmd)) + return pte_offset_map(pmd, address); + return NULL; } +pte_t * pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address) +{ + if (!pmd_present(*pmd)) { + pte_t *new; + + spin_unlock(&mm->page_table_lock); + new = pte_alloc_one_kernel(mm, address); + spin_lock(&mm->page_table_lock); + if (!new) + return NULL; + + /* + * Because we dropped the lock, we should re-check the + * entry, as somebody else could have populated it.. + */ + if (pmd_present(*pmd)) { + pte_free_kernel(new); + goto out; + } + pmd_populate_kernel(mm, pmd, new); + } +out: + return pte_offset_kernel(pmd, address); +} #define PTE_TABLE_MASK ((PTRS_PER_PTE-1) * sizeof(pte_t)) #define PMD_TABLE_MASK ((PTRS_PER_PMD-1) * sizeof(pmd_t)) @@ -169,7 +205,7 @@ void clear_page_tables(struct mm_struct * variable count and make things faster. -jj * * dst->page_table_lock is held on entry and exit, - * but may be dropped within pmd_alloc() and pte_alloc(). + * but may be dropped within pmd_alloc() and pte_alloc_map(). */ int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma) @@ -177,7 +213,7 @@ int copy_page_range(struct mm_struct *ds pgd_t * src_pgd, * dst_pgd; unsigned long address = vma->vm_start; unsigned long end = vma->vm_end; - unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_WRITE)) == VM_WRITE; + unsigned long cow = (vma->vm_flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE; src_pgd = pgd_offset(src, address)-1; dst_pgd = pgd_offset(dst, address)-1; @@ -221,12 +257,11 @@ skip_copy_pte_range: address = (address goto cont_copy_pmd_range; } - src_pte = pte_offset(src_pmd, address); - dst_pte = pte_alloc(dst, dst_pmd, address); + dst_pte = pte_alloc_map(dst, dst_pmd, address); if (!dst_pte) goto nomem; - spin_lock(&src->page_table_lock); + src_pte = pte_offset_map_nested(src_pmd, address); do { pte_t pte = *src_pte; struct page *ptepage; @@ -245,7 +280,7 @@ skip_copy_pte_range: address = (address goto cont_copy_pte_range; /* If it's a COW mapping, write protect it both in the parent and the child */ - if (cow) { + if (cow && pte_write(pte)) { ptep_set_wrprotect(src_pte); pte = *src_pte; } @@ -259,11 +294,16 @@ skip_copy_pte_range: address = (address cont_copy_pte_range: set_pte(dst_pte, pte); cont_copy_pte_range_noset: address += PAGE_SIZE; - if (address >= end) + if (address >= end) { + pte_unmap_nested(src_pte); + pte_unmap(dst_pte); goto out_unlock; + } src_pte++; dst_pte++; } while ((unsigned long)src_pte & PTE_TABLE_MASK); + pte_unmap_nested(src_pte-1); + pte_unmap(dst_pte-1); spin_unlock(&src->page_table_lock); cont_copy_pmd_range: src_pmd++; @@ -292,7 +332,7 @@ static inline void forget_pte(pte_t page static inline int zap_pte_range(mmu_gather_t *tlb, pmd_t * pmd, unsigned long address, unsigned long size) { unsigned long offset; - pte_t * ptep; + pte_t *ptep; int freed = 0; if (pmd_none(*pmd)) @@ -302,7 +342,7 @@ static inline int zap_pte_range(mmu_gath pmd_clear(pmd); return 0; } - ptep = pte_offset(pmd, address); + ptep = pte_offset_map(pmd, address); offset = address & ~PMD_MASK; if (offset + size > PMD_SIZE) size = PMD_SIZE - offset; @@ -322,6 +362,7 @@ static inline int zap_pte_range(mmu_gath pte_clear(ptep); } } + pte_unmap(ptep-1); return freed; } @@ -415,11 +456,16 @@ static struct page * follow_page(struct if (pmd_none(*pmd) || pmd_bad(*pmd)) goto out; - ptep = pte_offset(pmd, address); - if (!ptep) + preempt_disable(); + ptep = pte_offset_map(pmd, address); + if (!ptep) { + preempt_enable(); goto out; + } pte = *ptep; + pte_unmap(ptep); + preempt_enable(); if (pte_present(pte)) { if (!write || (pte_write(pte) && pte_dirty(pte))) @@ -446,20 +492,25 @@ static inline struct page * get_page_map int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, int len, int write, int force, struct page **pages, struct vm_area_struct **vmas) { - int i = 0; + int i; + unsigned int flags; + + /* + * Require read or write permissions. + * If 'force' is set, we only require the "MAY" flags. + */ + flags = write ? (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD); + flags &= force ? (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE); + i = 0; + do { struct vm_area_struct * vma; vma = find_extend_vma(mm, start); - if ( !vma || - (!force && - ((write && (!(vma->vm_flags & VM_WRITE))) || - (!write && (!(vma->vm_flags & VM_READ))) ) )) { - if (i) return i; - return -EFAULT; - } + if ( !vma || !(flags & vma->vm_flags) ) + return i ? : -EFAULT; spin_lock(&mm->page_table_lock); do { @@ -748,10 +799,11 @@ static inline int zeromap_pmd_range(stru if (end > PGDIR_SIZE) end = PGDIR_SIZE; do { - pte_t * pte = pte_alloc(mm, pmd, address); + pte_t * pte = pte_alloc_map(mm, pmd, address); if (!pte) return -ENOMEM; zeromap_pte_range(pte, address, end - address, prot); + pte_unmap(pte); address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); @@ -828,10 +880,11 @@ static inline int remap_pmd_range(struct end = PGDIR_SIZE; phys_addr -= address; do { - pte_t * pte = pte_alloc(mm, pmd, address); + pte_t * pte = pte_alloc_map(mm, pmd, address); if (!pte) return -ENOMEM; remap_pte_range(pte, address, end - address, address + phys_addr, prot); + pte_unmap(pte); address = (address + PMD_SIZE) & PMD_MASK; pmd++; } while (address && (address < end)); @@ -919,7 +972,7 @@ static inline void break_cow(struct vm_a * with the page_table_lock released. */ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma, - unsigned long address, pte_t *page_table, pte_t pte) + unsigned long address, pte_t *page_table, pmd_t *pmd, pte_t pte) { struct page *old_page, *new_page; @@ -935,10 +988,12 @@ static int do_wp_page(struct mm_struct * flush_cache_page(vma, address); #endif establish_pte(vma, address, page_table, pte_mkyoung(pte_mkdirty(pte_mkwrite(pte)))); + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); return 1; /* Minor fault */ } } + pte_unmap(page_table); /* * Ok, we need to copy. Oh, well.. @@ -955,6 +1010,7 @@ static int do_wp_page(struct mm_struct * * Re-check the pte - we dropped the lock */ spin_lock(&mm->page_table_lock); + page_table = pte_offset_map(pmd, address); if (pte_same(*page_table, pte)) { if (PageReserved(old_page)) ++mm->rss; @@ -964,12 +1020,14 @@ static int do_wp_page(struct mm_struct * /* Free the old page.. */ new_page = old_page; } + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); page_cache_release(new_page); page_cache_release(old_page); return 1; /* Minor fault */ bad_wp_page: + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); printk("do_wp_page: bogus page at address %08lx (page 0x%lx)\n",address,(unsigned long)old_page); return -1; @@ -1052,11 +1110,8 @@ do_expand: inode->i_size = offset; out_truncate: - if (inode->i_op && inode->i_op->truncate) { - lock_kernel(); + if (inode->i_op && inode->i_op->truncate) inode->i_op->truncate(inode); - unlock_kernel(); - } out: return 0; } @@ -1093,13 +1148,14 @@ void swapin_readahead(swp_entry_t entry) */ static int do_swap_page(struct mm_struct * mm, struct vm_area_struct * vma, unsigned long address, - pte_t * page_table, pte_t orig_pte, int write_access) + pte_t *page_table, pmd_t *pmd, pte_t orig_pte, int write_access) { struct page *page; swp_entry_t entry = pte_to_swp_entry(orig_pte); pte_t pte; int ret = 1; + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); page = lookup_swap_cache(entry); if (!page) { @@ -1112,7 +1168,9 @@ static int do_swap_page(struct mm_struct */ int retval; spin_lock(&mm->page_table_lock); + page_table = pte_offset_map(pmd, address); retval = pte_same(*page_table, orig_pte) ? -1 : 1; + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); return retval; } @@ -1128,7 +1186,9 @@ static int do_swap_page(struct mm_struct * released the page table lock. */ spin_lock(&mm->page_table_lock); + page_table = pte_offset_map(pmd, address); if (!pte_same(*page_table, orig_pte)) { + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); unlock_page(page); page_cache_release(page); @@ -1153,6 +1213,7 @@ static int do_swap_page(struct mm_struct /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, address, pte); + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); return ret; } @@ -1162,7 +1223,7 @@ static int do_swap_page(struct mm_struct * spinlock held to protect against concurrent faults in * multithreaded programs. */ -static int do_anonymous_page(struct mm_struct * mm, struct vm_area_struct * vma, pte_t *page_table, int write_access, unsigned long addr) +static int do_anonymous_page(struct mm_struct * mm, struct vm_area_struct * vma, pte_t *page_table, pmd_t *pmd, int write_access, unsigned long addr) { pte_t entry; @@ -1174,6 +1235,7 @@ static int do_anonymous_page(struct mm_s struct page *page; /* Allocate our own private page. */ + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); page = alloc_page(GFP_HIGHUSER); @@ -1182,7 +1244,10 @@ static int do_anonymous_page(struct mm_s clear_user_highpage(page, addr); spin_lock(&mm->page_table_lock); + page_table = pte_offset_map(pmd, addr); + if (!pte_none(*page_table)) { + pte_unmap(page_table); page_cache_release(page); spin_unlock(&mm->page_table_lock); return 1; @@ -1194,6 +1259,7 @@ static int do_anonymous_page(struct mm_s } set_pte(page_table, entry); + pte_unmap(page_table); /* No need to invalidate - it was non-present before */ update_mmu_cache(vma, addr, entry); @@ -1217,13 +1283,14 @@ no_mem: * spinlock held. Exit with the spinlock released. */ static int do_no_page(struct mm_struct * mm, struct vm_area_struct * vma, - unsigned long address, int write_access, pte_t *page_table) + unsigned long address, int write_access, pte_t *page_table, pmd_t *pmd) { struct page * new_page; pte_t entry; if (!vma->vm_ops || !vma->vm_ops->nopage) - return do_anonymous_page(mm, vma, page_table, write_access, address); + return do_anonymous_page(mm, vma, page_table, pmd, write_access, address); + pte_unmap(page_table); spin_unlock(&mm->page_table_lock); new_page = vma->vm_ops->nopage(vma, address & PAGE_MASK, 0); @@ -1249,6 +1316,8 @@ static int do_no_page(struct mm_struct * } spin_lock(&mm->page_table_lock); + page_table = pte_offset_map(pmd, address); + /* * This silly early PAGE_DIRTY setting removes a race * due to the bad i386 page protection. But it's valid @@ -1268,8 +1337,10 @@ static int do_no_page(struct mm_struct * if (write_access) entry = pte_mkwrite(pte_mkdirty(entry)); set_pte(page_table, entry); + pte_unmap(page_table); } else { /* One of our sibling threads was faster, back out. */ + pte_unmap(page_table); page_cache_release(new_page); spin_unlock(&mm->page_table_lock); return 1; @@ -1304,7 +1375,7 @@ static int do_no_page(struct mm_struct * */ static inline int handle_pte_fault(struct mm_struct *mm, struct vm_area_struct * vma, unsigned long address, - int write_access, pte_t * pte) + int write_access, pte_t *pte, pmd_t *pmd) { pte_t entry; @@ -1316,18 +1387,19 @@ static inline int handle_pte_fault(struc * drop the lock. */ if (pte_none(entry)) - return do_no_page(mm, vma, address, write_access, pte); - return do_swap_page(mm, vma, address, pte, entry, write_access); + return do_no_page(mm, vma, address, write_access, pte, pmd); + return do_swap_page(mm, vma, address, pte, pmd, entry, write_access); } if (write_access) { if (!pte_write(entry)) - return do_wp_page(mm, vma, address, pte, entry); + return do_wp_page(mm, vma, address, pte, pmd, entry); entry = pte_mkdirty(entry); } entry = pte_mkyoung(entry); establish_pte(vma, address, pte, entry); + pte_unmap(pte); spin_unlock(&mm->page_table_lock); return 1; } @@ -1352,9 +1424,9 @@ int handle_mm_fault(struct mm_struct *mm pmd = pmd_alloc(mm, pgd, address); if (pmd) { - pte_t * pte = pte_alloc(mm, pmd, address); + pte_t * pte = pte_alloc_map(mm, pmd, address); if (pte) - return handle_pte_fault(mm, vma, address, write_access, pte); + return handle_pte_fault(mm, vma, address, write_access, pte, pmd); } spin_unlock(&mm->page_table_lock); return -1; @@ -1373,64 +1445,25 @@ pmd_t *__pmd_alloc(struct mm_struct *mm, { pmd_t *new; - /* "fast" allocation can happen without dropping the lock.. */ - new = pmd_alloc_one_fast(mm, address); - if (!new) { - spin_unlock(&mm->page_table_lock); - new = pmd_alloc_one(mm, address); - spin_lock(&mm->page_table_lock); - if (!new) - return NULL; + spin_unlock(&mm->page_table_lock); + new = pmd_alloc_one(mm, address); + spin_lock(&mm->page_table_lock); + if (!new) + return NULL; - /* - * Because we dropped the lock, we should re-check the - * entry, as somebody else could have populated it.. - */ - if (!pgd_none(*pgd)) { - pmd_free(new); - goto out; - } + /* + * Because we dropped the lock, we should re-check the + * entry, as somebody else could have populated it.. + */ + if (pgd_present(*pgd)) { + pmd_free(new); + goto out; } pgd_populate(mm, pgd, new); out: return pmd_offset(pgd, address); } -/* - * Allocate the page table directory. - * - * We've already handled the fast-path in-line, and we own the - * page table lock. - */ -pte_t *pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address) -{ - if (pmd_none(*pmd)) { - pte_t *new; - - /* "fast" allocation can happen without dropping the lock.. */ - new = pte_alloc_one_fast(mm, address); - if (!new) { - spin_unlock(&mm->page_table_lock); - new = pte_alloc_one(mm, address); - spin_lock(&mm->page_table_lock); - if (!new) - return NULL; - - /* - * Because we dropped the lock, we should re-check the - * entry, as somebody else could have populated it.. - */ - if (!pmd_none(*pmd)) { - pte_free(new); - goto out; - } - } - pmd_populate(mm, pmd, new); - } -out: - return pte_offset(pmd, address); -} - int make_pages_present(unsigned long addr, unsigned long end) { int ret, len, write; @@ -1446,4 +1479,29 @@ int make_pages_present(unsigned long add ret = get_user_pages(current, current->mm, addr, len, write, 0, NULL, NULL); return ret == len ? 0 : -1; +} + +/* + * Map a vmalloc()-space virtual address to the physical page. + */ +struct page * vmalloc_to_page(unsigned long addr) +{ + struct page *page = NULL; + pgd_t *pgd = pgd_offset_k(addr); + pmd_t *pmd; + pte_t *ptep, pte; + + if (!pgd_none(*pgd)) { + pmd = pmd_offset(pgd, addr); + if (!pmd_none(*pmd)) { + preempt_disable(); + ptep = pte_offset_map(pmd, addr); + pte = *ptep; + if (pte_present(pte)) + page = pte_page(pte); + pte_unmap(ptep); + preempt_enable(); + } + } + return page; } |
From: NIIBE Y. <gn...@m1...> - 2002-03-20 00:10:43
|
Here is the change. Well, it's really difficult (for me) bug to find. There is disagreement with maintainer of NFS wrt this change, so I guess that this file will be here a while. 2002-03-20 NIIBE Yutaka <gn...@m1...> * fs/nfs/inode.c (nfs_read_inode): Don't set inode->i_rdev here. (nfs_fill_inode): But set it here, instead. (nfs_find_actor): Reusing cached inode, clear ->i_mode. Index: fs/nfs/inode.c =================================================================== RCS file: /cvsroot/linuxsh/linux/fs/nfs/Attic/inode.c,v retrieving revision 1.1.2.1 diff -u -3 -p -r1.1.2.1 inode.c --- fs/nfs/inode.c 19 Mar 2002 23:57:40 -0000 1.1.2.1 +++ fs/nfs/inode.c 20 Mar 2002 00:05:30 -0000 @@ -104,7 +104,6 @@ nfs_read_inode(struct inode * inode) { inode->i_blksize = inode->i_sb->s_blocksize; inode->i_mode = 0; - inode->i_rdev = 0; /* We can't support UPDATE_ATIME(), since the server will reset it */ inode->i_flags |= S_NOATIME; INIT_LIST_HEAD(&inode->u.nfs_i.read); @@ -638,6 +637,7 @@ nfs_fill_inode(struct inode *inode, stru * that's precisely what we have in nfs_file_inode_operations. */ inode->i_op = &nfs_file_inode_operations; + inode->i_rdev = 0; if (S_ISREG(inode->i_mode)) { inode->i_fop = &nfs_file_operations; inode->i_data.a_ops = &nfs_file_aops; @@ -679,7 +679,7 @@ nfs_find_actor(struct inode *inode, unsi return 0; /* Force an attribute cache update if inode->i_count == 0 */ if (!atomic_read(&inode->i_count)) - NFS_CACHEINV(inode); + inode->i_mode = 0; return 1; } |
From: NIIBE Y. <gn...@m1...> - 2002-03-19 23:59:44
|
I've added fs/nfs/inode.c to record this change. It's for linux-2_4 branch only. When I find it's also there in 2.5, I'll add it linux-current branch too. -- |
From: Jeremy S. <js...@mv...> - 2002-03-19 20:51:26
|
Not sure I understand why there's an issue with 16-bit versus 32-bit; as long as the endian is correct and the programming software puts the bytes in the right place (start from 0 and work your way up) why shouldn't it work? Building the stub in RAM has several issues: (1) whatever your real boot-rom is has to initalize the BSC; (2) the stub must NOT re-initialize the BSC; (3) you've got to pick a place in RAM such that anything else you're using will avoid stomping on it. I tried doing this some time ago (I forget exactly why); the attached patch might be helpful in that regard. It will build an sh-ramstub.srec which keeps the BSS/Data where the normal stub does, but moves the text to 0x8D000000, leaving 16M for the kernel (you'd have to force your kernel to limit itself so as not to overwite the stub, or configure it to not use the stub and let it overwrite after the kernel is loaded. I have not tried this.) If you want to use sh-ethboot, of course, you'd need to make similar changes in that (drop -DROM from CFLAGS in the Makefile, adjust the start address in standalone-ram.lds) and use a config.h that defines CONFIG_BOOT_LOADER1 to whatever you set the sh-ethboot start address to. (And then you've got three pieces of code -- the stub, the loader, and the kernel -- to prevent overlap between.) --Jeremy Siegel akira wrote: > No, i don't use the ipl+g in Area0 because i can't use the flash rom. > The board is little-endian and the rom is 16 bit. (flash rom is 32 bit). > I think that the gcc is right. > > Se sei italiano, o se parli italiano scrivimi pure. ho un po' di problemi > con l'inglese. > > ----- Original Message ----- > From: "Fabio Giovagnini" <fg...@ti...> > To: "akira" <aki...@ho...>; <lin...@li...> > Sent: Tuesday, March 19, 2002 6:47 PM > Subject: Re: [linuxsh-dev] sh-ipl+g > > > Were you able to use sh-ipl+g in Area0 ? > > Is your board little-endian or big-endian? > > How are you sure to compile good for your target? > > Is your boot rom 8 or 16 bit? > > > > Thanks > > > > On Tuesday 19 March 2002 18:41, akira wrote: > > > I have a 7727 (SH3-DSP) based board (PFM-DS11), this board uses the > > > standard Hitachi layout. IT is possible to use ipl+g in Area3 > (H'0c000000)? > > > and how could i do? > > > > > > thanks! > > > > _______________________________________________ > linuxsh-dev mailing list > lin...@li... > https://lists.sourceforge.net/lists/listinfo/linuxsh-dev |
From: akira <aki...@ho...> - 2002-03-19 18:03:13
|
No, i don't use the ipl+g in Area0 because i can't use the flash rom. The board is little-endian and the rom is 16 bit. (flash rom is 32 bit). I think that the gcc is right. Se sei italiano, o se parli italiano scrivimi pure. ho un po' di problemi con l'inglese. ----- Original Message ----- From: "Fabio Giovagnini" <fg...@ti...> To: "akira" <aki...@ho...>; <lin...@li...> Sent: Tuesday, March 19, 2002 6:47 PM Subject: Re: [linuxsh-dev] sh-ipl+g > Were you able to use sh-ipl+g in Area0 ? > Is your board little-endian or big-endian? > How are you sure to compile good for your target? > Is your boot rom 8 or 16 bit? > > Thanks > > On Tuesday 19 March 2002 18:41, akira wrote: > > I have a 7727 (SH3-DSP) based board (PFM-DS11), this board uses the > > standard Hitachi layout. IT is possible to use ipl+g in Area3 (H'0c000000)? > > and how could i do? > > > > thanks! > |
From: Fabio G. <fg...@ti...> - 2002-03-19 17:47:56
|
Were you able to use sh-ipl+g in Area0 ? Is your board little-endian or big-endian? How are you sure to compile good for your target? Is your boot rom 8 or 16 bit? Thanks On Tuesday 19 March 2002 18:41, akira wrote: > I have a 7727 (SH3-DSP) based board (PFM-DS11), this board uses the > standard Hitachi layout. IT is possible to use ipl+g in Area3 (H'0c000000)? > and how could i do? > > thanks! |
From: akira <aki...@ho...> - 2002-03-19 17:42:44
|
I have a 7727 (SH3-DSP) based board (PFM-DS11), this board uses the = standard Hitachi layout. IT is possible to use ipl+g in Area3 (H'0c000000)? and how could i do? thanks! |
From: Fabio G. <fg...@ti...> - 2002-03-19 17:24:33
|
---------- Forwarded Message ---------- Subject: Re: [linux-sh:02275] Re: [linuxsh-dev] How to link sh-IPL+g. Troubles Again Date: Tue, 19 Mar 2002 17:33:26 +0100 From: Fabio Giovagnini <fg...@ti...> To: Stuart Menefy <stu...@st...> I have this problem: My rom at 0x00000000 is an eprom (M27C4002) with data access 16 bits wide. I have an eprom with an IPL for winCE working. When using my eprom programmer I read the working IPL I can read some test in the ILP with the caracter swapped. For example: I read form the working eprom "ocypirhg t" and I think it is the word "copyright ". When I compile my sh-ipl+g I see the text in the rigth way when I open sh-stub.srec I'm sure my board is little-endian (we have to remeber it works win winCE). How can I make myself sure that I'm compiling correctly and I'm writing correctly the eprom? Thanks in advance. On Tuesday 19 March 2002 13:56, you wrote: > Fabio > > The only thing sh-stub needs to know is where RAM and ROM are. > Your board uses the standard Hitachi layout, so you can use the same > file as the SH4 SolutionEngine (sesh3.mem). > > You will probably need to modify the init-xxx.S file you use though, > to set up the right memory timings for your board. > > Stuart > > On Tue, 19 Mar 2002 09:18:03 +0100 > > fg...@ti... wrote: > > I have a sh-3 7709a based board with the following memory map: > > 00000000h Area0 Flash ROM > > 04000000h Area1 SH7709A Internal Registers > > 08000000h Area2 SH Bus > > 0C000000h Area3 SDRAM > > 10000000h Area4 Companion Chip > > 14000000h Area5 SED 1355 > > 18000000h Area6 PCMCIA/ISA > > 1C000000h Area7 SH7709A Internal Registers > > > > > > How I have to set .mem file to execute the sh-stub form Area 0. > > > > > > Thanks a lot. > > > > Fabio Giovagnini > > > > _______________________________________________ > > linuxsh-dev mailing list > > lin...@li... > > https://lists.sourceforge.net/lists/listinfo/linuxsh-dev ------------------------------------------------------- |
From: Tom R. <tr...@ke...> - 2002-03-19 15:38:06
|
On Mon, Mar 18, 2002 at 11:24:38AM -0800, Paul Mundt wrote: > On Mon, Mar 18, 2002 at 10:52:01AM -0800, Jeremy Siegel wrote: > > I haven't heard any objections to the TMU1 and KGDB patches I sent out a > > couple weeks ago, so I'll commit them in the next day or two. [Masahiro > > Abe was the only respondent regarding TMU1, and after some discussion he > > thought the change was fine.] > > > I've applied both to the restructure branch already, they went in relatively > effortlessly. You shouldn't have any problems pushing them into HEAD. > > This does mean that extra care will have to be taken with sync ups with Linus > though, since Linus doesn't like kernel debuggers. He just doesn't like 'em on x86. As far as I know he's never compilained about KGDB support on PPC, or xmon (very light debugger) being in the tree. -- Tom Rini (TR1265) http://gate.crashing.org/~trini/ |