annotate usr/src/uts/sun4v/sys/vdc.h @ 3078:aa37b7e3c5c7

6485548 Can not create zpool on guest domain with an entire vdisk 6486746 cnex timeouts during intr redistribution when doing cpu DR 6488547 Kaio accesses of block size greater than 64K fail on guest's virtual disks 6488812 vdc driver should define internal macro instead of SDUNIT/SDPART
author narayan
date Wed, 08 Nov 2006 19:55:37 -0800
parents a30c4090b49f
children eee1ef6f0e3e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
1 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
2 * CDDL HEADER START
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
3 *
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
5 * Common Development and Distribution License (the "License").
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
6 * You may not use this file except in compliance with the License.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
7 *
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
10 * See the License for the specific language governing permissions
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
11 * and limitations under the License.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
12 *
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
18 *
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
19 * CDDL HEADER END
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
20 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
21
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
22 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
24 * Use is subject to license terms.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
25 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
26
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
27 #ifndef _VDC_H
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
28 #define _VDC_H
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
29
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
30 #pragma ident "%Z%%M% %I% %E% SMI"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
31
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
32 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
33 * Virtual disk client implementation definitions
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
34 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
35
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
36 #include <sys/sysmacros.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
37 #include <sys/note.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
38
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
39 #include <sys/ldc.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
40 #include <sys/vio_mailbox.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
41 #include <sys/vdsk_mailbox.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
42 #include <sys/vdsk_common.h>
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
43
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
44 #ifdef __cplusplus
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
45 extern "C" {
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
46 #endif
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
47
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
48 #define VDC_DRIVER_NAME "vdc"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
49
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
50 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
51 * Bit-field values to indicate if parts of the vdc driver are initialised.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
52 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
53 #define VDC_SOFT_STATE 0x0001
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
54 #define VDC_LOCKS 0x0002
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
55 #define VDC_MINOR 0x0004
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
56 #define VDC_THREAD 0x0008
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
57 #define VDC_LDC 0x0010
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
58 #define VDC_LDC_INIT 0x0020
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
59 #define VDC_LDC_CB 0x0040
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
60 #define VDC_LDC_OPEN 0x0080
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
61 #define VDC_DRING_INIT 0x0100 /* The DRing was created */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
62 #define VDC_DRING_BOUND 0x0200 /* The DRing was bound to an LDC channel */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
63 #define VDC_DRING_LOCAL 0x0400 /* The local private DRing was allocated */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
64 #define VDC_DRING_ENTRY 0x0800 /* At least one DRing entry was initialised */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
65 #define VDC_DRING (VDC_DRING_INIT | VDC_DRING_BOUND | \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
66 VDC_DRING_LOCAL | VDC_DRING_ENTRY)
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
67 #define VDC_HANDSHAKE 0x1000 /* Indicates if a handshake is in progress */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
68 #define VDC_HANDSHAKE_STOP 0x2000 /* stop further handshakes */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
69
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
70 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
71 * Definitions of strings to be used to create device node properties.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
72 * (vdc uses the capitalised versions of these properties as they are 64-bit)
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
73 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
74 #define VDC_NBLOCKS_PROP_NAME "Nblocks"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
75 #define VDC_SIZE_PROP_NAME "Size"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
76
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
77 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
78 * Definitions of MD nodes/properties.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
79 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
80 #define VDC_MD_CHAN_NAME "channel-endpoint"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
81 #define VDC_MD_VDEV_NAME "virtual-device"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
82 #define VDC_MD_DISK_NAME "disk"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
83 #define VDC_MD_CFG_HDL "cfg-handle"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
84 #define VDC_ID_PROP "id"
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
85
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
86 /*
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
87 * Definition of actions to be carried out when processing the sequence ID
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
88 * of a message received from the vDisk server. The function verifying the
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
89 * sequence number checks the 'seq_num_xxx' fields in the soft state and
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
90 * returns whether the message should be processed (VDC_SEQ_NUM_TODO) or
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
91 * whether it was it was previously processed (VDC_SEQ_NUM_SKIP).
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
92 */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
93 #define VDC_SEQ_NUM_INVALID -1 /* Error */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
94 #define VDC_SEQ_NUM_SKIP 0 /* Request already processed */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
95 #define VDC_SEQ_NUM_TODO 1 /* Request needs processing */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
96
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
97 /*
3078
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
98 * Macros to get UNIT and PART number
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
99 */
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
100 #define VDCUNIT_SHIFT 3
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
101 #define VDCPART_MASK 7
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
102
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
103 #define VDCUNIT(dev) (getminor((dev)) >> VDCUNIT_SHIFT)
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
104 #define VDCPART(dev) (getminor((dev)) & VDCPART_MASK)
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
105
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
106 /*
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
107 * Scheme to store the instance number and the slice number in the minor number.
3078
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
108 * (NOTE: Uses the same format and definitions as the sd(7D) driver)
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
109 */
3078
aa37b7e3c5c7 6485548 Can not create zpool on guest domain with an entire vdisk
narayan
parents: 2793
diff changeset
110 #define VD_MAKE_DEV(instance, minor) ((instance << VDCUNIT_SHIFT) | minor)
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
111
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
112 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
113 * variables controlling how long to wait before timing out and how many
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
114 * retries to attempt before giving up when communicating with vds.
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
115 *
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
116 * These values need to be sufficiently large so that a guest can survive
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
117 * the reboot of the service domain.
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
118 */
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
119 #define VDC_RETRIES 10
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
120
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
121 #define VDC_USEC_TIMEOUT_MIN (30 * MICROSEC) /* 30 sec */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
122
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
123 /*
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
124 * This macro returns the number of Hz that the vdc driver should wait before
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
125 * a timeout is triggered. The 'timeout' parameter specifiecs the wait
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
126 * time in Hz. The 'mul' parameter allows for a multiplier to be
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
127 * specified allowing for a backoff to be implemented (e.g. using the
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
128 * retry number as a multiplier) where the wait time will get longer if
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
129 * there is no response on the previous retry.
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
130 */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
131 #define VD_GET_TIMEOUT_HZ(timeout, mul) \
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
132 (ddi_get_lbolt() + ((timeout) * MAX(1, (mul))))
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
133
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
134 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
135 * Macros to manipulate Descriptor Ring variables in the soft state
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
136 * structure.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
137 */
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
138 #define VDC_GET_NEXT_REQ_ID(vdc) ((vdc)->req_id++)
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
139
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
140 #define VDC_GET_DRING_ENTRY_PTR(vdc, idx) \
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
141 (vd_dring_entry_t *)((vdc)->dring_mem_info.vaddr + \
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
142 (idx * (vdc)->dring_entry_size))
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
143
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
144 #define VDC_MARK_DRING_ENTRY_FREE(vdc, idx) \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
145 { \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
146 vd_dring_entry_t *dep = NULL; \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
147 ASSERT(vdc != NULL); \
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
148 ASSERT((idx >= 0) && (idx < vdc->dring_len)); \
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
149 ASSERT(vdc->dring_mem_info.vaddr != NULL); \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
150 dep = (vd_dring_entry_t *)(vdc->dring_mem_info.vaddr + \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
151 (idx * vdc->dring_entry_size)); \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
152 ASSERT(dep != NULL); \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
153 dep->hdr.dstate = VIO_DESC_FREE; \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
154 }
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
155
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
156 /* Initialise the Session ID and Sequence Num in the DRing msg */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
157 #define VDC_INIT_DRING_DATA_MSG_IDS(dmsg, vdc) \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
158 ASSERT(vdc != NULL); \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
159 dmsg.tag.vio_sid = vdc->session_id; \
2032
b9ba1b330453 6422255 vdc could handle handshake restarts better
lm66018
parents: 1991
diff changeset
160 dmsg.seq_num = vdc->seq_num;
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
161
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
162 /*
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
163 * The states that the read thread can be in.
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
164 */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
165 typedef enum vdc_rd_state {
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
166 VDC_READ_IDLE, /* idling - conn is not up */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
167 VDC_READ_WAITING, /* waiting for data */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
168 VDC_READ_PENDING, /* pending data avail for read */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
169 VDC_READ_RESET /* channel was reset - stop reads */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
170 } vdc_rd_state_t;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
171
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
172 /*
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
173 * The states that the vdc-vds connection can be in.
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
174 */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
175 typedef enum vdc_state {
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
176 VDC_STATE_INIT, /* device is initialized */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
177 VDC_STATE_INIT_WAITING, /* waiting for ldc connection */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
178 VDC_STATE_NEGOTIATE, /* doing handshake negotiation */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
179 VDC_STATE_HANDLE_PENDING, /* handle requests in backup dring */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
180 VDC_STATE_RUNNING, /* running and accepting requests */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
181 VDC_STATE_DETACH, /* detaching */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
182 VDC_STATE_RESETTING /* resetting connection with vds */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
183 } vdc_state_t;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
184
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
185 /*
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
186 * The states that the vdc instance can be in.
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
187 */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
188 typedef enum vdc_lc_state {
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
189 VDC_LC_ATTACHING, /* driver is attaching */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
190 VDC_LC_ONLINE, /* driver is attached and online */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
191 VDC_LC_DETACHING /* driver is detaching */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
192 } vdc_lc_state_t;
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
193
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
194 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
195 * Local Descriptor Ring entry
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
196 *
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
197 * vdc creates a Local (private) descriptor ring the same size as the
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
198 * public descriptor ring it exports to vds.
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
199 */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
200
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
201 typedef enum {
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
202 VIO_read_dir, /* read data from server */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
203 VIO_write_dir, /* write data to server */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
204 VIO_both_dir /* transfer both in and out in same buffer */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
205 } vio_desc_direction_t;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
206
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
207 typedef enum {
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
208 CB_STRATEGY, /* non-blocking strategy call */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
209 CB_SYNC /* synchronous operation */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
210 } vio_cb_type_t;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
211
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
212 typedef struct vdc_local_desc {
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
213 boolean_t is_free; /* local state - inuse or not */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
214
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
215 int operation; /* VD_OP_xxx to be performed */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
216 caddr_t addr; /* addr passed in by consumer */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
217 int slice;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
218 diskaddr_t offset; /* disk offset */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
219 size_t nbytes;
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
220 vio_cb_type_t cb_type; /* operation type blk/nonblk */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
221 void *cb_arg; /* buf passed to strategy() */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
222 vio_desc_direction_t dir; /* direction of transfer */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
223
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
224 caddr_t align_addr; /* used if addr non-aligned */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
225 ldc_mem_handle_t desc_mhdl; /* Mem handle of buf */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
226 vd_dring_entry_t *dep; /* public Dring Entry Pointer */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
227
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
228 } vdc_local_desc_t;
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
229
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
230 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
231 * vdc soft state structure
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
232 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
233 typedef struct vdc {
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
234
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
235 kmutex_t lock; /* protects next 2 sections of vars */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
236 kcondvar_t running_cv; /* signal when upper layers can send */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
237 kcondvar_t initwait_cv; /* signal when ldc conn is up */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
238 kcondvar_t dring_free_cv; /* signal when desc is avail */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
239 kcondvar_t membind_cv; /* signal when mem can be bound */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
240 boolean_t self_reset;
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
241
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
242 int initialized; /* keeps track of what's init'ed */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
243 vdc_lc_state_t lifecycle; /* Current state of the vdc instance */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
244
2032
b9ba1b330453 6422255 vdc could handle handshake restarts better
lm66018
parents: 1991
diff changeset
245 int hshake_cnt; /* number of failed handshakes */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
246 int open_count; /* count of outstanding opens */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
247 int dkio_flush_pending; /* # outstanding DKIO flushes */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
248
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
249 kthread_t *msg_proc_thr; /* main msg processing thread */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
250
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
251 kmutex_t read_lock; /* lock to protect read */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
252 kcondvar_t read_cv; /* cv to wait for READ events */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
253 vdc_rd_state_t read_state; /* current read state */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
254
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
255 uint32_t sync_op_cnt; /* num of active sync operations */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
256 boolean_t sync_op_pending; /* sync operation is pending */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
257 boolean_t sync_op_blocked; /* blocked waiting to do sync op */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
258 uint32_t sync_op_status; /* status of sync operation */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
259 kcondvar_t sync_pending_cv; /* cv wait for sync op to finish */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
260 kcondvar_t sync_blocked_cv; /* cv wait for other syncs to finish */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
261
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
262 uint64_t session_id; /* common ID sent with all messages */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
263 uint64_t seq_num; /* most recent sequence num generated */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
264 uint64_t seq_num_reply; /* Last seq num ACK/NACK'ed by vds */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
265 uint64_t req_id; /* Most recent Request ID generated */
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
266 uint64_t req_id_proc; /* Last request ID processed by vdc */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
267 vdc_state_t state; /* Current disk client-server state */
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
268
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
269 dev_info_t *dip; /* device info pointer */
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
270 int instance; /* driver instance number */
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
271
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
272 vio_ver_t ver; /* version number agreed with server */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
273 vd_disk_type_t vdisk_type; /* type of device/disk being imported */
2531
65c5d20aa275 6419154 libpcp pcp_init routine should accept service names
narayan
parents: 2410
diff changeset
274 vd_disk_label_t vdisk_label; /* label type of device/disk imported */
65c5d20aa275 6419154 libpcp pcp_init routine should accept service names
narayan
parents: 2410
diff changeset
275 uint64_t vdisk_size; /* device size in blocks */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
276 uint64_t max_xfer_sz; /* maximum block size of a descriptor */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
277 uint64_t block_size; /* device block size used */
2032
b9ba1b330453 6422255 vdc could handle handshake restarts better
lm66018
parents: 1991
diff changeset
278 struct dk_label *label; /* structure to store disk label */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
279 struct dk_cinfo *cinfo; /* structure to store DKIOCINFO data */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
280 struct dk_minfo *minfo; /* structure for DKIOCGMEDIAINFO data */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
281 struct vtoc *vtoc; /* structure to store VTOC data */
2531
65c5d20aa275 6419154 libpcp pcp_init routine should accept service names
narayan
parents: 2410
diff changeset
282 ddi_devid_t devid; /* device id */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
283
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
284 ldc_mem_info_t dring_mem_info; /* dring information */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
285 uint_t dring_curr_idx; /* current index */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
286 uint32_t dring_len; /* dring length */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
287 uint32_t dring_max_cookies; /* dring max cookies */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
288 uint32_t dring_cookie_count; /* num cookies */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
289 uint32_t dring_entry_size; /* descriptor size */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
290 ldc_mem_cookie_t *dring_cookie; /* dring cookies */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
291 uint64_t dring_ident; /* dring ident */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
292
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
293 uint64_t threads_pending; /* num of threads */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
294
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
295 vdc_local_desc_t *local_dring; /* local dring */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
296 vdc_local_desc_t *local_dring_backup; /* local dring backup */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
297 int local_dring_backup_tail; /* backup dring tail */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
298 int local_dring_backup_len; /* backup dring len */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
299
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
300 uint64_t ldc_id; /* LDC channel id */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
301 ldc_status_t ldc_state; /* LDC channel state */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
302 ldc_handle_t ldc_handle; /* LDC handle */
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
303 ldc_dring_handle_t ldc_dring_hdl; /* LDC dring handle */
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
304 } vdc_t;
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
305
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
306 /*
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
307 * Debugging macros
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
308 */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
309 #ifdef DEBUG
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
310 extern int vdc_msglevel;
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
311 extern uint64_t vdc_matchinst;
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
312
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
313 #define DMSG(_vdc, err_level, format, ...) \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
314 do { \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
315 if (vdc_msglevel > err_level && \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
316 (vdc_matchinst & (1ull << (_vdc)->instance))) \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
317 cmn_err(CE_CONT, "?[%d,t@%p] %s: "format, \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
318 (_vdc)->instance, (void *)curthread, \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
319 __func__, __VA_ARGS__); \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
320 _NOTE(CONSTANTCONDITION) \
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
321 } while (0);
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
322
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
323 #define DMSGX(err_level, format, ...) \
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
324 do { \
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
325 if (vdc_msglevel > err_level) \
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
326 cmn_err(CE_CONT, "?%s: "format, __func__, __VA_ARGS__);\
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
327 _NOTE(CONSTANTCONDITION) \
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
328 } while (0);
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
329
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
330 #define VDC_DUMP_DRING_MSG(dmsgp) \
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
331 DMSGX(0, "sq:%lu start:%d end:%d ident:%lu\n", \
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
332 dmsgp->seq_num, dmsgp->start_idx, \
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
333 dmsgp->end_idx, dmsgp->dring_ident);
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
334
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
335 #else /* !DEBUG */
2410
0faef06c73cd 6432376 vds and vdc don't negotiate max transfer size supported correctly
lm66018
parents: 2032
diff changeset
336 #define DMSG(err_level, ...)
2793
a30c4090b49f 6458676 memory leak with 12 hours all_solaris_tests.
lm66018
parents: 2531
diff changeset
337 #define DMSGX(err_level, format, ...)
1991
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
338 #define VDC_DUMP_DRING_MSG(dmsgp)
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
339
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
340 #endif /* !DEBUG */
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
341
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
342 #ifdef __cplusplus
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
343 }
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
344 #endif
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
345
f29baf5bf770 FWARC 2005/633 Project Q Logial Domaining Umbrella
heppo
parents:
diff changeset
346 #endif /* _VDC_H */