summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/vm/seg_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/vm/seg_dev.c')
-rw-r--r--usr/src/uts/common/vm/seg_dev.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/usr/src/uts/common/vm/seg_dev.c b/usr/src/uts/common/vm/seg_dev.c
index 29896a6374..67c646049a 100644
--- a/usr/src/uts/common/vm/seg_dev.c
+++ b/usr/src/uts/common/vm/seg_dev.c
@@ -2385,10 +2385,10 @@ segdev_advise(struct seg *seg, caddr_t addr, size_t len, uint_t behav)
/*
* segdev pages are not dumped, so we just return
*/
-/*ARGSUSED*/
static void
-segdev_dump(struct seg *seg)
-{}
+segdev_dump(struct seg *seg __unused)
+{
+}
/*
* ddi_segmap_setup: Used by drivers who wish specify mapping attributes
@@ -2405,7 +2405,7 @@ ddi_segmap_setup(dev_t dev, off_t offset, struct as *as, caddr_t *addrp,
int (*mapfunc)(dev_t dev, off_t off, int prot);
uint_t hat_attr;
pfn_t pfn;
- int error, i;
+ int error, i;
TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_SEGMAP_SETUP,
"ddi_segmap_setup:start");
@@ -2427,25 +2427,25 @@ ddi_segmap_setup(dev_t dev, off_t offset, struct as *as, caddr_t *addrp,
if (ddi_device_mapping_check(dev, accattrp, rnumber, &hat_attr) == -1)
return (ENXIO);
+ if (len == 0)
+ return (ENXIO);
+
/*
* Check to ensure that the entire range is
* legal and we are not trying to map in
* more than the device will let us.
*/
- for (i = 0; i < len; i += PAGESIZE) {
- if (i == 0) {
- /*
- * Save the pfn at offset here. This pfn will be
- * used later to get user address.
- */
- if ((pfn = (pfn_t)cdev_mmap(mapfunc, dev, offset,
- maxprot)) == PFN_INVALID)
- return (ENXIO);
- } else {
- if (cdev_mmap(mapfunc, dev, offset + i, maxprot) ==
- PFN_INVALID)
- return (ENXIO);
- }
+ /*
+ * Save the pfn at offset here. This pfn will be
+ * used later to get user address.
+ */
+ pfn = (pfn_t)cdev_mmap(mapfunc, dev, offset, maxprot);
+ if (pfn == PFN_INVALID)
+ return (ENXIO);
+
+ for (i = PAGESIZE; i < len; i += PAGESIZE) {
+ if (cdev_mmap(mapfunc, dev, offset + i, maxprot) == PFN_INVALID)
+ return (ENXIO);
}
as_rangelock(as);
@@ -2727,6 +2727,8 @@ devmap_roundup(devmap_handle_t *dhp, ulong_t offset, size_t len,
* the page size to use. The same calculations can use the
* virtual address to determine the page size.
*/
+ pg = 0;
+ poff = 0;
base = (ulong_t)ptob(dhp->dh_pfn);
for (level = dhp->dh_mmulevel; level >= 0; level--) {
pg = page_get_pagesize(level);