diff options
Diffstat (limited to 'usr/src/uts/sfmmu/vm')
-rw-r--r-- | usr/src/uts/sfmmu/vm/hat_sfmmu.c | 17 | ||||
-rw-r--r-- | usr/src/uts/sfmmu/vm/hat_sfmmu.h | 11 |
2 files changed, 13 insertions, 15 deletions
diff --git a/usr/src/uts/sfmmu/vm/hat_sfmmu.c b/usr/src/uts/sfmmu/vm/hat_sfmmu.c index ded9e793e3..a50a2db579 100644 --- a/usr/src/uts/sfmmu/vm/hat_sfmmu.c +++ b/usr/src/uts/sfmmu/vm/hat_sfmmu.c @@ -5032,7 +5032,7 @@ sfmmu_hblk_chgattr(struct hat *sfmmup, struct hme_blk *hmeblkp, caddr_t addr, use_demap_range = (TTEBYTES(ttesz) == DEMAP_RANGE_PGSZ(dmrp)); if (use_demap_range) { DEMAP_RANGE_CONTINUE(dmrp, addr, endaddr); - } else { + } else if (dmrp != NULL) { DEMAP_RANGE_FLUSH(dmrp); } @@ -5389,7 +5389,7 @@ sfmmu_hblk_chgprot(sfmmu_t *sfmmup, struct hme_blk *hmeblkp, caddr_t addr, use_demap_range = (TTEBYTES(ttesz) == MMU_PAGESIZE); if (use_demap_range) { DEMAP_RANGE_CONTINUE(dmrp, addr, endaddr); - } else { + } else if (dmrp != NULL) { DEMAP_RANGE_FLUSH(dmrp); } @@ -5741,12 +5741,13 @@ hat_unload_callback( * If the process is exiting, we can save a lot of fuss since * we'll flush the TLB when we free the ctx anyway. */ - if (sfmmup->sfmmu_free) + if (sfmmup->sfmmu_free) { dmrp = NULL; - else + } else { dmrp = &dmr; + DEMAP_RANGE_INIT(sfmmup, dmrp); + } - DEMAP_RANGE_INIT(sfmmup, dmrp); endaddr = addr + len; hblktag.htag_id = sfmmup; hblktag.htag_rid = SFMMU_INVALID_SHMERID; @@ -5919,8 +5920,8 @@ hat_unload_callback( * to minimize the number of xt_sync()s that need to occur. */ if (callback != NULL && addr_count == MAX_CB_ADDR) { - DEMAP_RANGE_FLUSH(dmrp); if (dmrp != NULL) { + DEMAP_RANGE_FLUSH(dmrp); cpuset = sfmmup->sfmmu_cpusran; xt_sync(cpuset); } @@ -5960,8 +5961,8 @@ hat_unload_callback( } sfmmu_hblks_list_purge(&list, 0); - DEMAP_RANGE_FLUSH(dmrp); if (dmrp != NULL) { + DEMAP_RANGE_FLUSH(dmrp); cpuset = sfmmup->sfmmu_cpusran; xt_sync(cpuset); } @@ -6054,7 +6055,7 @@ sfmmu_hblk_unload(struct hat *sfmmup, struct hme_blk *hmeblkp, caddr_t addr, if (use_demap_range) { DEMAP_RANGE_CONTINUE(dmrp, addr, endaddr); - } else { + } else if (dmrp != NULL) { DEMAP_RANGE_FLUSH(dmrp); } ttecnt = 0; diff --git a/usr/src/uts/sfmmu/vm/hat_sfmmu.h b/usr/src/uts/sfmmu/vm/hat_sfmmu.h index 337a93704d..8bdc3e39b2 100644 --- a/usr/src/uts/sfmmu/vm/hat_sfmmu.h +++ b/usr/src/uts/sfmmu/vm/hat_sfmmu.h @@ -1673,12 +1673,10 @@ typedef struct { #define DMR_MAXBIT ((ulong_t)1<<63) /* dmr_bit high bit */ #define DEMAP_RANGE_INIT(sfmmup, dmrp) \ - if ((dmrp) != NULL) { \ (dmrp)->dmr_sfmmup = (sfmmup); \ (dmrp)->dmr_bitvec = 0; \ (dmrp)->dmr_maxbit = sfmmu_dmr_maxbit; \ - (dmrp)->dmr_pgsz = MMU_PAGESIZE; \ - } + (dmrp)->dmr_pgsz = MMU_PAGESIZE; #define DEMAP_RANGE_PGSZ(dmrp) ((dmrp)? (dmrp)->dmr_pgsz : MMU_PAGESIZE) @@ -1690,10 +1688,9 @@ typedef struct { } #define DEMAP_RANGE_FLUSH(dmrp) \ - if ((dmrp) != NULL) { \ - if ((dmrp)->dmr_bitvec != 0) \ - sfmmu_tlb_range_demap(dmrp); \ - } + if ((dmrp)->dmr_bitvec != 0) \ + sfmmu_tlb_range_demap(dmrp); + #define DEMAP_RANGE_MARKPG(dmrp, addr) \ if ((dmrp) != NULL) { \ |