Print this page
use NULL dump segop as a shorthand for no-op
Instead of forcing every segment driver to implement a dummy function that
does nothing, handle NULL dump segop function pointer as a no-op shorthand.
const-ify make segment ops structures
There is no reason to keep the segment ops structures writable.
use NULL setpagesize segop as a shorthand for ENOTSUP
Instead of forcing every segment driver to implement a dummp function to
return (hopefully) ENOTSUP, handle NULL setpagesize segop function pointer
as "return ENOTSUP" shorthand.
use NULL capable segop as a shorthand for no-capabilities
Instead of forcing every segment driver to implement a dummy "return 0"
function, handle NULL capable segop function pointer as "no copabilities
supported" shorthand.
segop_getpolicy already checks for a NULL op
seg_inherit_notsup is redundant since segop_inherit checks for NULL properly
use C99 initializers in segment ops structures
remove whole-process swapping
Long before Unix supported paging, it used process swapping to reclaim
memory. The code is there and in theory it runs when we get *extremely* low
on memory. In practice, it never runs since the definition of low-on-memory
is antiquated. (XXX: define what antiquated means)
You can check the number of swapout/swapin events with kstats:
$ kstat -p ::vm:swapin ::vm:swapout
@@ -97,11 +97,11 @@
size_t softlockcnt;
domid_t domid;
segmf_map_t *map;
};
-static struct seg_ops segmf_ops;
+static const struct seg_ops segmf_ops;
static int segmf_fault_gref_range(struct seg *seg, caddr_t addr, size_t len);
static struct segmf_data *
segmf_data_zalloc(struct seg *seg)
@@ -468,53 +468,27 @@
{
return (0);
}
/*ARGSUSED*/
-static void
-segmf_dump(struct seg *seg)
-{}
-
-/*ARGSUSED*/
static int
segmf_pagelock(struct seg *seg, caddr_t addr, size_t len,
struct page ***ppp, enum lock_type type, enum seg_rw rw)
{
return (ENOTSUP);
}
-/*ARGSUSED*/
-static int
-segmf_setpagesize(struct seg *seg, caddr_t addr, size_t len, uint_t szc)
-{
- return (ENOTSUP);
-}
-
static int
segmf_getmemid(struct seg *seg, caddr_t addr, memid_t *memid)
{
struct segmf_data *data = seg->s_data;
memid->val[0] = (uintptr_t)VTOCVP(data->vp);
memid->val[1] = (uintptr_t)seg_page(seg, addr);
return (0);
}
-/*ARGSUSED*/
-static lgrp_mem_policy_info_t *
-segmf_getpolicy(struct seg *seg, caddr_t addr)
-{
- return (NULL);
-}
-
-/*ARGSUSED*/
-static int
-segmf_capable(struct seg *seg, segcapability_t capability)
-{
- return (0);
-}
-
/*
* Add a set of contiguous foreign MFNs to the segment. soft-locking them. The
* pre-faulting is necessary due to live migration; in particular we must
* return an error in response to IOCTL_PRIVCMD_MMAPBATCH rather than faulting
* later on a bad MFN. Whilst this isn't necessary for the other MMAP
@@ -755,31 +729,25 @@
}
return (0);
}
-static struct seg_ops segmf_ops = {
- segmf_dup,
- segmf_unmap,
- segmf_free,
- segmf_fault,
- segmf_faulta,
- segmf_setprot,
- segmf_checkprot,
- (int (*)())segmf_kluster,
- (size_t (*)(struct seg *))NULL, /* swapout */
- segmf_sync,
- segmf_incore,
- segmf_lockop,
- segmf_getprot,
- segmf_getoffset,
- segmf_gettype,
- segmf_getvp,
- segmf_advise,
- segmf_dump,
- segmf_pagelock,
- segmf_setpagesize,
- segmf_getmemid,
- segmf_getpolicy,
- segmf_capable,
- seg_inherit_notsup
+static const struct seg_ops segmf_ops = {
+ .dup = segmf_dup,
+ .unmap = segmf_unmap,
+ .free = segmf_free,
+ .fault = segmf_fault,
+ .faulta = segmf_faulta,
+ .setprot = segmf_setprot,
+ .checkprot = segmf_checkprot,
+ .kluster = segmf_kluster,
+ .sync = segmf_sync,
+ .incore = segmf_incore,
+ .lockop = segmf_lockop,
+ .getprot = segmf_getprot,
+ .getoffset = segmf_getoffset,
+ .gettype = segmf_gettype,
+ .getvp = segmf_getvp,
+ .advise = segmf_advise,
+ .pagelock = segmf_pagelock,
+ .getmemid = segmf_getmemid,
};