diff options
| author | Matthew Wilcox <willy@debian.org> | 2002-11-03 00:21:37 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-11-03 00:21:37 -0800 |
| commit | 57b1dfbd5b4a39db574b45285cc34bbfc1504a36 (patch) | |
| tree | 6519933362017e73788a092ca215618b0c538207 | |
| parent | 9dbad95a91855890567a7b6c4f3a807d1d903ed9 (diff) | |
[PATCH] PA-RISC updates
Some misc updates:
- adapt our config.in changes to arch/parisc/Kconfig
- general Makefile updaes for the new build system
- remove asm-parisc/gsc.h in favour of asm-parisc/io.h
- Alan-approved fix for the loff_t problem
- Define POLLREMOVE like other architectures.
- irq handling updates from Grant Grundler
27 files changed, 326 insertions, 666 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index f6957f4915f6..cae57767e1c5 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -3,15 +3,16 @@ # see the Configure script. # -mainmenu "Linux Kernel Configuration" +mainmenu "Linux/PA-RISC Kernel Configuration" config PARISC bool default y help - The PA-RISC microprocessor is a RISC chip designed by - Hewlett-Packard and used in their line of workstations. The PA-RISC - Linux project has a home page at <www.parisc-linux.org>. + The PA-RISC microprocessor is designed by Hewlett-Packard and used + in many of their workstations & servers (HP9000 700 and 800 series, + and later HP3000 series). The PA-RISC Linux project home page is + at <http://www.parisc-linux.org/>. config UID16 bool @@ -25,16 +26,72 @@ config RWSEM_XCHGADD_ALGORITHM config GENERIC_ISA_DMA bool - default y + +# unless you want to implement ACPI on PA-RISC ... ;-) +config PM + bool source "init/Kconfig" -menu "General options" +menu "Processor type and features" -# bool 'Symmetric multi-processing support' CONFIG_SMP -config SMP +choice + prompt "Processor type" + default PA7000 + +config PA7000 + bool "PA7000/PA7100" + ---help--- + This is the processor type of your CPU. This information is used for + optimizing purposes. In order to compile a kernel that can run on + all PA CPUs (albeit not optimally fast), you can specify "PA7000" + here. + + Specifying "PA8000" here will allow you to select a 64-bit kernel + which is required on some machines. + +config PA7100LC + bool "PA7100LC/PA7300LC" + help + Select this option for a 7100LC or 7300LC processor, as used + in the 712, 715/Mirage, A180, B132, C160L and some other machines. + +config PA7200 + bool "PA7200" + help + Select this option for the PCX-T' processor, as used in C110, D100 + and similar machines. + +config PA8X00 + bool "PA8000 and up" + help + Select this option for PCX-U to PCX-W2 processors. + +endchoice + +# Define implied options from the CPU selection here + +config PA20 bool + depends on PA8X00 + default y + +config PA11 + bool + depends on PA7000 || PA7100LC || PA7200 + default y + +config PARISC64 + bool "64-bit kernel" + depends on PA8X00 + +config PDC_NARROW + bool "32-bit firmware" + depends on PARISC64 + +config SMP + bool "Symmetric multi-processing support" ---help--- This enables support for systems with more than one CPU. If you have a system with only one CPU, like most personal computers, say N. If @@ -46,97 +103,36 @@ config SMP singleprocessor machines. On a singleprocessor machine, the kernel will run faster if you say N here. - Note that if you say Y here and choose architecture "586" or - "Pentium" under "Processor family", the kernel will not work on 486 - architectures. Similarly, multiprocessor kernels for the "PPro" - architecture may not work on all Pentium based boards. - - People using multiprocessor machines who say Y here should also say - Y to "Enhanced Real Time Clock Support", below. The "Advanced Power - Management" code will be disabled if you say Y here. - See also the <file:Documentation/smp.tex>, - <file:Documentation/smp.txt>, <file:Documentation/i386/IO-APIC.txt>, - <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at + <file:Documentation/smp.txt>, <file:Documentation/nmi_watchdog.txt> + and the SMP-HOWTO available at <http://www.linuxdoc.org/docs.html#howto>. If you don't know what to do here, say N. +config PREEMPT + bool +# bool "Preemptible Kernel" + default n + config NR_CPUS int "Maximum number of CPUs (2-32)" depends on SMP default "32" -config KWDB - bool "Kernel Debugger support" - help - Include in-kernel hooks for kdb, the source level debugger for the - PA-RISC port. - -# define_bool CONFIG_KWDB n -# bool 'GSC/Gecko bus support' CONFIG_GSC y -config GSC - bool - default y +endmenu -config IOMMU_CCIO - bool "U2/Uturn I/O MMU" - help - Say Y here to enable DMA management routines for the first - generation of PA-RISC cache-coherent machines. Programs the - U2/Uturn chip in "Virtual Mode" and use the I/O MMU. -config GSC_LASI - bool "LASI I/O support" - help - Say Y here to directly support the LASI controller chip found on - PA-RISC workstations. Linux-oriented documentation for this chip - can be found at <http://www.parisc-linux.org/documentation/>. +source "drivers/parisc/Kconfig" -config PCI - bool "PCI support" - help - Find out whether you have a PCI motherboard. PCI is the name of a - bus system, i.e. the way the CPU talks to the other stuff inside - your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or - VESA. If you have PCI, say Y, otherwise N. - - The PCI-HOWTO, available from - <http://www.linuxdoc.org/docs.html#howto>, contains valuable - information about which PCI hardware does work under Linux and which - doesn't. - -config GSC_DINO - bool "GSCtoPCI/DINO PCI support" - depends on PCI - -config PCI_LBA - bool "LBA/Elroy PCI support" - depends on PCI - help - Say Y here to give the PA-RISC kernel access to PCI configuration - and IO-port space on PA-RISC workstations equipped with a Lower Bus - Adapter (LBA). This includes A, B, C, J, L, and N-class machines - with 4-digit model numbers, also the A300. -config IOSAPIC - bool - depends on PCI_LBA - default y +menu "Executable file formats" -config IOMMU_SBA +config KCORE_ELF bool - depends on PCI_LBA + depends on PROC_FS default y -# -# if [ "$CONFIG_PCI_EPIC" = "y" ]; then... -# -endmenu - - -menu "General setup" - config BINFMT_SOM tristate "Kernel support for SOM binaries" help @@ -197,117 +193,26 @@ config BINFMT_MISC you have use for it; the module is called binfmt_misc.o. If you don't know what to answer at this point, say Y. -config BINFMT_JAVA - tristate "Kernel support for JAVA binaries (obsolete)" - depends on EXPERIMENTAL - help - If you say Y here, the kernel will load and execute Java J-code - binaries directly. Note: this option is obsolete and scheduled for - removal, use CONFIG_BINFMT_MISC instead. - endmenu -##source drivers/parport/Config.in - -menu "Parallel port support" +# source "drivers/mtd/Kconfig" -config PARPORT - tristate "Parallel port support" - ---help--- - If you want to use devices connected to your machine's parallel port - (the connector at the computer with 25 holes), e.g. printer, ZIP - drive, PLIP link (Parallel Line Internet Protocol is mainly used to - create a mini network by connecting the parallel ports of two local - machines) etc., then you need to say Y here; please read - <file:Documentation/parport.txt> and - <file:drivers/parport/BUGS-parport>. - - For extensive information about drivers for many devices attaching - to the parallel port see <http://www.torque.net/linux-pp.html> on - the WWW. - - It is possible to share a single parallel port among several devices - and it is safe to compile all the corresponding drivers into the - kernel. If you want to compile parallel port support as a module - ( = code which can be inserted in and removed from the running - kernel whenever you want), say M here and read - <file:Documentation/modules.txt>. The module will be called - parport.o. If you have more than one parallel port and want to - specify which port and IRQ to be used by this driver at module load - time, take a look at <file:Documentation/parport.txt>. - - If unsure, say Y. - -config PARPORT_PC - tristate "PC-style hardware" - depends on PCI && PARPORT - ---help--- - You should say Y here if you have a PC-style parallel port. All IBM - PC compatible computers and some Alphas have PC-style parallel - ports. +source "drivers/parport/Kconfig" - This code is also available as a module. If you want to compile it - as a module ( = code which can be inserted in and removed from the - running kernel whenever you want), say M here and read - <file:Documentation/modules.txt>. The module will be called - parport_pc.o. +# source "drivers/pnp/Kconfig" - If unsure, say Y. +source "drivers/block/Kconfig" -config PARPORT_PC_FIFO - bool "Use FIFO/DMA if available" - depends on PARPORT_PC - help - Many parallel port chipsets provide hardware that can speed up - printing. Say Y here if you want to take advantage of that. - - As well as actually having a FIFO, or DMA capability, the kernel - will need to know which IRQ the parallel port has. By default, - parallel port interrupts will not be used, and so neither will the - FIFO. See <file:Documentation/parport.txt> to find out how to - specify which IRQ/DMA to use. - -config PARPORT_PC_SUPERIO - bool "SuperIO chipset support (EXPERIMENTAL)" - depends on PARPORT_PC && EXPERIMENTAL - help - Saying Y here enables some probes for Super-IO chipsets in order to - find out things like base addresses, IRQ lines and DMA channels. It - is safe to say N. +menu "ATA/IDE/MFM/RLL support" + depends on SUPERIO -config PARPORT_GSC - tristate "LASI/ASP builtin parallel-port" - depends on GSC_LASI && PARPORT - help - Say Y here to build in low-level parallel-support for PC-style - hardware integrated in the LASI-Controller (on the GSC Bus) for - HP-PARISC workstations. - -# If exactly one hardware type is selected then parport will optimise away -# support for loading any others. Defeat this if the user is keen. -config PARPORT_OTHER - bool "Support foreign hardware" - depends on PARPORT - help - Say Y here if you want to be able to load driver modules to support - other non-standard types of parallel ports. This causes a - performance loss, so most people say N. +config IDE + tristate "ATA/IDE/MFM/RLL support" -config PARPORT_1284 - bool "IEEE 1284 transfer modes" - depends on PARPORT - help - If you have a printer that supports status readback or device ID, or - want to use a device that uses enhanced parallel port transfer modes - such as EPP and ECP, say Y here to enable advanced IEEE 1284 - transfer modes. Also say Y if you want device ID information to - appear in /proc/sys/dev/parport/*/autoprobe*. It is safe to say N. +source "drivers/ide/Kconfig" endmenu -source "drivers/block/Kconfig" - - menu "SCSI support" config SCSI @@ -330,304 +235,20 @@ config SCSI module if your root file system (the one containing the directory /) is located on a SCSI device. -comment "SCSI support type (disk, tape, CDrom)" - depends on SCSI - -config BLK_DEV_SD - tristate "SCSI disk support" - depends on SCSI - ---help--- - If you want to use a SCSI hard disk or the SCSI or parallel port - version of the IOMEGA ZIP drive under Linux, say Y and read the - SCSI-HOWTO, the Disk-HOWTO and the Multi-Disk-HOWTO, available from - <http://www.linuxdoc.org/docs.html#howto>. This is NOT for SCSI - CD-ROMs. - - 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 sd_mod.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> and - <file:Documentation/scsi.txt>. Do not compile this driver as a - module if your root file system (the one containing the directory /) - is located on a SCSI disk. In this case, do not compile the driver - for your SCSI host adapter (below) as a module either. - -config SD_EXTRA_DEVS - int "Maximum number of SCSI disks that can be loaded as modules" - depends on BLK_DEV_SD - default "40" - ---help--- - This controls the amount of additional space allocated in tables for - drivers that are loaded as modules after the kernel is booted. In - the event that the SCSI core itself was loaded as a module, this - value is the number of additional disks that can be loaded after the - first host driver is loaded. - - Admittedly this isn't pretty, but there are tons of race conditions - involved with resizing the internal arrays on the fly. Someday this - flag will go away, and everything will work automatically. - - If you don't understand what's going on, go with the default. - -config CHR_DEV_ST - tristate "SCSI tape support" - depends on SCSI - ---help--- - If you want to use a SCSI tape drive under Linux, say Y and read the - SCSI-HOWTO, available from - <http://www.linuxdoc.org/docs.html#howto>, and - <file:drivers/scsi/README.st> in the kernel source. This is NOT for - SCSI CD-ROMs. - - 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 st.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> and - <file:Documentation/scsi.txt>. - -config BLK_DEV_SR - tristate "SCSI CDROM support" - depends on SCSI - ---help--- - If you want to use a SCSI CD-ROM under Linux, say Y and read the - SCSI-HOWTO and the CD-ROM-HOWTO at - <http://www.linuxdoc.org/docs.html#howto>. Also make sure to say Y - or M to "ISO 9660 CD-ROM file system support" later. - - 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 sr_mod.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt> and - <file:Documentation/scsi.txt>. +source drivers/scsi/Kconfig -config BLK_DEV_SR_VENDOR - bool "Enable vendor-specific extensions (for SCSI CDROM)" - depends on BLK_DEV_SR - help - This enables the usage of vendor specific SCSI commands. This is - required to support multisession CDs with old NEC/TOSHIBA cdrom - drives (and HP Writers). If you have such a drive and get the first - session only, try saying Y here; everybody else says N. - -config SR_EXTRA_DEVS - int "Maximum number of CDROM devices that can be loaded as modules" - depends on BLK_DEV_SR - default "2" - ---help--- - This controls the amount of additional space allocated in tables for - drivers that are loaded as modules after the kernel is booted. In - the event that the SCSI core itself was loaded as a module, this - value is the number of additional CD-ROMs that can be loaded after - the first host driver is loaded. - - Admittedly this isn't pretty, but there are tons of race conditions - involved with resizing the internal arrays on the fly. Someday this - flag will go away, and everything will work automatically. - - If you don't understand what's going on, go with the default. - -config CHR_DEV_SG - tristate "SCSI generic support" - depends on SCSI - ---help--- - If you want to use SCSI scanners, synthesizers or CD-writers or just - about anything having "SCSI" in its name other than hard disks, - CD-ROMs or tapes, say Y here. These won't be supported by the kernel - directly, so you need some additional software which knows how to - talk to these devices using the SCSI protocol: - - For scanners, look at SANE (<http://www.mostang.com/sane/>). For CD - writer software look at Cdrtools - (<http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html>) - and for burning a "disk at once": CDRDAO - (<http://cdrdao.sourceforge.net/>). Cdparanoia is a high - quality digital reader of audio CDs (<http://www.xiph.org/paranoia/>). - For other devices, it's possible that you'll have to write the - driver software yourself. Please read the file - <file:Documentation/scsi-generic.txt> for more information. - - If you want to compile this as a module ( = code which can be - inserted in and removed from the running kernel whenever you want), - say M here and read <file:Documentation/modules.txt> and - <file:Documentation/scsi.txt>. The module will be called sg.o. If unsure, - say N. - -comment "Some SCSI devices (e.g. CD jukebox) support multiple LUNs" - depends on SCSI - -config SCSI_MULTI_LUN - bool "Probe all LUNs on each SCSI device" - depends on SCSI - help - If you have a SCSI device that supports more than one LUN (Logical - Unit Number), e.g. a CD jukebox, and only one LUN is detected, you - can say Y here to force the SCSI driver to probe for multiple LUNs. - A SCSI device with multiple LUNs acts logically like multiple SCSI - devices. The vast majority of SCSI devices have only one LUN, and - so most people can say N here and should in fact do so, because it - is safer. - -config SCSI_CONSTANTS - bool "Verbose SCSI error reporting (kernel size +=12K)" - depends on SCSI - help - The error messages regarding your SCSI hardware will be easier to - understand if you say Y here; it will enlarge your kernel by about - 12 KB. If in doubt, say Y. - - -menu "SCSI low-level drivers" - depends on SCSI!=n - -config SCSI_LASI - tristate "Lasi SCSI support" - depends on GSC_LASI && SCSI - -config SCSI_ZALON - tristate "Zalon SCSI support" - depends on GSC_LASI && SCSI - help - The Zalon is an interface chip that sits between the PA-RISC - processor and the NCR 53c720 SCSI controller on K-series PA-RISC - boards (these are used, among other places, on some HP 780 - workstations). Say Y here to make sure it gets initialized - correctly before the Linux kernel tries to talk to the controller. - -config SCSI_SYM53C8XX - tristate "SYM53C8XX SCSI support" - depends on PCI && SCSI - ---help--- - This driver supports all the features of recent 53C8XX chips (used - in PCI SCSI controllers), notably the hardware phase mismatch - feature of the SYM53C896. - - Older versions of the 53C8XX chips are not supported by this - driver. If your system uses either a 810 rev. < 16, a 815, or a 825 - rev. < 16 PCI SCSI processor, you must use the generic NCR53C8XX - driver ("NCR53C8XX SCSI support" above) or configure both the - NCR53C8XX and this SYM53C8XX drivers either as module or linked to - the kernel image. - - When both drivers are linked into the kernel, the SYM53C8XX driver - is called first at initialization and you can use the 'excl=ioaddr' - driver boot option to exclude attachment of adapters by the - SYM53C8XX driver. For example, entering - 'sym53c8xx=excl:0xb400,excl=0xc000' at the lilo prompt prevents - adapters at io address 0xb400 and 0xc000 from being attached by the - SYM53C8XX driver, thus allowing the NCR53C8XX driver to attach them. - The 'excl' option is also supported by the NCR53C8XX driver. - - Please read <file:drivers/scsi/README.ncr53c8xx> for more - information. - -config SCSI_NCR53C8XX_DEFAULT_TAGS - int "default tagged command queue depth" - depends on SCSI_ZALON || SCSI_SYM53C8XX - default "8" - ---help--- - "Tagged command queuing" is a feature of SCSI-2 which improves - performance: the host adapter can send several SCSI commands to a - device's queue even if previous commands haven't finished yet. - Because the device is intelligent, it can optimize its operations - (like head positioning) based on its own request queue. Some SCSI - devices don't implement this properly; if you want to disable this - feature, enter 0 or 1 here (it doesn't matter which). - - The default value is 8 and should be supported by most hard disks. - This value can be overridden from the boot command line using the - 'tags' option as follows (example): - 'ncr53c8xx=tags:4/t2t3q16/t0u2q10' will set default queue depth to - 4, set queue depth to 16 for target 2 and target 3 on controller 0 - and set queue depth to 10 for target 0 / lun 2 on controller 1. - - The normal answer therefore is to go with the default 8 and to use - a boot command line option for devices that need to use a different - command queue depth. - - There is no safe option other than using good SCSI devices. - -config SCSI_NCR53C8XX_MAX_TAGS - int "maximum number of queued commands" - depends on SCSI_ZALON || SCSI_SYM53C8XX - default "32" - ---help--- - This option allows you to specify the maximum number of commands - that can be queued to any device, when tagged command queuing is - possible. The default value is 32. Minimum is 2, maximum is 64. - Modern hard disks are able to support 64 tags and even more, but - do not seem to be faster when more than 32 tags are being used. - - So, the normal answer here is to go with the default value 32 unless - you are using very large hard disks with large cache (>= 1 MB) that - are able to take advantage of more than 32 tagged commands. - - There is no safe option and the default answer is recommended. - -config SCSI_NCR53C8XX_SYNC - int "synchronous transfers frequency in MHz" - depends on SCSI_ZALON || SCSI_SYM53C8XX - default "20" - ---help--- - The SCSI Parallel Interface-2 Standard defines 5 classes of transfer - rates: FAST-5, FAST-10, FAST-20, FAST-40 and FAST-80. The numbers - are respectively the maximum data transfer rates in mega-transfers - per second for each class. For example, a FAST-20 Wide 16 device is - able to transfer data at 20 million 16 bit packets per second for a - total rate of 40 MB/s. - - You may specify 0 if you want to only use asynchronous data - transfers. This is the safest and slowest option. Otherwise, specify - a value between 5 and 80, depending on the capability of your SCSI - controller. The higher the number, the faster the data transfer. - Note that 80 should normally be ok since the driver decreases the - value automatically according to the controller's capabilities. - - Your answer to this question is ignored for controllers with NVRAM, - since the driver will get this information from the user set-up. It - also can be overridden using a boot setup option, as follows - (example): 'ncr53c8xx=sync:12' will allow the driver to negotiate - for FAST-20 synchronous data transfer (20 mega-transfers per - second). - - The normal answer therefore is not to go with the default but to - select the maximum value 80 allowing the driver to use the maximum - value supported by each controller. If this causes problems with - your SCSI devices, you should come back and decrease the value. - - There is no safe option other than using good cabling, right - terminations and SCSI conformant devices. - -config SCSI_NCR53C8XX_PROFILE - bool "enable profiling" - depends on SCSI_ZALON || SCSI_SYM53C8XX - help - This option allows you to enable profiling information gathering. - These statistics are not very accurate due to the low frequency - of the kernel clock (100 Hz on i386) and have performance impact - on systems that use very fast devices. - - The normal answer therefore is N. +endmenu -config SCSI_NCR53C8XX_IOMAPPED - bool "use normal IO" - depends on SCSI_ZALON || SCSI_SYM53C8XX - help - If you say Y here, the driver will use normal IO, as opposed to - memory mapped IO. Memory mapped IO has less latency than normal IO - and works for most Intel-based hardware. Under Linux/Alpha only - normal IO is currently supported by the driver and so, this option - has no effect on those systems. +source "drivers/md/Kconfig" - The normal answer therefore is N; try Y only if you encounter SCSI - related problems. +#source drivers/message/fusion/Kconfig -endmenu +#source drivers/ieee1394/Kconfig -endmenu +#source drivers/message/i2o/Kconfig source "net/Kconfig" - menu "Network device support" depends on NET @@ -662,23 +283,52 @@ config NETDEVICES Guide", to be found in <http://www.linuxdoc.org/docs.html#guide>. If unsure, say Y. -config LASI_82596 - tristate "Lasi ethernet" - depends on NETDEVICES && GSC_LASI - help - Say Y here to support the on-board Intel 82596 ethernet controller - built into Hewlett-Packard PA-RISC machines. - source "drivers/net/Kconfig" +source "drivers/atm/Kconfig" + endmenu +#source "net/ax25/Kconfig" + +source "net/irda/Kconfig" + +#source "drivers/isdn/Kconfig" + +#source "drivers/telephony/Kconfig" + +# input before char - char/joystick depends on it. As does USB. +source "drivers/input/Kconfig" + source "drivers/char/Kconfig" +#source "drivers/misc/Kconfig" + +source "drivers/media/Kconfig" + source "fs/Kconfig" -menu "Sound Drivers" +menu "Console drivers" + depends on VT + +config STI_CONSOLE + bool "STI console" + help + The STI console is the builtin display/keyboard on HP-PARISC + machines. Say Y here to build support for it into your kernel. + The alternative is to use your primary serial port as a console. + +config DUMMY_CONSOLE + bool + depends on STI_CONSOLE || SERIAL_8250_CONSOLE + default y + +source "drivers/video/Kconfig" + +endmenu + +menu "Sound" config SOUND tristate "Sound card support" @@ -714,34 +364,29 @@ source "sound/Kconfig" endmenu +source "drivers/usb/Kconfig" -menu "Console drivers" - depends on VT +source "net/bluetooth/Kconfig" -source "drivers/video/Kconfig" +menu "Kernel hacking" -# bool 'IODC console' CONFIG_IODC_CONSOLE -config STI_CONSOLE - bool "STI console" +config DEBUG_KERNEL + bool "Kernel debugging" help - The STI console is the builtin display/keyboard on HP-PARISC - machines. Say Y here to build support for it into your kernel. - The alternative is to use your primary serial port as a console. + Say Y here if you are developing drivers or trying to debug and + identify kernel problems. -config DUMMY_CONSOLE - bool - depends on STI_CONSOLE || !IODC_CONSOLE && GSC_PS2 - default y - -endmenu - -# endmenu - -menu "Kernel hacking" +config DEBUG_SLAB + bool "Debug memory allocations" + depends on DEBUG_KERNEL + help + Say Y here to have the kernel do limited verification on memory + allocation as well as poisoning memory on free to catch use of freed + memory. -#bool 'Debug kmalloc/kfree' CONFIG_DEBUG_MALLOC config MAGIC_SYSRQ bool "Magic SysRq key" + depends on DEBUG_KERNEL help If you say Y here, you will have some control over the system even if the system crashes for example during kernel debugging (e.g., you @@ -753,6 +398,14 @@ config MAGIC_SYSRQ keys are documented in <file:Documentation/sysrq.txt>. Don't say Y unless you really know what this hack does. +config KALLSYMS + bool "Load all symbols for debugging/kksymoops" + depends on DEBUG_KERNEL + help + Say Y here to let the kernel print out symbolic crash information and + symbolic stack backtraces. This increases the size of the kernel + somewhat, as all symbols have to be loaded into the kernel image. + endmenu source "security/Kconfig" diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile index 331c7b4ad1df..7d8ea38ddb75 100644 --- a/arch/parisc/Makefile +++ b/arch/parisc/Makefile @@ -80,7 +80,6 @@ core-y += arch/parisc/kernel/pdc_cons.o \ arch/parisc/kernel/init_task.o libs-y += arch/parisc/lib/ \ `$(CC) -print-libgcc-file-name` -drivers-$(CONFIG_MATH_EMULATION) += arch/parisc/math-emu/ palo: vmlinux @if [ $$(palo -f /dev/null >/dev/null 2>&1 ; echo $$?) != 2 ]; then \ diff --git a/arch/parisc/kernel/Makefile b/arch/parisc/kernel/Makefile index c01c46267f78..e5151a06241d 100644 --- a/arch/parisc/kernel/Makefile +++ b/arch/parisc/kernel/Makefile @@ -1,5 +1,5 @@ # -# Makefile for the linux kernel. +# Makefile for arch/parisc/kernel # ifdef CONFIG_PARISC64 @@ -27,5 +27,3 @@ obj-$(CONFIG_PARISC64) += binfmt_elf32.o sys_parisc32.o \ ioctl32.o signal32.o # only supported for PCX-W/U in 64-bit mode at the moment obj-$(CONFIG_PARISC64) += perf.o perf_asm.o - -include $(TOPDIR)/Rules.make diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c index eee69b084161..58919f27ef4c 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c @@ -35,6 +35,7 @@ int main(void) DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); DEFINE(TASK_MM, offsetof(struct task_struct, mm)); DEFINE(TASK_PERSONALITY, offsetof(struct task_struct, personality)); + DEFINE(TASK_PID, offsetof(struct task_struct, pid)); BLANK(); DEFINE(TASK_REGS, offsetof(struct task_struct, thread.regs)); DEFINE(TASK_PT_PSW, offsetof(struct task_struct, thread.regs.gr[ 0])); diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.c index bda0adb36f16..aebd02d729d8 100644 --- a/arch/parisc/kernel/drivers.c +++ b/arch/parisc/kernel/drivers.c @@ -23,7 +23,6 @@ #include <asm/hardware.h> #include <asm/io.h> #include <asm/pdc.h> -#include <asm/gsc.h> /* See comments in include/asm-parisc/pci.h */ struct pci_dma_ops *hppa_dma_ops; diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 156e56ef6b2c..54717107de48 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -502,7 +502,6 @@ fault_vector_11: .import handle_real_interruption,code .import do_cpu_irq_mask,code .import parisc_stopkernel,code - .import cpu_irq_region,data /* * r26 = function to be called @@ -528,23 +527,28 @@ __kernel_thread: ldd 24(%r26), %r2 STREG %r2, PT_GR27(%r1) /* Store childs %dp */ ldd 16(%r26), %r26 + + STREG %r22, PT_GR22(%r1) /* Store childs %dp */ + copy %r0, %r22 /* user_tid */ #endif STREG %r26, PT_GR26(%r1) /* Store function & argument for child */ STREG %r25, PT_GR25(%r1) ldo CLONE_VM(%r0), %r26 /* Force CLONE_VM since only init_mm */ or %r26, %r24, %r26 /* will have kernel mappings. */ - copy %r0, %r25 + copy %r0, %r25 /* stack_start */ + stw %r0, -52(%r30) /* user_tid */ #ifdef __LP64__ ldo -16(%r30),%r29 /* Reference param save area */ #endif bl do_fork, %r2 - copy %r1, %r24 + copy %r1, %r24 /* pt_regs */ /* Parent Returns here */ LDREG -PT_SZ_ALGN-RP_OFFSET(%r30), %r2 - bv %r0(%r2) ldo -PT_SZ_ALGN(%r30), %r30 + bv %r0(%r2) + ldw TASK_PID(%r28), %r28 /* * Child Returns here @@ -566,6 +570,7 @@ ret_from_kernel_thread: LDREG TASK_PT_GR25(%r1), %r26 #ifdef __LP64__ LDREG TASK_PT_GR27(%r1), %r27 + LDREG TASK_PT_GR22(%r1), %r22 #endif LDREG TASK_PT_GR26(%r1), %r1 ble 0(%sr7, %r1) @@ -785,10 +790,10 @@ intr_do_softirq: .import schedule,code intr_do_resched: /* Only do reschedule if we are returning to user space */ - LDREG PT_IASQ0(%r16), %r20 + LDREG PT_IASQ0(%r16), %r20 CMPIB= 0,%r20,intr_restore /* backward */ nop - LDREG PT_IASQ1(%r16), %r20 + LDREG PT_IASQ1(%r16), %r20 CMPIB= 0,%r20,intr_restore /* backward */ nop @@ -796,28 +801,29 @@ intr_do_resched: ldo -16(%r30),%r29 /* Reference param save area */ #endif - ldil L%intr_return, %r2 + ldil L%intr_check_sig, %r2 b schedule - ldo R%intr_return(%r2), %r2 /* return to intr_return, not here */ + ldo R%intr_check_sig(%r2), %r2 .import do_signal,code intr_do_signal: /* Only do signals if we are returning to user space */ - LDREG PT_IASQ0(%r16), %r20 + LDREG PT_IASQ0(%r16), %r20 CMPIB= 0,%r20,intr_restore /* backward */ nop - LDREG PT_IASQ1(%r16), %r20 + LDREG PT_IASQ1(%r16), %r20 CMPIB= 0,%r20,intr_restore /* backward */ nop copy %r0, %r24 /* unsigned long in_syscall */ copy %r16, %r25 /* struct pt_regs *regs */ - ssm PSW_SM_I, %r0 #ifdef __LP64__ ldo -16(%r30),%r29 /* Reference param save area */ #endif -#warning TAUSQ FIXME, this is wrong + +#warning TAUSQ FIXME - review 2.5 signal return path changes + bl do_signal,%r2 copy %r0, %r26 /* sigset_t *oldset = NULL */ @@ -860,26 +866,19 @@ intr_extint: loadgp - copy %r29, %r25 /* arg1 is pt_regs */ + copy %r29, %r26 /* arg0 is pt_regs */ copy %r29, %r16 /* save pt_regs */ + ldil L%intr_return, %r2 + #ifdef __LP64__ ldo -16(%r30),%r29 /* Reference param save area */ -#else - nop #endif - - /* - * We need to either load the CPU's ID or IRQ region. - * Until we have "per CPU" IRQ regions, this is easy. - */ - ldil L%cpu_irq_region, %r26 - ldil L%intr_return, %r2 - ldo R%cpu_irq_region(%r26), %r26 - + b do_cpu_irq_mask ldo R%intr_return(%r2), %r2 /* return to intr_return, not here */ + /* Generic interruptions (illegal insn, unaligned, page fault, etc) */ .export intr_save, code /* for os_hpmc */ @@ -953,11 +952,11 @@ skip_save_ior: ldo -16(%r30),%r29 /* Reference param save area */ #endif - ldil L%intr_return, %r2 + ldil L%intr_restore, %r2 copy %r25, %r16 /* save pt_regs */ b handle_interruption - ldo R%intr_return(%r2), %r2 /* return to intr_return */ + ldo R%intr_restore(%r2), %r2 /* diff --git a/arch/parisc/kernel/hardware.c b/arch/parisc/kernel/hardware.c index cb69214baac9..db4720d7b8ec 100644 --- a/arch/parisc/kernel/hardware.c +++ b/arch/parisc/kernel/hardware.c @@ -403,7 +403,7 @@ static struct hp_hardware hp_hardware_list[] __initdata = { {HPHW_BA, 0x01B, 0x00078, 0x0, "Anole 100 VME BA"}, {HPHW_BA, 0x024, 0x00078, 0x0, "Fast Pace VME BA"}, {HPHW_BA, 0x034, 0x00078, 0x0, "Anole T VME BA"}, - {HPHW_BA, 0x04A, 0x00078, 0x0, "Anole L2 132 BME BA"}, + {HPHW_BA, 0x04A, 0x00078, 0x0, "Anole L2 132 VME BA"}, {HPHW_BA, 0x04C, 0x00078, 0x0, "Anole L2 165 VME BA"}, {HPHW_BA, 0x011, 0x00081, 0x0, "WB-96 Core BA"}, {HPHW_BA, 0x012, 0x00081, 0x0, "Orville UX Core BA"}, @@ -805,8 +805,8 @@ static struct hp_hardware hp_hardware_list[] __initdata = { {HPHW_FIO, 0x04E, 0x0007B, 0x0, "Kiji L2 132 Core Audio"}, {HPHW_FIO, 0x050, 0x0007B, 0x0, "Merlin Jr 132 Core Audio"}, {HPHW_FIO, 0x051, 0x0007B, 0x0, "Firehawk Audio"}, - {HPHW_FIO, 0x056, 0x0007B, 0x0, "Raven+ w SE FWSCSU Core Audio"}, - {HPHW_FIO, 0x057, 0x0007B, 0x0, "Raven+ w Diff FWSCSU Core Audio"}, + {HPHW_FIO, 0x056, 0x0007B, 0x0, "Raven+ w SE FWSCSI Core Audio"}, + {HPHW_FIO, 0x057, 0x0007B, 0x0, "Raven+ w Diff FWSCSI Core Audio"}, {HPHW_FIO, 0x058, 0x0007B, 0x0, "FireHawk 200 Audio"}, {HPHW_FIO, 0x05C, 0x0007B, 0x0, "SummitHawk 230 Core Audio"}, {HPHW_FIO, 0x800, 0x0007B, 0x0, "Hitachi Tiny 64 Audio"}, diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index c8ef298bde2b..9eb560834785 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c @@ -57,7 +57,7 @@ extern void ipi_interrupt(int, void *, struct pt_regs *); /* Bits in EIEM correlate with cpu_irq_action[]. ** Numbered *Big Endian*! (ie bit 0 is MSB) */ -static unsigned long cpu_eiem = 0; +static volatile unsigned long cpu_eiem = 0; static spinlock_t irq_lock = SPIN_LOCK_UNLOCKED; /* protect IRQ regions */ @@ -104,24 +104,35 @@ static inline void unmask_cpu_irq(void *unused, int irq) set_eiem(cpu_eiem); } -static struct irqaction cpu_irq_actions[IRQ_PER_REGION] = { +/* + * XXX cpu_irq_actions[] will become 2 dimensional for per CPU EIR support. + * correspond changes needed in: + * processor_probe() initialize additional action arrays + * request_irq() handle CPU IRQ region specially + * do_cpu_irq_mask() index into the matching irq_action array. + */ +struct irqaction cpu_irq_actions[IRQ_PER_REGION] = { [IRQ_OFFSET(TIMER_IRQ)] { handler: timer_interrupt, name: "timer", }, #ifdef CONFIG_SMP [IRQ_OFFSET(IPI_IRQ)] { handler: ipi_interrupt, name: "IPI", }, #endif }; -struct irq_region cpu_irq_region = { +struct irq_region_ops cpu_irq_ops = { + disable_cpu_irq, enable_cpu_irq, unmask_cpu_irq, unmask_cpu_irq +}; + +struct irq_region cpu0_irq_region = { ops: { disable_cpu_irq, enable_cpu_irq, unmask_cpu_irq, unmask_cpu_irq }, data: { dev: &cpu_data[0], - name: "PA-CPU-00", + name: "PARISC-CPU", irqbase: IRQ_FROM_REGION(CPU_IRQ_REGION), }, action: cpu_irq_actions, }; struct irq_region *irq_region[NR_IRQ_REGS] = { [ 0 ] NULL, /* reserved for EISA, else causes data page fault (aka code 15) */ - [ CPU_IRQ_REGION ] &cpu_irq_region, + [ CPU_IRQ_REGION ] &cpu0_irq_region, }; @@ -192,10 +203,10 @@ int show_interrupts(struct seq_file *p, void *v) unsigned int regnr = 0; seq_puts(p, " "); -#if 0 /* def CONFIG_SMP */ - for (; regnr < smp_num_cpus; regnr++) +#ifdef CONFIG_SMP + for (regnr = 0; regnr < NR_CPUS; regnr++) #endif - seq_printf(p, " CPU%d ", regnr); + seq_printf(p, " CPU%02d ", regnr); #ifdef PARISC_IRQ_CR16_COUNTS seq_printf(p, "[min/avg/max] (CPU cycle counts)"); @@ -216,24 +227,16 @@ int show_interrupts(struct seq_file *p, void *v) for (i = 0; i <= MAX_CPU_IRQ; i++) { struct irqaction *action = ®ion->action[i]; unsigned int irq_no = IRQ_FROM_REGION(regnr) + i; -#if 0 /* def CONFIG_SMP */ -/* We currently direct all Interrupts at the Monarch. - * The right way to handle SMP IRQ stats is to have one IRQ region/CPU. - */ - unsigned int j; -#endif - + int j=0; if (!action->handler) continue; seq_printf(p, "%3d: ", irq_no); -#if 1 /* ndef CONFIG_SMP */ - seq_printf(p, "%10u ", kstat_irqs(irq_no)); -#else - for (j = 0; j < smp_num_cpus; j++) - seq_printf(p, "%10u ", - kstat.irqs[cpu_logical_map(j)][irq_no]); +#ifdef CONFIG_SMP + for (; j < NR_CPUS; j++) #endif + seq_printf(p, "%10u ", kstat.irqs[j][regnr][irq_no]); + seq_printf(p, " %14s", region->data.name ? region->data.name : "N/A"); #ifndef PARISC_IRQ_CR16_COUNTS @@ -243,12 +246,12 @@ int show_interrupts(struct seq_file *p, void *v) seq_printf(p, ", %s", action->name); #else for ( ;action; action = action->next) { - unsigned int i, avg, min, max; + unsigned int k, avg, min, max; min = max = action->cr16_hist[0]; - for (avg = i = 0; i < PARISC_CR16_HIST_SIZE; i++) { - int hist = action->cr16_hist[i]; + for (avg = k = 0; k < PARISC_CR16_HIST_SIZE; k++) { + int hist = action->cr16_hist[k]; if (hist) { avg += hist; @@ -259,7 +262,7 @@ int show_interrupts(struct seq_file *p, void *v) if (hist < min) min = hist; } - avg /= i; + avg /= k; seq_printf(p, " %s[%d/%d/%d]", action->name, min,avg,max); } @@ -292,7 +295,7 @@ txn_alloc_irq(void) /* never return irq 0 cause that's the interval timer */ for (irq = 1; irq <= MAX_CPU_IRQ; irq++) { - if (cpu_irq_region.action[irq].handler == NULL) { + if (cpu_irq_actions[irq].handler == NULL) { return (IRQ_FROM_REGION(CPU_IRQ_REGION) + irq); } } @@ -314,14 +317,18 @@ txn_claim_irq(int irq) unsigned long txn_alloc_addr(int virt_irq) { - struct cpuinfo_parisc *dev = (struct cpuinfo_parisc *) (irq_region[IRQ_REGION(virt_irq)]->data.dev); + static int next_cpu = -1; - if (!dev) { - printk(KERN_ERR "txn_alloc_addr(0x%x): CPU IRQ region? dev %p\n", - virt_irq,dev); - return 0; - } - return (dev->txn_addr); + next_cpu++; /* assign to "next" CPU we want this bugger on */ + + /* validate entry */ + while ((next_cpu < NR_CPUS) && !cpu_data[next_cpu].txn_addr) + next_cpu++; + + if (next_cpu >= NR_CPUS) + next_cpu = 0; /* nothing else, assign monarch */ + + return cpu_data[next_cpu].txn_addr; } @@ -365,7 +372,7 @@ void do_irq(struct irqaction *action, int irq, struct pt_regs * regs) int cpu = smp_processor_id(); irq_enter(); - ++kstat.irqs[IRQ_REGION(irq)][IRQ_OFFSET(irq)]; + ++kstat.irqs[cpu][IRQ_REGION(irq)][IRQ_OFFSET(irq)]; DBG_IRQ(irq, ("do_irq(%d) %d+%d\n", irq, IRQ_REGION(irq), IRQ_OFFSET(irq))); @@ -407,7 +414,7 @@ void do_irq(struct irqaction *action, int irq, struct pt_regs * regs) /* ONLY called from entry.S:intr_extint() */ -void do_cpu_irq_mask(struct irq_region *region, struct pt_regs *regs) +void do_cpu_irq_mask(struct pt_regs *regs) { unsigned long eirr_val; unsigned int i=3; /* limit time in interrupt context */ @@ -431,7 +438,7 @@ void do_cpu_irq_mask(struct irq_region *region, struct pt_regs *regs) */ while ((eirr_val = (mfctl(23) & cpu_eiem)) && --i) { unsigned long bit = (1UL<<MAX_CPU_IRQ); - unsigned int irq = 0; + unsigned int irq; mtctl(eirr_val, 23); /* reset bits we are going to process */ @@ -440,17 +447,16 @@ void do_cpu_irq_mask(struct irq_region *region, struct pt_regs *regs) printk(KERN_DEBUG "do_cpu_irq_mask %x\n", eirr_val); #endif - for (; eirr_val && bit; bit>>=1, irq++) + /* Work our way from MSb to LSb...same order we alloc EIRs */ + for (irq = 0; eirr_val && bit; bit>>=1, irq++) { - unsigned int irq_num; - if (!(bit&eirr_val)) + if (!(bit & eirr_val & cpu_eiem)) continue; /* clear bit in mask - can exit loop sooner */ eirr_val &= ~bit; - irq_num = region->data.irqbase + irq; - do_irq(®ion->action[irq], irq_num, regs); + do_irq(&cpu_irq_actions[irq], TIMER_IRQ+irq, regs); } } set_eiem(cpu_eiem); @@ -675,6 +681,14 @@ void free_irq(unsigned int irq, void *dev_id) } +#ifdef CONFIG_SMP +void synchronize_irq(unsigned int irqnum) +{ + while (in_irq()) ; +} +#endif + + /* * IRQ autodetection code.. * diff --git a/arch/parisc/kernel/pa7300lc.c b/arch/parisc/kernel/pa7300lc.c index 1589e45e5339..8a89780223aa 100644 --- a/arch/parisc/kernel/pa7300lc.c +++ b/arch/parisc/kernel/pa7300lc.c @@ -7,7 +7,7 @@ #include <linux/sched.h> #include <linux/smp.h> #include <linux/kernel.h> -#include <asm/gsc.h> +#include <asm/io.h> #include <asm/ptrace.h> #include <asm/machdep.h> diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c index c67403af8741..0ecefe2de0ec 100644 --- a/arch/parisc/kernel/parisc_ksyms.c +++ b/arch/parisc/kernel/parisc_ksyms.c @@ -79,13 +79,9 @@ extern int $global$; EXPORT_SYMBOL_NOVERS($global$); #endif -#include <asm/gsc.h> EXPORT_SYMBOL(register_parisc_driver); EXPORT_SYMBOL(unregister_parisc_driver); EXPORT_SYMBOL(pdc_iodc_read); -#ifdef CONFIG_GSC -EXPORT_SYMBOL(gsc_alloc_irq); -#endif #include <asm/io.h> EXPORT_SYMBOL(__ioremap); diff --git a/arch/parisc/kernel/perf.c b/arch/parisc/kernel/perf.c index 0c1c6472d592..5c7974ba4c13 100644 --- a/arch/parisc/kernel/perf.c +++ b/arch/parisc/kernel/perf.c @@ -49,11 +49,11 @@ #include <linux/miscdevice.h> #include <linux/spinlock.h> -#include <asm/gsc.h> #include <asm/uaccess.h> #include <asm/perf.h> #include <asm/processor.h> #include <asm/runway.h> +#include <asm/io.h> /* for __raw_read() */ #include "perf_images.h" diff --git a/arch/parisc/kernel/process.c b/arch/parisc/kernel/process.c index ce28318e6585..debb93484932 100644 --- a/arch/parisc/kernel/process.c +++ b/arch/parisc/kernel/process.c @@ -35,7 +35,6 @@ #include <asm/pgalloc.h> #include <asm/system.h> #include <asm/io.h> -#include <asm/gsc.h> #include <asm/processor.h> #include <asm/pdc_chassis.h> diff --git a/arch/parisc/kernel/processor.c b/arch/parisc/kernel/processor.c index 254a08252665..187041ac52ca 100644 --- a/arch/parisc/kernel/processor.c +++ b/arch/parisc/kernel/processor.c @@ -167,12 +167,24 @@ static int __init processor_probe(struct parisc_device *dev) ** p->state = STATE_RENDEZVOUS; */ - /* - ** itimer and ipi IRQ handlers are statically initialized in - ** arch/parisc/kernel/irq.c. ie Don't need to register them. - */ - p->region = irq_region[IRQ_FROM_REGION(CPU_IRQ_REGION)]; +#if 0 + /* CPU 0 IRQ table is statically allocated/initialized */ + if (cpuid) { + struct irqaction actions[]; + + /* + ** itimer and ipi IRQ handlers are statically initialized in + ** arch/parisc/kernel/irq.c. ie Don't need to register them. + */ + actions = kmalloc(sizeof(struct irqaction)*MAX_CPU_IRQ, GFP_ATOMIC); + if (!actions) { + /* not getting it's own table, share with monarch */ + actions = cpu_irq_actions[0]; + } + cpu_irq_actions[cpuid] = actions; + } +#endif return 0; } diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 7cc6d207a39e..a875149597a0 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -15,6 +15,7 @@ #include <linux/ptrace.h> #include <linux/user.h> #include <linux/personality.h> +#include <linux/security.h> #include <asm/uaccess.h> #include <asm/pgtable.h> @@ -101,6 +102,11 @@ long sys_ptrace(long request, pid_t pid, long addr, long data) /* are we already being traced? */ if (current->ptrace & PT_PTRACED) goto out; + + ret = security_ops->ptrace(current->parent, current); + if (ret) + goto out; + /* set the ptrace bit in the process flags. */ current->ptrace |= PT_PTRACED; ret = 0; diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 6ac6d2414bbc..b83a798ea1e9 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c @@ -143,10 +143,8 @@ void __init setup_arch(char **cmdline_p) dma_ops_init(); #endif -#ifdef CONFIG_VT -# if defined(CONFIG_STI_CONSOLE) || defined(CONFIG_DUMMY_CONSOLE) +#ifdef CONFIG_DUMMY_CONSOLE conswitchp = &dummy_con; /* we use take_over_console() later ! */ -# endif #endif } diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c index c89bcc79b607..a94fefc9991d 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c @@ -147,6 +147,40 @@ long sys_shmat_wrapper(int shmid, char *shmaddr, int shmflag) } +/* Fucking broken ABI */ + +extern asmlinkage long sys_truncate64(const char *, loff_t); +extern asmlinkage long sys_ftruncate64(unsigned int, loff_t); +extern asmlinkage ssize_t sys_pread64(unsigned int fd, char *buf, + size_t count, loff_t pos); +extern asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char *buf, + size_t count, loff_t pos); + +asmlinkage long parisc_truncate64(const char * path, + unsigned int high, unsigned int low) +{ + return sys_truncate(path, (loff_t)high << 32 | low); +} + +asmlinkage long parisc_ftruncate64(unsigned int fd, + unsigned int high, unsigned int low) +{ + return sys_ftruncate(fd, (loff_t)high << 32 | low); +} + +asmlinkage ssize_t parisc_pread64(unsigned int fd, char *buf, size_t count, + unsigned int high, unsigned int low) +{ + return sys_pread64(fd, buf, count, (loff_t)high << 32 | low); +} + +asmlinkage ssize_t parisc_pwrite64(unsigned int fd, const char *buf, + size_t count, unsigned int high, unsigned int low) +{ + return sys_pwrite64(fd, buf, count, (loff_t)high << 32 | low); +} + + /* * FIXME, please remove this crap as soon as possible * diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index 588fc0d854be..4847d9f2b162 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c @@ -2743,20 +2743,8 @@ asmlinkage long sys32_msgrcv(int msqid, /* LFS */ -extern asmlinkage long sys_truncate(const char *, loff_t); -extern asmlinkage long sys_ftruncate(unsigned int, loff_t); extern asmlinkage long sys_fcntl(unsigned int, unsigned int, unsigned long); -asmlinkage long sys32_truncate64(const char * path, unsigned int high, unsigned int low) -{ - return sys_truncate(path, (loff_t)high << 32 | low); -} - -asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned int high, unsigned int low) -{ - return sys_ftruncate(fd, (loff_t)high << 32 | low); -} - asmlinkage long sys32_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) { switch (cmd) { diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S index 92356a7b63fa..742ea4a842eb 100644 --- a/arch/parisc/kernel/syscall.S +++ b/arch/parisc/kernel/syscall.S @@ -331,10 +331,12 @@ tracesys_sigexit: #define ENTRY_SAME(_name_) .dword sys_##_name_ #define ENTRY_DIFF(_name_) .dword sys32_##_name_ #define ENTRY_UHOH(_name_) .dword sys32_##unimplemented +#define ENTRY_OURS(_name_) .dword parisc_##_name_ #else #define ENTRY_SAME(_name_) .word sys_##_name_ #define ENTRY_DIFF(_name_) .word sys_##_name_ #define ENTRY_UHOH(_name_) .word sys_##_name_ +#define ENTRY_OURS(_name_) .word parisc_##_name_ #endif .align 8 @@ -398,7 +400,7 @@ sys_call_table: /* struct sockaddr... */ ENTRY_SAME(getsockname) /* it seems possible brk() could return a >4G pointer... */ - ENTRY_SAME(brk) /* 45 */ + ENTRY_SAME(brk) /* 45 */ ENTRY_SAME(setgid) ENTRY_SAME(getgid) ENTRY_SAME(signal) @@ -476,8 +478,8 @@ sys_call_table: ENTRY_DIFF(getitimer) /* 105 */ ENTRY_SAME(capget) ENTRY_SAME(capset) - ENTRY_SAME(pread64) - ENTRY_SAME(pwrite64) + ENTRY_OURS(pread64) + ENTRY_OURS(pwrite64) ENTRY_SAME(getcwd) /* 110 */ ENTRY_SAME(vhangup) ENTRY_SAME(fstat64) @@ -592,18 +594,18 @@ sys_call_table: ENTRY_SAME(shmat_wrapper) ENTRY_SAME(shmdt) ENTRY_SAME(shmget) - ENTRY_SAME(shmctl_broken) /* 195 */ + ENTRY_SAME(shmctl_broken) /* 195 */ ENTRY_SAME(ni_syscall) /* streams1 */ ENTRY_SAME(ni_syscall) /* streams2 */ ENTRY_SAME(lstat64) - ENTRY_DIFF(truncate64) - ENTRY_DIFF(ftruncate64) /* 200 */ + ENTRY_OURS(truncate64) + ENTRY_OURS(ftruncate64) /* 200 */ ENTRY_SAME(getdents64) ENTRY_DIFF(fcntl64) #ifdef CONFIG_XFS_FS ENTRY_SAME(attrctl) ENTRY_SAME(acl_get) - ENTRY_SAME(acl_set) /* 205 */ + ENTRY_SAME(acl_set) /* 205 */ #else ENTRY_SAME(ni_syscall) ENTRY_SAME(ni_syscall) diff --git a/arch/parisc/lib/Makefile b/arch/parisc/lib/Makefile index d4f8d5a0a089..e89a845ae549 100644 --- a/arch/parisc/lib/Makefile +++ b/arch/parisc/lib/Makefile @@ -1,9 +1,5 @@ # -# Makefile for parisc-specific library files.. +# Makefile for parisc-specific library files # - -L_TARGET = lib.a obj-y := lusercopy.o bitops.o checksum.o io.o memset.o - -include $(TOPDIR)/Rules.make diff --git a/arch/parisc/math-emu/Makefile b/arch/parisc/math-emu/Makefile index 8f9fb07577e2..1755d661c3f6 100644 --- a/arch/parisc/math-emu/Makefile +++ b/arch/parisc/math-emu/Makefile @@ -1,11 +1,6 @@ # # Makefile for the linux/parisc floating point code # -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... obj-y := frnd.o driver.o decode_exc.o fpudispatch.o denormal.o \ dfmpy.o sfmpy.o sfsqrt.o dfsqrt.o dfadd.o fmpyfadd.o \ @@ -16,6 +11,4 @@ obj-y := frnd.o driver.o decode_exc.o fpudispatch.o denormal.o \ # Math emulation code beyond the FRND is required for 712/80i and # other very old or stripped-down PA-RISC CPUs -- not currently supported -obj-$CONFIG_MATH_EMULATION += unimplemented-math-emulation.o - -include $(TOPDIR)/Rules.make +obj-$(CONFIG_MATH_EMULATION) += unimplemented-math-emulation.o diff --git a/arch/parisc/mm/Makefile b/arch/parisc/mm/Makefile index 31af42faeb9e..7d071aac8c17 100644 --- a/arch/parisc/mm/Makefile +++ b/arch/parisc/mm/Makefile @@ -1,7 +1,5 @@ # -# Makefile for the linux parisc-specific parts of the memory manager. +# Makefile for arch/parisc/mm # obj-y := init.o fault.o extable.o ioremap.o - -include $(TOPDIR)/Rules.make diff --git a/drivers/net/lasi_82596.c b/drivers/net/lasi_82596.c index 49ffd443e6c5..1c0ec4b8b5b7 100644 --- a/drivers/net/lasi_82596.c +++ b/drivers/net/lasi_82596.c @@ -93,7 +93,6 @@ #include <asm/irq.h> #include <asm/pdc.h> -#include <asm/gsc.h> #include <asm/cache.h> static char version[] __devinitdata = diff --git a/include/asm-parisc/dma.h b/include/asm-parisc/dma.h index d51c41b53d78..b087f5596ec2 100644 --- a/include/asm-parisc/dma.h +++ b/include/asm-parisc/dma.h @@ -1,4 +1,4 @@ -/* $Id: dma.h,v 1.1 2002/07/20 15:52:25 rhirst Exp $ +/* $Id: dma.h,v 1.2 1999/04/27 00:46:18 deller Exp $ * linux/include/asm/dma.h: Defines for using and allocating dma channels. * Written by Hennus Bergman, 1992. * High DMA channel support & info by Hannu Savolainen @@ -177,11 +177,7 @@ static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count) } - -/* These are in kernel/dma.c: */ -extern int request_dma(unsigned int dmanr, const char * device_id); /* reserve a DMA channel */ -extern void free_dma(unsigned int dmanr); /* release it again */ -extern int get_dma_list(char *buf); /* proc/dma support */ +#define free_dma(dmanr) #ifdef CONFIG_PCI extern int isa_dma_bridge_buggy; diff --git a/include/asm-parisc/gsc.h b/include/asm-parisc/gsc.h deleted file mode 100644 index 6ec113942029..000000000000 --- a/include/asm-parisc/gsc.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef ASM_PARISC_GSC_H -#define ASM_PARISC_GSC_H -#ifdef __KERNEL__ - -#include <linux/types.h> -#include <asm/io.h> /* temporary for __raw_{read,write} */ - -/* Please, call ioremap and use {read,write}[bwl] instead. These functions - * are not very fast. - */ -#define gsc_readb(x) __raw_readb((unsigned long)x) -#define gsc_readw(x) __raw_readw((unsigned long)x) -#define gsc_readl(x) __raw_readl((unsigned long)x) -#define gsc_writeb(x, y) __raw_writeb(x, (unsigned long)y) -#define gsc_writew(x, y) __raw_writew(x, (unsigned long)y) -#define gsc_writel(x, y) __raw_writel(x, (unsigned long)y) - -struct gsc_irq { - unsigned long txn_addr; /* IRQ "target" */ - int txn_data; /* HW "IRQ" */ - int irq; /* virtual IRQ */ -}; - -/* PA I/O Architected devices support at least 5 bits in the EIM register. */ -#define GSC_EIM_WIDTH 5 - -extern int gsc_alloc_irq(struct gsc_irq *dev); /* dev needs an irq */ -extern int gsc_claim_irq(struct gsc_irq *dev, int irq); /* dev needs this irq */ - -#endif /* __KERNEL__ */ -#endif /* LINUX_GSC_H */ diff --git a/include/asm-parisc/io.h b/include/asm-parisc/io.h index 636800b28473..ea211e3b77b6 100644 --- a/include/asm-parisc/io.h +++ b/include/asm-parisc/io.h @@ -182,6 +182,18 @@ extern void memset_io(unsigned long dest, char fill, int count); #define isa_memcpy_fromio(a,b,c) memcpy_fromio((a), EISA_BASE | (b), (c)) #define isa_memcpy_toio(a,b,c) memcpy_toio(EISA_BASE | (a), (b), (c)) +/* + * These functions support PA-RISC drivers which don't yet call ioremap(). + * They will disappear once the last of these drivers is gone. + */ +#define gsc_readb(x) __raw_readb((unsigned long)x) +#define gsc_readw(x) __raw_readw((unsigned long)x) +#define gsc_readl(x) __raw_readl((unsigned long)x) +#define gsc_writeb(x, y) __raw_writeb(x, (unsigned long)y) +#define gsc_writew(x, y) __raw_writew(x, (unsigned long)y) +#define gsc_writel(x, y) __raw_writel(x, (unsigned long)y) + + /* * XXX - We don't have csum_partial_copy_fromio() yet, so we cheat here and * just copy it. The net code will then do the checksum later. Presently diff --git a/include/asm-parisc/poll.h b/include/asm-parisc/poll.h index 55ebfcc44aae..1c1da86934cf 100644 --- a/include/asm-parisc/poll.h +++ b/include/asm-parisc/poll.h @@ -15,6 +15,7 @@ #define POLLWRNORM 0x0100 #define POLLWRBAND 0x0200 #define POLLMSG 0x0400 +#define POLLREMOVE 0x1000 struct pollfd { int fd; diff --git a/include/asm-parisc/processor.h b/include/asm-parisc/processor.h index c69b744b1576..a3cab768a4f0 100644 --- a/include/asm-parisc/processor.h +++ b/include/asm-parisc/processor.h @@ -73,10 +73,8 @@ struct system_cpuinfo_parisc { ** Per CPU data structure - ie varies per CPU. */ struct cpuinfo_parisc { - - struct irq_region *region; - unsigned long it_value; /* Interval Timer value at last timer Intr */ - unsigned long it_delta; /* Interval Timer delta (tic_10ms / HZ * 100) */ + unsigned long it_value; /* Interval Timer at last timer Intr */ + unsigned long it_delta; /* Interval delta (tic_10ms / HZ * 100) */ unsigned long irq_count; /* number of IRQ's since boot */ unsigned long irq_max_cr16; /* longest time to handle a single IRQ */ unsigned long cpuid; /* aka slot_number or set to NO_PROC_ID */ |
