1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or https://opensource.org/licenses/CDDL-1.0. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _LIBSPL_SYS_CMN_ERR_H 28 #define _LIBSPL_SYS_CMN_ERR_H 29 30 #include <atomic.h> 31 32 #define cmn_err_once(ce, ...) \ 33 do { \ 34 static volatile uint32_t printed = 0; \ 35 if (atomic_cas_32(&printed, 0, 1) == 0) { \ 36 cmn_err(ce, __VA_ARGS__); \ 37 } \ 38 } while (0) 39 40 #define vcmn_err_once(ce, fmt, ap) \ 41 do { \ 42 static volatile uint32_t printed = 0; \ 43 if (atomic_cas_32(&printed, 0, 1) == 0) { \ 44 vcmn_err(ce, fmt, ap); \ 45 } \ 46 } while (0) 47 48 #define zcmn_err_once(zone, ce, ...) \ 49 do { \ 50 static volatile uint32_t printed = 0; \ 51 if (atomic_cas_32(&printed, 0, 1) == 0) { \ 52 zcmn_err(zone, ce, __VA_ARGS__); \ 53 } \ 54 } while (0) 55 56 #define vzcmn_err_once(zone, ce, fmt, ap) \ 57 do { \ 58 static volatile uint32_t printed = 0; \ 59 if (atomic_cas_32(&printed, 0, 1) == 0) { \ 60 vzcmn_err(zone, ce, fmt, ap); \ 61 } \ 62 } while (0) 63 64 #endif 65