/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Support routines for managing potential page and bank faults that have
* been deferred due to a datapath error. Currently deferment only occurs
* if a memory UE occurs while a datapath error is active. When this happens
* a page case is created with a special subtype of CMD_PTR_DP_PAGE_DEFER. An
* entry (a cmd_dp_defer_t) is added to a list of deferred pages. The entry
* links to the cmd_page_t in the cmd_pages list and also keeps track of what
* memory controller ids are associated with the first AFAR and any more that
* are seen while the page is deferred. This information is used to determine
* if the page should be faulted if the fault should be skipped because an
* intervening datapath fault has occurred. If a page is faulted when it is
* replayed, the corresponding bank is faulted, too, since the original error
* was a UE. Note that no action is taken to undo any action taken by the
* kernel when the UE was detected. Currently the kernel will attempt to
* immediately retire the page where a UE is detected and the retire may or
* may not have completed by the time FMA receives an ereport. The possibility
* of a datapath fault resulting in memory UEs is very small, so the likelihood
* of encountering this scenario is also very small.
*/
#include <cmd.h>
#include <cmd_dp.h>
#include <cmd_dp_page.h>
#include <cmd_bank.h>
#include <cmd_page.h>
static void
{
}
static void
{
}
static void
{
int mcid;
int i;
for (i = 0; i < DP_MAX_MCS; i++) {
break;
}
break;
}
if (i == DP_MAX_MCS)
}
static cmd_dp_defer_t *
{
int i;
for (i = 0; i < DP_MAX_MCS; i++)
return (dpage);
}
static cmd_dp_defer_t *
{
return (dpage);
}
return (NULL);
}
void
{
const char *uuid;
} else {
}
}
int
{
int i;
for (i = 0; i < DP_MAX_MCS; i++) {
break;
/*
* If there's no datapath fault corresponding to
* an mcid, that means the page incurred an error
* not attributable to a datapath fault.
*/
return (0);
}
return (1);
}
void
{
"dp fault");
continue;
}
bank->bank_nretired++;
}
}
void
{
}
void
{
}
}
}
/*ARGSUSED*/
int
{
return (1);
}
}
return (0);
}