50
void nodeDeviceLock(virDeviceMonitorStatePtr driver)
52
DEBUG("LOCK node %p", driver);
53
virMutexLock(&driver->lock);
55
void nodeDeviceUnlock(virDeviceMonitorStatePtr driver)
57
DEBUG("UNLOCK node %p", driver);
58
virMutexUnlock(&driver->lock);
48
61
static int nodeNumOfDevices(virConnectPtr conn,
50
63
unsigned int flags ATTRIBUTE_UNUSED)
74
for (i = 0; i < driver->devs.count && ndevs < maxnames; i++)
87
nodeDeviceLock(driver);
88
for (i = 0; i < driver->devs.count && ndevs < maxnames; i++) {
89
virNodeDeviceObjLock(driver->devs.objs[i]);
76
dev_has_cap(driver->devs.objs[i], cap))
77
if ((names[ndevs++] = strdup(driver->devs.objs[i]->def->name)) == NULL)
91
dev_has_cap(driver->devs.objs[i], cap)) {
92
if ((names[ndevs++] = strdup(driver->devs.objs[i]->def->name)) == NULL) {
93
virNodeDeviceObjUnlock(driver->devs.objs[i]);
97
virNodeDeviceObjUnlock(driver->devs.objs[i]);
99
nodeDeviceUnlock(driver);
104
nodeDeviceUnlock(driver);
84
106
while (--ndevs >= 0)
85
107
VIR_FREE(names[ndevs]);
93
115
virDeviceMonitorStatePtr driver = conn->devMonPrivateData;
94
virNodeDeviceObjPtr obj = virNodeDeviceFindByName(&driver->devs, name);
116
virNodeDeviceObjPtr obj;
117
virNodeDevicePtr ret = NULL;
119
nodeDeviceLock(driver);
120
obj = virNodeDeviceFindByName(&driver->devs, name);
121
nodeDeviceUnlock(driver);
97
124
virNodeDeviceReportError(conn, VIR_ERR_INVALID_NODE_DEVICE,
98
125
"%s", _("no node device with matching name"));
102
return virGetNodeDevice(conn, name);
129
ret = virGetNodeDevice(conn, name);
133
virNodeDeviceObjUnlock(obj);
106
137
static char *nodeDeviceDumpXML(virNodeDevicePtr dev,
107
138
unsigned int flags ATTRIBUTE_UNUSED)
109
140
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
110
virNodeDeviceObjPtr obj = virNodeDeviceFindByName(&driver->devs, dev->name);
141
virNodeDeviceObjPtr obj;
144
nodeDeviceLock(driver);
145
obj = virNodeDeviceFindByName(&driver->devs, dev->name);
146
nodeDeviceUnlock(driver);
113
149
virNodeDeviceReportError(dev->conn, VIR_ERR_INVALID_NODE_DEVICE,
114
150
"%s", _("no node device with matching name"));
118
return virNodeDeviceDefFormat(dev->conn, obj->def);
154
ret = virNodeDeviceDefFormat(dev->conn, obj->def);
158
virNodeDeviceObjUnlock(obj);
122
163
static char *nodeDeviceGetParent(virNodeDevicePtr dev)
124
165
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
125
virNodeDeviceObjPtr obj = virNodeDeviceFindByName(&driver->devs, dev->name);
166
virNodeDeviceObjPtr obj;
169
nodeDeviceLock(driver);
170
obj = virNodeDeviceFindByName(&driver->devs, dev->name);
171
nodeDeviceUnlock(driver);
128
174
virNodeDeviceReportError(dev->conn, VIR_ERR_INVALID_NODE_DEVICE,
129
175
"%s", _("no node device with matching name"));
133
return obj->def->parent;
179
ret = strdup(obj->def->parent);
181
virReportOOMError(dev->conn);
185
virNodeDeviceObjUnlock(obj);
137
190
static int nodeDeviceNumOfCaps(virNodeDevicePtr dev)
139
192
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
140
virNodeDeviceObjPtr obj = virNodeDeviceFindByName(&driver->devs, dev->name);
193
virNodeDeviceObjPtr obj;
141
194
virNodeDevCapsDefPtr caps;
198
nodeDeviceLock(driver);
199
obj = virNodeDeviceFindByName(&driver->devs, dev->name);
200
nodeDeviceUnlock(driver);
145
203
virNodeDeviceReportError(dev->conn, VIR_ERR_INVALID_NODE_DEVICE,
146
204
"%s", _("no node device with matching name"));
150
208
for (caps = obj->def->caps; caps; caps = caps->next)
214
virNodeDeviceObjUnlock(obj);
158
220
nodeDeviceListCaps(virNodeDevicePtr dev, char **const names, int maxnames)
160
222
virDeviceMonitorStatePtr driver = dev->conn->devMonPrivateData;
161
virNodeDeviceObjPtr obj = virNodeDeviceFindByName(&driver->devs, dev->name);
223
virNodeDeviceObjPtr obj;
162
224
virNodeDevCapsDefPtr caps;
228
nodeDeviceLock(driver);
229
obj = virNodeDeviceFindByName(&driver->devs, dev->name);
230
nodeDeviceUnlock(driver);
166
233
virNodeDeviceReportError(dev->conn, VIR_ERR_INVALID_NODE_DEVICE,
167
234
"%s", _("no node device with matching name"));
171
238
for (caps = obj->def->caps; caps && ncaps < maxnames; caps = caps->next) {
172
239
names[ncaps] = strdup(virNodeDevCapTypeToString(caps->type));
173
240
if (names[ncaps++] == NULL)
182
VIR_FREE(names[ncaps]);
247
virNodeDeviceObjUnlock(obj);
251
VIR_FREE(names[ncaps]);