Mercurial > illumos > illumos-gate
view usr/src/uts/common/sys/panic.h @ 12979:ab9ae749152f
PSARC/2009/617 Software Events Notification Parameters CLI
PSARC/2009/618 snmp-notify: SNMP Notification Daemon for Software Events
PSARC/2009/619 smtp-notify: Email Notification Daemon for Software Events
PSARC/2010/225 fmd for non-global Solaris zones
PSARC/2010/226 Solaris Instance UUID
PSARC/2010/227 nvlist_nvflag(3NVPAIR)
PSARC/2010/228 libfmevent additions
PSARC/2010/257 sysevent_evc_setpropnvl and sysevent_evc_getpropnvl
PSARC/2010/265 FMRI and FMA Event Stabilty, 'ireport' category 1 event class, and the 'sw' FMRI scheme
PSARC/2010/278 FMA/SMF integration: instance state transitions
PSARC/2010/279 Modelling panics within FMA
PSARC/2010/290 logadm.conf upgrade
6392476 fmdump needs to pretty-print
6393375 userland ereport/ireport event generation interfaces
6445732 Add email notification agent for FMA and software events
6804168 RFE: Allow an efficient means to monitor SMF services status changes
6866661 scf_values_destroy(3SCF) will segfault if is passed NULL
6884709 Add snmp notification agent for FMA and software events
6884712 Add private interface to tap into libfmd_msg macro expansion capabilities
6897919 fmd to run in a non-global zone
6897937 fmd use of non-private doors is not safe
6900081 add a UUID to Solaris kernel image for use in crashdump identification
6914884 model panic events as a defect diagnosis in FMA
6944862 fmd_case_open_uuid, fmd_case_uuisresolved, fmd_nvl_create_defect
6944866 log legacy sysevents in fmd
6944867 enumerate svc scheme in topo
6944868 software-diagnosis and software-response fmd modules
6944870 model SMF maintenance state as a defect diagnosis in FMA
6944876 savecore runs in foreground for systems with zfs root and dedicated dump
6965796 Implement notification parameters for SMF state transitions and FMA events
6968287 SUN-FM-MIB.mib needs to be updated to reflect Oracle information
6972331 logadm.conf upgrade PSARC/2010/290
author | Gavin Maltby <gavin.maltby@oracle.com> |
---|---|
date | Fri, 30 Jul 2010 17:04:17 +1000 |
parents | 7d838c5c0eed |
children |
line wrap: on
line source
/* * 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 * or http://www.opensolaris.org/os/licensing. * 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 (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. */ #ifndef _SYS_PANIC_H #define _SYS_PANIC_H #if !defined(_ASM) #include <sys/types.h> #include <sys/thread.h> #include <sys/cpuvar.h> #endif /* !_ASM */ #ifdef __cplusplus extern "C" { #endif #ifdef _LP64 #define PANICSTKSIZE 16384 #else #define PANICSTKSIZE 8192 #endif #define PANICBUFSIZE 8192 #define PANICBUFVERS 2 #define PANICNVNAMELEN 16 #define STACK_BUF_SIZE 2048 #define SUMMARY_MAGIC 0xdead0d8a /* * Panicbuf Format: * * The kernel records the formatted panic message and an optional array of * name/value pairs into panicbuf[], a fixed-size buffer which is saved in * the crash dump and, on some platforms, is persistent across reboots. * The initial part of the buffer is a struct of type panic_data_t, which * includes a version number for identifying the format of subsequent data. * * The pd_msgoff word identifies the byte offset into panicbuf[] at which the * null-terminated panic message is located. This is followed by an optional * variable-sized array of panic_nv_t items, which are used to record CPU * register values. The number of items in pd_nvdata is computed as follows: * * (pd_msgoff - (sizeof (panic_data_t) - sizeof (panic_nv_t))) / * sizeof (panic_nv_t); * * In addition to panicbuf, debuggers can access the panic_* variables shown * below to determine more information about the initiator of the panic. */ #if !defined(_ASM) typedef struct panic_nv { char pnv_name[PANICNVNAMELEN]; /* String name */ uint64_t pnv_value; /* Value */ } panic_nv_t; typedef struct panic_data { uint32_t pd_version; /* Version number of panic_data_t */ uint32_t pd_msgoff; /* Message byte offset in panicbuf */ char pd_uuid[36 + 1]; /* image uuid */ panic_nv_t pd_nvdata[1]; /* Array of named data */ } panic_data_t; typedef struct summary_dump { uint32_t sd_magic; /* magic number */ uint32_t sd_ssum; /* checsksum32(stack buffer) */ /* * stack buffer and other summary data follow here -- see * dump_summary() */ } summary_dump_t; #if defined(_KERNEL) /* * Kernel macros for adding information to pd_nvdata[]. PANICNVGET() returns * a panic_nv_t pointer (pnv) after the end of the existing data, PANICNVADD() * modifies the current item and increments pnv, and PANICNVSET() rewrites * pd_msgoff to indicate the end of pd_nvdata[]. */ #define PANICNVGET(pdp) \ ((pdp)->pd_nvdata + (((pdp)->pd_msgoff - \ (sizeof (panic_data_t) - sizeof (panic_nv_t))) / sizeof (panic_nv_t))) #define PANICNVADD(pnv, n, v) \ { \ (void) strncpy((pnv)->pnv_name, (n), PANICNVNAMELEN); \ (pnv)->pnv_value = (uint64_t)(v); (pnv)++; \ } #define PANICNVSET(pdp, pnv) \ (pdp)->pd_msgoff = (uint32_t)((char *)(pnv) - (char *)(pdp)); /* * Kernel panic data; preserved in crash dump for debuggers. */ #pragma align 8(panicbuf) extern char panicbuf[PANICBUFSIZE]; extern kthread_t *panic_thread; extern cpu_t panic_cpu; extern hrtime_t panic_hrtime; extern timespec_t panic_hrestime; /* * Forward declarations for types: */ struct panic_trap_info; struct regs; /* * Miscellaneous state variables defined in or used by the panic code: */ extern char *panic_bootstr; extern int panic_bootfcn; extern int panic_forced; extern int halt_on_panic; extern int nopanicdebug; extern int do_polled_io; extern int obpdebug; extern int in_sync; extern int panic_quiesce; extern int panic_sync; extern int panic_dump; extern int64_t panic_lbolt64; extern label_t panic_regs; extern struct regs *panic_reg; /* * Panic functions called from the common panic code which must be * implemented by architecture or platform-specific code: */ extern void panic_saveregs(panic_data_t *, struct regs *); extern void panic_savetrap(panic_data_t *, struct panic_trap_info *); extern void panic_showtrap(struct panic_trap_info *); extern void panic_stopcpus(cpu_t *, kthread_t *, int); extern void panic_enter_hw(int); extern void panic_quiesce_hw(panic_data_t *); extern void panic_dump_hw(int); extern int panic_trigger(int *); #endif /* _KERNEL */ #endif /* !_ASM */ #ifdef __cplusplus } #endif #endif /* _SYS_PANIC_H */