|
|
1.1 root 1: /* vmclust.h 4.1 11/9/80 */
2:
3: /*
4: * Page clustering macros.
5: *
6: * dirtycl(pte) is the page cluster dirty?
7: * anycl(pte,fld) does any pte in the cluster has fld set?
8: * zapcl(pte,fld) = val set all fields fld in the cluster to val
9: * distcl(pte) distribute high bits to cluster; note that
10: * distcl copies everything but pg_pfnum,
11: * INCLUDING pg_m!!!
12: *
13: * In all cases, pte must be the low pte in the cluster, even if
14: * the segment grows backwards (e.g. the stack).
15: */
16: #define H(pte) ((struct hpte *)(pte))
17:
18: #if CLSIZE==1
19: #define dirtycl(pte) dirty(pte)
20: #define anycl(pte,fld) ((pte)->fld)
21: #define zapcl(pte,fld) (pte)->fld
22: #define distcl(pte)
23: #endif
24:
25: #if CLSIZE==2
26: #define dirtycl(pte) (dirty(pte) || dirty((pte)+1))
27: #define anycl(pte,fld) ((pte)->fld || (((pte)+1)->fld))
28: #define zapcl(pte,fld) (pte)[1].fld = (pte)[0].fld
29: #endif
30:
31: #if CLSIZE==4
32: #define dirtycl(pte) \
33: (dirty(pte) || dirty((pte)+1) || dirty((pte)+2) || dirty((pte)+3))
34: #define anycl(pte,fld) \
35: ((pte)->fld || (((pte)+1)->fld) || (((pte)+2)->fld) || (((pte)+3)->fld))
36: #define zapcl(pte,fld) \
37: (pte)[3].fld = (pte)[2].fld = (pte)[1].fld = (pte)[0].fld
38: #endif
39:
40: #ifndef distcl
41: #define distcl(pte) zapcl(H(pte),pg_high)
42: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.