summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2018-10-18 19:04:30 +0300
committerDan McDonald <danmcd@joyent.com>2019-02-07 20:39:44 -0500
commite09cef950d257b6d3955013d461825bbc79322ef (patch)
tree6fbb01532c539563685299ce5590e0a1b8fe2ad0
parent5a80180135ef1464c88328124fbd15e94a5fb632 (diff)
downloadillumos-gate-e09cef950d257b6d3955013d461825bbc79322ef.tar.gz
10345 segspt_badop: cast between incompatible function types
Reviewed by: Andy Stormont <astormont@racktopsystems.com> Reviewed by: Gergő Mihály Doma <domag02@gmail.com> Approved by: Dan McDonald <danmcd@joyent.com>
-rw-r--r--usr/src/uts/common/vm/seg_spt.c254
1 files changed, 195 insertions, 59 deletions
diff --git a/usr/src/uts/common/vm/seg_spt.c b/usr/src/uts/common/vm/seg_spt.c
index cc00e16333..77d20d7e45 100644
--- a/usr/src/uts/common/vm/seg_spt.c
+++ b/usr/src/uts/common/vm/seg_spt.c
@@ -78,39 +78,175 @@ static void segspt_free(struct seg *seg);
static void segspt_free_pages(struct seg *seg, caddr_t addr, size_t len);
static lgrp_mem_policy_info_t *segspt_getpolicy(struct seg *seg, caddr_t addr);
-static void
-segspt_badop()
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_dup(struct seg *seg __unused, struct seg *newseg __unused)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static faultcode_t
+segspt_badop_fault(struct hat *hat, struct seg *seg, caddr_t addr,
+ size_t len, enum fault_type type, enum seg_rw rw)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static faultcode_t
+segspt_badop_faulta(struct seg *seg __unused, caddr_t addr __unused)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_prot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_checkprot(struct seg *seg, caddr_t addr, size_t size, uint_t prot)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_kluster(struct seg *seg, caddr_t addr, ssize_t delta)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static size_t
+segspt_badop_swapout(struct seg *seg)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_sync(struct seg *seg, caddr_t addr, size_t len, int attr,
+ uint_t flags)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN
+static size_t
+segspt_badop_incore(struct seg *seg, caddr_t addr, size_t len, char *vec)
{
- panic("segspt_badop called");
- /*NOTREACHED*/
+ panic("%s called", __func__);
}
-#define SEGSPT_BADOP(t) (t(*)())segspt_badop
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_lockop(struct seg *seg, caddr_t addr, size_t len, int attr,
+ int op, ulong_t *lockmap, size_t pos)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static u_offset_t
+segspt_badop_getoffset(struct seg *seg, caddr_t addr)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_gettype(struct seg *seg, caddr_t addr)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_advise(struct seg *seg, caddr_t addr, size_t len, uint_t behav)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static void
+segspt_badop_dump(struct seg *seg)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_pagelock(struct seg *seg, caddr_t addr, size_t len,
+ struct page ***ppp, enum lock_type type, enum seg_rw rw)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_setpgsz(struct seg *seg, caddr_t addr, size_t len, uint_t szc)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
+{
+ panic("%s called", __func__);
+}
+
+/* ARGSUSED */
+__NORETURN static int
+segspt_badop_capable(struct seg *seg, segcapability_t capability)
+{
+ panic("%s called", __func__);
+}
struct seg_ops segspt_ops = {
- SEGSPT_BADOP(int), /* dup */
+ segspt_badop_dup, /* dup */
segspt_unmap,
segspt_free,
- SEGSPT_BADOP(int), /* fault */
- SEGSPT_BADOP(faultcode_t), /* faulta */
- SEGSPT_BADOP(int), /* setprot */
- SEGSPT_BADOP(int), /* checkprot */
- SEGSPT_BADOP(int), /* kluster */
- SEGSPT_BADOP(size_t), /* swapout */
- SEGSPT_BADOP(int), /* sync */
- SEGSPT_BADOP(size_t), /* incore */
- SEGSPT_BADOP(int), /* lockop */
- SEGSPT_BADOP(int), /* getprot */
- SEGSPT_BADOP(u_offset_t), /* getoffset */
- SEGSPT_BADOP(int), /* gettype */
- SEGSPT_BADOP(int), /* getvp */
- SEGSPT_BADOP(int), /* advise */
- SEGSPT_BADOP(void), /* dump */
- SEGSPT_BADOP(int), /* pagelock */
- SEGSPT_BADOP(int), /* setpgsz */
- SEGSPT_BADOP(int), /* getmemid */
+ segspt_badop_fault, /* fault */
+ segspt_badop_faulta, /* faulta */
+ segspt_badop_prot, /* setprot */
+ segspt_badop_checkprot, /* checkprot */
+ segspt_badop_kluster, /* kluster */
+ segspt_badop_swapout, /* swapout */
+ segspt_badop_sync, /* sync */
+ segspt_badop_incore, /* incore */
+ segspt_badop_lockop, /* lockop */
+ segspt_badop_getprot, /* getprot */
+ segspt_badop_getoffset, /* getoffset */
+ segspt_badop_gettype, /* gettype */
+ segspt_badop_getvp, /* getvp */
+ segspt_badop_advise, /* advise */
+ segspt_badop_dump, /* dump */
+ segspt_badop_pagelock, /* pagelock */
+ segspt_badop_setpgsz, /* setpgsz */
+ segspt_badop_getmemid, /* getmemid */
segspt_getpolicy, /* getpolicy */
- SEGSPT_BADOP(int), /* capable */
+ segspt_badop_capable, /* capable */
seg_inherit_notsup /* inherit */
};
@@ -120,28 +256,28 @@ static void segspt_shmfree(struct seg *seg);
static faultcode_t segspt_shmfault(struct hat *hat, struct seg *seg,
caddr_t addr, size_t len, enum fault_type type, enum seg_rw rw);
static faultcode_t segspt_shmfaulta(struct seg *seg, caddr_t addr);
-static int segspt_shmsetprot(register struct seg *seg, register caddr_t addr,
- register size_t len, register uint_t prot);
+static int segspt_shmsetprot(struct seg *seg, caddr_t addr, size_t len,
+ uint_t prot);
static int segspt_shmcheckprot(struct seg *seg, caddr_t addr, size_t size,
- uint_t prot);
+ uint_t prot);
static int segspt_shmkluster(struct seg *seg, caddr_t addr, ssize_t delta);
static size_t segspt_shmswapout(struct seg *seg);
static size_t segspt_shmincore(struct seg *seg, caddr_t addr, size_t len,
- register char *vec);
-static int segspt_shmsync(struct seg *seg, register caddr_t addr, size_t len,
- int attr, uint_t flags);
+ char *vec);
+static int segspt_shmsync(struct seg *seg, caddr_t addr, size_t len,
+ int attr, uint_t flags);
static int segspt_shmlockop(struct seg *seg, caddr_t addr, size_t len,
- int attr, int op, ulong_t *lockmap, size_t pos);
+ int attr, int op, ulong_t *lockmap, size_t pos);
static int segspt_shmgetprot(struct seg *seg, caddr_t addr, size_t len,
- uint_t *protv);
+ uint_t *protv);
static u_offset_t segspt_shmgetoffset(struct seg *seg, caddr_t addr);
static int segspt_shmgettype(struct seg *seg, caddr_t addr);
static int segspt_shmgetvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
static int segspt_shmadvise(struct seg *seg, caddr_t addr, size_t len,
- uint_t behav);
+ uint_t behav);
static void segspt_shmdump(struct seg *seg);
static int segspt_shmpagelock(struct seg *, caddr_t, size_t,
- struct page ***, enum lock_type, enum seg_rw);
+ struct page ***, enum lock_type, enum seg_rw);
static int segspt_shmsetpgsz(struct seg *, caddr_t, size_t, uint_t);
static int segspt_shmgetmemid(struct seg *, caddr_t, memid_t *);
static lgrp_mem_policy_info_t *segspt_shmgetpolicy(struct seg *, caddr_t);
@@ -187,8 +323,8 @@ int
sptcreate(size_t size, struct seg **sptseg, struct anon_map *amp,
uint_t prot, uint_t flags, uint_t share_szc)
{
- int err;
- struct as *newas;
+ int err;
+ struct as *newas;
struct segspt_crargs sptcargs;
#ifdef DEBUG
@@ -301,9 +437,9 @@ segspt_shmincore(struct seg *seg, caddr_t addr, size_t len, char *vec)
struct anon_map *amp = shmd->shm_amp;
struct anon *ap;
page_t *pp;
- pgcnt_t anon_index;
- struct vnode *vp;
- u_offset_t off;
+ pgcnt_t anon_index;
+ struct vnode *vp;
+ u_offset_t off;
ulong_t i;
int ret;
anon_sync_obj_t cookie;
@@ -375,7 +511,7 @@ segspt_create(struct seg **segpp, void *argsp)
int err;
caddr_t addr = seg->s_base;
struct spt_data *sptd;
- struct segspt_crargs *sptcargs = (struct segspt_crargs *)argsp;
+ struct segspt_crargs *sptcargs = (struct segspt_crargs *)argsp;
struct anon_map *amp = sptcargs->amp;
struct kshmid *sp = amp->a_sp;
struct cred *cred = CRED();
@@ -617,14 +753,14 @@ out1:
void
segspt_free_pages(struct seg *seg, caddr_t addr, size_t len)
{
- struct page *pp;
+ struct page *pp;
struct spt_data *sptd = (struct spt_data *)seg->s_data;
pgcnt_t npages;
ulong_t anon_idx;
struct anon_map *amp;
- struct anon *ap;
- struct vnode *vp;
- u_offset_t off;
+ struct anon *ap;
+ struct vnode *vp;
+ u_offset_t off;
uint_t hat_flags;
int root = 0;
pgcnt_t pgs, curnpgs = 0;
@@ -834,7 +970,7 @@ segspt_dismpagelock(struct seg *seg, caddr_t addr, size_t len,
struct page **pplist, **pl, **ppa, *pp;
struct anon_map *amp;
spgcnt_t an_idx;
- int ret = ENOTSUP;
+ int ret = ENOTSUP;
uint_t pl_built = 0;
struct anon *ap;
struct vnode *vp;
@@ -1825,10 +1961,10 @@ faultcode_t
segspt_dismfault(struct hat *hat, struct seg *seg, caddr_t addr,
size_t len, enum fault_type type, enum seg_rw rw)
{
- struct shm_data *shmd = (struct shm_data *)seg->s_data;
+ struct shm_data *shmd = (struct shm_data *)seg->s_data;
struct seg *sptseg = shmd->shm_sptseg;
struct as *curspt = shmd->shm_sptas;
- struct spt_data *sptd = sptseg->s_data;
+ struct spt_data *sptd = sptseg->s_data;
pgcnt_t npages;
size_t size;
caddr_t segspt_addr, shm_addr;
@@ -2008,10 +2144,10 @@ faultcode_t
segspt_shmfault(struct hat *hat, struct seg *seg, caddr_t addr,
size_t len, enum fault_type type, enum seg_rw rw)
{
- struct shm_data *shmd = (struct shm_data *)seg->s_data;
+ struct shm_data *shmd = (struct shm_data *)seg->s_data;
struct seg *sptseg = shmd->shm_sptseg;
struct as *curspt = shmd->shm_sptas;
- struct spt_data *sptd = sptseg->s_data;
+ struct spt_data *sptd = sptseg->s_data;
pgcnt_t npages;
size_t size;
caddr_t sptseg_addr, shm_addr;
@@ -2262,8 +2398,8 @@ int
segspt_shmdup(struct seg *seg, struct seg *newseg)
{
struct shm_data *shmd = (struct shm_data *)seg->s_data;
- struct anon_map *amp = shmd->shm_amp;
- struct shm_data *shmd_new;
+ struct anon_map *amp = shmd->shm_amp;
+ struct shm_data *shmd_new;
struct seg *spt_seg = shmd->shm_sptseg;
struct spt_data *sptd = spt_seg->s_data;
int error = 0;
@@ -2331,7 +2467,7 @@ spt_anon_getpages(
{
struct spt_data *sptd = sptseg->s_data;
struct anon_map *amp = sptd->spt_amp;
- enum seg_rw rw = sptd->spt_prot;
+ enum seg_rw rw = sptd->spt_prot;
uint_t szc = sptseg->s_szc;
size_t pg_sz, share_sz = page_get_pagesize(szc);
pgcnt_t lp_npgs;
@@ -2574,9 +2710,9 @@ spt_unlockpages(struct seg *seg, pgcnt_t anon_index, pgcnt_t npages,
struct shm_data *shmd = seg->s_data;
struct spt_data *sptd = shmd->shm_sptseg->s_data;
struct anon_map *amp = sptd->spt_amp;
- struct anon *ap;
- struct vnode *vp;
- u_offset_t off;
+ struct anon *ap;
+ struct vnode *vp;
+ u_offset_t off;
struct page *pp;
int kernel;
anon_sync_obj_t cookie;
@@ -2650,7 +2786,7 @@ segspt_shmlockop(struct seg *seg, caddr_t addr, size_t len,
struct kshmid *sp = sptd->spt_amp->a_sp;
pgcnt_t npages, a_npages;
page_t **ppa;
- pgcnt_t an_idx, a_an_idx, ppa_idx;
+ pgcnt_t an_idx, a_an_idx, ppa_idx;
caddr_t spt_addr, a_addr; /* spt and aligned address */
size_t a_len; /* aligned len */
size_t share_sz;
@@ -3005,7 +3141,7 @@ segspt_shmdump(struct seg *seg)
}
/*ARGSUSED*/
-static faultcode_t
+static int
segspt_shmsetpgsz(struct seg *seg, caddr_t addr, size_t len, uint_t szc)
{
return (ENOTSUP);
@@ -3018,7 +3154,7 @@ static int
segspt_shmgetmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
{
struct shm_data *shmd = (struct shm_data *)seg->s_data;
- struct anon *ap;
+ struct anon *ap;
size_t anon_index;
struct anon_map *amp = shmd->shm_amp;
struct spt_data *sptd = shmd->shm_sptseg->s_data;