29949e866e40b95795203f3ee46f44a197c946e4stevel/*
29949e866e40b95795203f3ee46f44a197c946e4stevel * CDDL HEADER START
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * The contents of this file are subject to the terms of the
29949e866e40b95795203f3ee46f44a197c946e4stevel * Common Development and Distribution License (the "License").
29949e866e40b95795203f3ee46f44a197c946e4stevel * You may not use this file except in compliance with the License.
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
29949e866e40b95795203f3ee46f44a197c946e4stevel * or http://www.opensolaris.org/os/licensing.
29949e866e40b95795203f3ee46f44a197c946e4stevel * See the License for the specific language governing permissions
29949e866e40b95795203f3ee46f44a197c946e4stevel * and limitations under the License.
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * When distributing Covered Code, include this CDDL HEADER in each
29949e866e40b95795203f3ee46f44a197c946e4stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
29949e866e40b95795203f3ee46f44a197c946e4stevel * If applicable, add the following below this CDDL HEADER, with the
29949e866e40b95795203f3ee46f44a197c946e4stevel * fields enclosed by brackets "[]" replaced with your own identifying
29949e866e40b95795203f3ee46f44a197c946e4stevel * information: Portions Copyright [yyyy] [name of copyright owner]
29949e866e40b95795203f3ee46f44a197c946e4stevel *
29949e866e40b95795203f3ee46f44a197c946e4stevel * CDDL HEADER END
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel/*
29949e866e40b95795203f3ee46f44a197c946e4stevel * Copyright 1998 Sun Microsystems, Inc. All rights reserved.
29949e866e40b95795203f3ee46f44a197c946e4stevel * Use is subject to license terms.
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel#pragma ident "%Z%%M% %I% %E% SMI"
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/types.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/systm.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/ddi.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/sunddi.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/ddi_impldefs.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/obpdefs.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/cmn_err.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/errno.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/kmem.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/debug.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/sysmacros.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/machsystm.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/machparam.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/modctl.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/fhc.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/ac.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/vm.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/cpu_module.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <vm/hat_sfmmu.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/mem_config.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel#include <sys/mem_cage.h>
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelextern ac_err_t ac_kpm_err_cvt(int);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifdef DEBUG
29949e866e40b95795203f3ee46f44a197c946e4stevelstatic void query_checker(pfn_t, pgcnt_t, memquery_t *);
29949e866e40b95795203f3ee46f44a197c946e4stevelstatic int ac_do_query_check = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif /* DEBUG */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelint
29949e866e40b95795203f3ee46f44a197c946e4stevelac_mem_stat(ac_cfga_pkt_t *pkt, int flag)
29949e866e40b95795203f3ee46f44a197c946e4stevel{
29949e866e40b95795203f3ee46f44a197c946e4stevel ac_stat_t *statp;
29949e866e40b95795203f3ee46f44a197c946e4stevel memquery_t memq;
29949e866e40b95795203f3ee46f44a197c946e4stevel struct ac_mem_info *mem_info;
29949e866e40b95795203f3ee46f44a197c946e4stevel struct bd_list *board;
29949e866e40b95795203f3ee46f44a197c946e4stevel struct ac_soft_state *ac;
29949e866e40b95795203f3ee46f44a197c946e4stevel uint64_t decode;
29949e866e40b95795203f3ee46f44a197c946e4stevel uint64_t base_pa;
29949e866e40b95795203f3ee46f44a197c946e4stevel uint64_t bank_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel pfn_t base;
29949e866e40b95795203f3ee46f44a197c946e4stevel pgcnt_t npgs;
29949e866e40b95795203f3ee46f44a197c946e4stevel int ret;
29949e866e40b95795203f3ee46f44a197c946e4stevel int retval;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel /*
29949e866e40b95795203f3ee46f44a197c946e4stevel * Is the specified bank present?
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel board = fhc_bdlist_lock(pkt->softsp->board);
29949e866e40b95795203f3ee46f44a197c946e4stevel if (board == NULL || board->ac_softsp == NULL) {
29949e866e40b95795203f3ee46f44a197c946e4stevel fhc_bdlist_unlock();
29949e866e40b95795203f3ee46f44a197c946e4stevel AC_ERR_SET(pkt, AC_ERR_BD);
29949e866e40b95795203f3ee46f44a197c946e4stevel return (EINVAL);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel /* verify the board is of the correct type */
29949e866e40b95795203f3ee46f44a197c946e4stevel switch (board->sc.type) {
29949e866e40b95795203f3ee46f44a197c946e4stevel case CPU_BOARD:
29949e866e40b95795203f3ee46f44a197c946e4stevel case MEM_BOARD:
29949e866e40b95795203f3ee46f44a197c946e4stevel break;
29949e866e40b95795203f3ee46f44a197c946e4stevel default:
29949e866e40b95795203f3ee46f44a197c946e4stevel fhc_bdlist_unlock();
29949e866e40b95795203f3ee46f44a197c946e4stevel AC_ERR_SET(pkt, AC_ERR_BD_TYPE);
29949e866e40b95795203f3ee46f44a197c946e4stevel return (EINVAL);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel ASSERT(pkt->softsp == board->ac_softsp);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel ac = pkt->softsp;
29949e866e40b95795203f3ee46f44a197c946e4stevel mem_info = &ac->bank[pkt->bank];
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel statp = kmem_zalloc(sizeof (ac_stat_t), KM_SLEEP);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->rstate = mem_info->rstate;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->ostate = mem_info->ostate;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->condition = mem_info->condition;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->status_time = mem_info->status_change;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->board = ac->board;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->real_size = mem_info->real_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->use_size = mem_info->use_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->ac_memctl = *(ac->ac_memctl);
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->ac_decode0 = *(ac->ac_memdecode0);
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->ac_decode1 = *(ac->ac_memdecode1);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->page_size = PAGESIZE;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel /*
29949e866e40b95795203f3ee46f44a197c946e4stevel * Busy could also be set for fhc_bd_busy(ac->board)
29949e866e40b95795203f3ee46f44a197c946e4stevel * however, this is just advisory information so limit it
29949e866e40b95795203f3ee46f44a197c946e4stevel * to memory operation in progress.
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->busy = (mem_info->busy != FALSE);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel /*
29949e866e40b95795203f3ee46f44a197c946e4stevel * Determine the physical location of the selected bank
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel decode = (pkt->bank == Bank0) ?
29949e866e40b95795203f3ee46f44a197c946e4stevel *(ac->ac_memdecode0) : *(ac->ac_memdecode1);
29949e866e40b95795203f3ee46f44a197c946e4stevel base_pa = GRP_REALBASE(decode);
29949e866e40b95795203f3ee46f44a197c946e4stevel bank_size = GRP_UK2SPAN(decode);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel base = base_pa >> PAGESHIFT;
29949e866e40b95795203f3ee46f44a197c946e4stevel npgs = bank_size >> PAGESHIFT;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mem_info->ostate == SYSC_CFGA_OSTATE_CONFIGURED) {
29949e866e40b95795203f3ee46f44a197c946e4stevel bzero(&memq, sizeof (memq));
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel ret = kphysm_del_span_query(base, npgs, &memq);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ret != KPHYSM_OK) {
29949e866e40b95795203f3ee46f44a197c946e4stevel fhc_bdlist_unlock();
29949e866e40b95795203f3ee46f44a197c946e4stevel AC_ERR_SET(pkt, ac_kpm_err_cvt(ret));
29949e866e40b95795203f3ee46f44a197c946e4stevel retval = EINVAL;
29949e866e40b95795203f3ee46f44a197c946e4stevel goto out;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifdef DEBUG
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ac_do_query_check) {
29949e866e40b95795203f3ee46f44a197c946e4stevel query_checker(base, npgs, &memq);
29949e866e40b95795203f3ee46f44a197c946e4stevel if (memq.phys_pages != npgs) {
29949e866e40b95795203f3ee46f44a197c946e4stevel /*
29949e866e40b95795203f3ee46f44a197c946e4stevel * This can happen in normal concurrent
29949e866e40b95795203f3ee46f44a197c946e4stevel * operation.
29949e866e40b95795203f3ee46f44a197c946e4stevel */
29949e866e40b95795203f3ee46f44a197c946e4stevel cmn_err(CE_WARN, "ac_mem_stat(): "
29949e866e40b95795203f3ee46f44a197c946e4stevel "memq.phys_pages != npgs (%ld != %ld)",
29949e866e40b95795203f3ee46f44a197c946e4stevel (u_long)memq.phys_pages, (u_long)npgs);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif /* DEBUG */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->phys_pages = memq.phys_pages;
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->managed = memq.managed;
29949e866e40b95795203f3ee46f44a197c946e4stevel if (!kcage_on)
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->nonrelocatable = memq.phys_pages;
29949e866e40b95795203f3ee46f44a197c946e4stevel else
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->nonrelocatable = memq.nonrelocatable;
29949e866e40b95795203f3ee46f44a197c946e4stevel } else
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mem_info->rstate == SYSC_CFGA_RSTATE_CONNECTED) {
29949e866e40b95795203f3ee46f44a197c946e4stevel /* Bank is in state Spare */
29949e866e40b95795203f3ee46f44a197c946e4stevel statp->phys_pages = npgs;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel fhc_bdlist_unlock();
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel retval = DDI_SUCCESS;
29949e866e40b95795203f3ee46f44a197c946e4stevel /* return the information to the user */
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifdef _MULTI_DATAMODEL
29949e866e40b95795203f3ee46f44a197c946e4stevel switch (ddi_model_convert_from(flag & FMODELS)) {
29949e866e40b95795203f3ee46f44a197c946e4stevel case DDI_MODEL_ILP32: {
29949e866e40b95795203f3ee46f44a197c946e4stevel ac_stat32_t *stat32p;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p = kmem_zalloc(sizeof (ac_stat32_t), KM_SLEEP);
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->rstate = statp->rstate;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->ostate = statp->ostate;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->condition = statp->condition;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->status_time = (time32_t)statp->status_time;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->board = statp->board;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->real_size = statp->real_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->use_size = statp->use_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->busy = statp->busy;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->page_size = statp->page_size;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->phys_pages = statp->phys_pages;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->managed = statp->managed;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->nonrelocatable = statp->nonrelocatable;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->ac_memctl = statp->ac_memctl;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->ac_decode0 = statp->ac_decode0;
29949e866e40b95795203f3ee46f44a197c946e4stevel stat32p->ac_decode1 = statp->ac_decode1;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ddi_copyout(stat32p, pkt->cmd_cfga.private,
29949e866e40b95795203f3ee46f44a197c946e4stevel sizeof (ac_stat32_t), flag) != 0) {
29949e866e40b95795203f3ee46f44a197c946e4stevel retval = EFAULT;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel kmem_free(stat32p, sizeof (ac_stat32_t));
29949e866e40b95795203f3ee46f44a197c946e4stevel break;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel case DDI_MODEL_NONE:
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ddi_copyout(statp, pkt->cmd_cfga.private,
29949e866e40b95795203f3ee46f44a197c946e4stevel sizeof (ac_stat_t), flag) != 0) {
29949e866e40b95795203f3ee46f44a197c946e4stevel retval = EFAULT;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel break;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel#else /* _MULTI_DATAMODEL */
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ddi_copyout(statp, pkt->cmd_cfga.private,
29949e866e40b95795203f3ee46f44a197c946e4stevel sizeof (ac_stat_t), flag) != 0) {
29949e866e40b95795203f3ee46f44a197c946e4stevel retval = EFAULT;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif /* _MULTI_DATAMODEL */
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelout:
29949e866e40b95795203f3ee46f44a197c946e4stevel kmem_free(statp, sizeof (ac_stat_t));
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel return (retval);
29949e866e40b95795203f3ee46f44a197c946e4stevel}
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel#ifdef DEBUG
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevelstatic void
29949e866e40b95795203f3ee46f44a197c946e4stevelquery_checker(
29949e866e40b95795203f3ee46f44a197c946e4stevel pfn_t base,
29949e866e40b95795203f3ee46f44a197c946e4stevel pgcnt_t npgs,
29949e866e40b95795203f3ee46f44a197c946e4stevel memquery_t *mqp)
29949e866e40b95795203f3ee46f44a197c946e4stevel{
29949e866e40b95795203f3ee46f44a197c946e4stevel memquery_t memq;
29949e866e40b95795203f3ee46f44a197c946e4stevel memquery_t amemq;
29949e866e40b95795203f3ee46f44a197c946e4stevel int done_first_nonreloc;
29949e866e40b95795203f3ee46f44a197c946e4stevel int all_pop;
29949e866e40b95795203f3ee46f44a197c946e4stevel pfn_t abase;
29949e866e40b95795203f3ee46f44a197c946e4stevel pgcnt_t n;
29949e866e40b95795203f3ee46f44a197c946e4stevel int ret;
29949e866e40b95795203f3ee46f44a197c946e4stevel
29949e866e40b95795203f3ee46f44a197c946e4stevel all_pop = (mqp->phys_pages == npgs);
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.phys_pages = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.managed = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.nonrelocatable = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.first_nonrelocatable = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.last_nonrelocatable = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel done_first_nonreloc = 0;
29949e866e40b95795203f3ee46f44a197c946e4stevel for (abase = base, n = npgs; n != 0; abase++, n--) {
29949e866e40b95795203f3ee46f44a197c946e4stevel ret = kphysm_del_span_query(abase, 1, &amemq);
29949e866e40b95795203f3ee46f44a197c946e4stevel if (ret != KPHYSM_OK) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: ret = %d\n", abase, ret);
29949e866e40b95795203f3ee46f44a197c946e4stevel continue;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (all_pop && amemq.phys_pages != 1) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: phys_pages = %ld, expected 1\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.phys_pages);
29949e866e40b95795203f3ee46f44a197c946e4stevel } else
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.phys_pages != 0 && amemq.phys_pages != 1) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: phys_pages = %ld, expected 0 or 1\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.phys_pages);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.phys_pages += amemq.phys_pages;
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.managed != 0 && amemq.managed != 1) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: managed = %ld, expected 0 or 1\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.managed);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.managed += amemq.managed;
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.nonrelocatable != 0 && amemq.nonrelocatable != 1) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: nonrelocatable = %ld, expected 0 or 1\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.nonrelocatable += amemq.nonrelocatable;
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.nonrelocatable != 0) {
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.first_nonrelocatable != abase) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: first_nonrelocatable = %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.first_nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (amemq.last_nonrelocatable != abase) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("%ld: last_nonrelocatable = %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel abase, amemq.last_nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (!done_first_nonreloc) {
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.first_nonrelocatable = abase;
29949e866e40b95795203f3ee46f44a197c946e4stevel done_first_nonreloc = 1;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel memq.last_nonrelocatable = abase;
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mqp->phys_pages != memq.phys_pages) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("query phys_pages: %ld != %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel mqp->phys_pages, memq.phys_pages);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mqp->managed != memq.managed) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("query managed: %ld != %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel mqp->managed, memq.managed);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mqp->nonrelocatable != memq.nonrelocatable) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("query nonrelocatable: %ld != %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel mqp->nonrelocatable, memq.nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mqp->first_nonrelocatable != memq.first_nonrelocatable) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("query first_nonrelocatable: %ld != %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel mqp->first_nonrelocatable, memq.first_nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel if (mqp->last_nonrelocatable != memq.last_nonrelocatable) {
29949e866e40b95795203f3ee46f44a197c946e4stevel printf("query last_nonrelocatable: %ld != %ld\n",
29949e866e40b95795203f3ee46f44a197c946e4stevel mqp->last_nonrelocatable, memq.last_nonrelocatable);
29949e866e40b95795203f3ee46f44a197c946e4stevel }
29949e866e40b95795203f3ee46f44a197c946e4stevel}
29949e866e40b95795203f3ee46f44a197c946e4stevel#endif /* DEBUG */