Commit Graph

425 Commits

Author SHA1 Message Date
ragge
0513268399 CL* discarding. 1999-12-04 21:13:19 +00:00
thorpej
08d1d1b378 Actually, the 2100_A500 has 64 interrupts, not 16. 1999-12-04 00:22:54 +00:00
lukem
a63bfb3c6a add atomic.h (missed by thorpej; approved by thorpej) 1999-12-04 00:18:15 +00:00
thorpej
5d0a62da53 Remove now-obsolete atomic operations. 1999-12-03 01:13:17 +00:00
thorpej
2a97466824 Rewrite the atomic locking primitives using in-line assembly. 1999-12-03 01:11:34 +00:00
thorpej
9f7d189f05 Inline most of the remaining PALcode calls. 1999-12-02 22:08:04 +00:00
thorpej
0a2ea99c42 Inline the BWX instructions. 1999-12-02 19:41:39 +00:00
thorpej
4106b60175 Move atomic operations into <machine/atomic.h>, and make them in-line
assembly, rather than function calls.

...except alpha_atomic_testset_l(), which will go away completely once
I commit the new <machine/lock.h>.
1999-12-02 01:09:11 +00:00
thorpej
c258dfae2f After reading the GCC `documentation' a little more, improve the inline
__asm() statements added previously for PALcode operations.
1999-12-01 18:23:11 +00:00
thorpej
89ae0bf93c Inline several things from pal.s:
- alpha_rpcc(), alpha_mb(), alpha_wmb() -- these are instructions, and
  we win by inlining them: rpcc is generally used for profiling, and
  the memory barriers really should execute as quickly as possible with
  minimal side-effects (like additional loads/stores required to call the
  functions!)
- alpha_pal_imb(), alpha_pal_rdps(), alpha_pal_swpipl(), alpha_pal_tbi(),
  alpha_pal_whami() -- these are PALcode ops.  We must specify some register
  clobbers for these.

We have a very decent size savings as a result.  My test system:
text    data    bss     dec     hex     filename
2671724 235848  377016  3284588 321e6c  /netbsd.bak
2617708 235736  377016  3230460 314afc  /netbsd

Most of this comes from fewer register saves/restores around spl*() calls
(now that alpha_pal_rdps() and alpha_pal_swpipl() are inlined).

Note that alpha_pal_rdps() and alpha_pal_swpipl() remain in pal.s to
maintain binary compatibility with LKMs that may use spl*() functions.
1999-11-30 00:42:46 +00:00
thorpej
df2cf70865 - Fix a botch in the IPI bitmasks (they were right-shifted by 1), and
add an IPI which causes the target CPU to perform AST processing when
  it returns to userspace.
- Add a way to get/set a private pointer in the shared interrupt header.
1999-11-29 19:58:39 +00:00
thorpej
94552ad5d6 - Use alpha_atomic_{add,sub}_q() to update the pmap statistics. We now no
longer need to lock the kernel pmap in pmap_kenter_pa() and pmap_kremove().
- Since locking the kernel pmap in interrupt context is no longer required,
  don't go to splimp() when locking the kernel pmap.
- Implement a new pmap_remove() function, not yet enabled by default.  It
  is structured like pmap_protect, and should be *much* faster.  This was
  actually written quite some time ago, but never committed because it
  didn't work properly.  Given the recent bugfix to pmap_protect(), "duh,
  of course it didn't work properly before...".  It seems to work fine now
  (have done several builds and run the UVM regression tests using the new
  code), but it is currently run-time optional so that some performance
  measurements can be easily run against the old and new code.
1999-11-28 19:53:11 +00:00
thorpej
1710fad449 Implement atomic addition and subtraction on quadwords. 1999-11-28 19:47:13 +00:00
kleink
522cbf0248 Update to match new SVR4-style definition names in <sys/exec_elf.h>. 1999-10-25 13:55:06 +00:00
thorpej
11cae42531 Centralize the declaration and clearing of `cold'. 1999-09-17 19:59:35 +00:00
ross
f468c5f199 This is required by libsa/loadfile.c. 1999-09-10 07:33:57 +00:00
simonb
3c185af5fd Include <sys/endian.h> after defining whether where are little- or
big-endian.  i386, pc532 and vax still include <machine/byte_swap.h>
and define macros for the {n,h}to{h,n}*() functions.  mips also
defines some endian-independent assembly-code aliases for unaligned
memory accesses.
1999-08-21 05:53:50 +00:00
simonb
06a92524c2 Include <sys/bswap.h> for function prototypes. i386, pc532 and vax
still include <machine/byte_swap.h> and define macros for some of
the bswap*() functions.
1999-08-21 05:39:51 +00:00
thorpej
95755c54bb Pull in <machine/alpha_cpu.h>. 1999-08-16 06:24:07 +00:00
thorpej
f06d918d30 Protect userland from the vast majority of this file. 1999-08-15 18:32:51 +00:00
thorpej
6be04b7f5c Move cpu_info and related info into <machine/cpu.h>, and implement the
other MP API components discussed on tech-smp.
1999-08-10 23:35:43 +00:00
thorpej
28fb7c1eb8 Define cpu_number() as discussed on tech-smp. 1999-08-10 21:08:05 +00:00
thorpej
b701be7c86 Use atomic operations to manipulate the SSIR, and fix a problem introduced
with the spllowersoftclock() changes where more interrupts than necessary
were blocked while software interrupts were being processed.
1999-08-10 18:53:03 +00:00
thorpej
eb20bbc780 Change the semantics of splsoftclock() to be like other spl*() functions,
that is priority is rasied.  Add a new spllowersoftclock() to provide the
atomic drop-to-softclock semantics that the old splsoftclock() provided,
and update calls accordingly.

This fixes a problem with using the "rnd" pseudo-device from within
interrupt context to extract random data (e.g. from within the softnet
interrupt) where doing so would incorrectly unblock interrupts (causing
all sorts of lossage).

XXX 4 platforms do not have priority-raising capability: newsmips, sparc,
XXX sparc64, and VAX.  This platforms still have this bug until their
XXX spl*() functions are fixed.
1999-08-05 18:08:08 +00:00
thorpej
c1ee8f0a8c Prepend `cpu_' to the machine-dependent atomic locking primitivies. 1999-07-27 21:45:39 +00:00
ross
a8000e244c New signature for console_restart(). 1999-07-11 22:39:21 +00:00
ross
cf1ca54803 Minor Tsunami-related changes. 1999-06-29 07:22:25 +00:00
ross
10f1f2d81f Prototype dot_conv(), new routine in machdep.c that formats an alpha
long like this: e081.8000.8000.0004
1999-06-29 07:18:23 +00:00
cgd
7c02d93c04 nuke current definitions provided by __BUS_SPACE_COMPAT_OLDDEFS.
I'll do what I can to make new ones soon.  8-)
1999-06-18 04:49:24 +00:00
thorpej
5dec34efed The kernel pmap can be accessed (and locked!) while in an interrupt
context, so we must block interrupts which may cause memory allocation
before asserting the kernel pmap's lock.  Put this all in PMAP_LOCK()
and PMAP_UNLOCK() macros to make it easier.
1999-05-24 20:11:58 +00:00
thorpej
c1eb28c237 Make the list of all pmaps LRU-ordered, and update a comment regarding
locking.
1999-05-23 22:37:02 +00:00
thorpej
2102d5a17e Save ourselves some work in some pv list traversal functions; keep a pointer
to the PTE that maps the page in the pv_entry so that we don't have to
compute it from the pmap/va.
1999-05-23 17:49:07 +00:00
thorpej
66324de865 Use the pool allocator for pv_entry structures. Set a (patchable/config'able)
low water mark on the pool, so we have some chance of crawling along in
extreme memory shortages.
1999-05-21 23:07:59 +00:00
christos
c596c324e3 Define __builtin_*() for lint 1999-05-03 16:30:31 +00:00
ross
c5a82dd848 * New MI man page for fp{set,get}{round,sticky,mask}(3).
* Implement fpgetsticky() for alpha.
* Direct fpsetsticky() and fp{get,set}mask() into alpha kernel via sysarch(2).
* Define new sysarch(2) stub for above and install and distribute sysarch.h
for alpha.  (The fpcr IS user mode r/w, but for reasons beyond the scope
of a commit message kernel calls are needed.) And much kernel Magick is
required before these do anything, but this way programs compiled under
1.4 will DTRT on future snapshots and releases.
1999-04-30 00:58:30 +00:00
ross
0847df9065 #ifdef _KERNEL, define the machine FPCR bits and a rounding mode macro 1999-04-29 02:55:50 +00:00
cgd
6f2f5becb6 Alpha ECOFF object type definitions 1999-04-27 02:32:33 +00:00
ross
f868468aaa Never used, and work-in-progress uses a different header. 1999-04-25 20:15:06 +00:00
thorpej
f7b0fea081 After reviewing the Green Book, BPT traps do indeed leave the PC pointing
to the instruction _after_ the `call_pal bpt' instruction.
1999-04-20 21:30:15 +00:00
thorpej
375b3fa699 Prototype alpha_debug(), and add some definitions for KGDB. 1999-04-20 21:23:56 +00:00
thorpej
62d09f4f93 Move the inclusion of <machine/bus.h> to within a _KERNEL section. 1999-04-20 21:23:09 +00:00
drochner
7694cc18a5 wsconsio.h is gone 1999-04-17 13:00:04 +00:00
ross
74de38f9a9 Really say goodbye to old wscons. 1999-04-16 07:24:13 +00:00
thorpej
9a4a0a3c81 DEC_KN300 no longer uses PROM console. 1999-04-15 22:15:38 +00:00
thorpej
e8e6061642 Slight braino in previous. 1999-04-14 23:55:35 +00:00
thorpej
25a0e78bf3 Add macros to decode the `turboslot' member of the Console Terminal Block. 1999-04-14 23:28:31 +00:00
thorpej
e468d4c8d9 Fix a bug in TBI optimization uncovered by the "access_type" changes. Thanks
to Bernd Ernesti for providing crash dumps to Charles Hannum who tracked
it down.
1999-04-09 00:38:10 +00:00
cgd
7a2f0695dd clean up slightly, do a little #define trick to make checksumming
the boot block a little easier/more 'clean', and provide a macro to
checksum the boot block.
1999-04-05 02:45:47 +00:00
cgd
5d472dba93 define 'struct boot_block' which is the alpha (SRM) boot block 1999-04-02 07:32:33 +00:00
thorpej
567cda0537 Don't bother allocating mb_map on these systems. Mbuf clusters are
allocated from a pool, and the MIPS and Alpha use KSEG to map pool
pages.  So, mb_map wasn't actually being used.  Saves around 4MB of
kernel virtual address space in a typical configuration.

Garbage-collect the related VM_MBUF_SIZE constant.
1999-03-26 00:15:04 +00:00