Revision b000dfbd
b/hw/qdev-addr.c | ||
---|---|---|
42 | 42 |
int64_t value; |
43 | 43 |
|
44 | 44 |
if (dev->realized) { |
45 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
45 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
46 | 46 |
return; |
47 | 47 |
} |
48 | 48 |
|
b/hw/qdev-properties-system.c | ||
---|---|---|
43 | 43 |
int ret; |
44 | 44 |
|
45 | 45 |
if (dev->realized) { |
46 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
46 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
47 | 47 |
return; |
48 | 48 |
} |
49 | 49 |
|
... | ... | |
287 | 287 |
NetClientState *hubport; |
288 | 288 |
|
289 | 289 |
if (dev->realized) { |
290 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
290 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
291 | 291 |
return; |
292 | 292 |
} |
293 | 293 |
|
b/hw/qdev-properties.c | ||
---|---|---|
7 | 7 |
#include "qapi/visitor.h" |
8 | 8 |
#include "char/char.h" |
9 | 9 |
|
10 |
void qdev_prop_set_after_realize(DeviceState *dev, const char *name, |
|
11 |
Error **errp) |
|
12 |
{ |
|
13 |
if (dev->id) { |
|
14 |
error_setg(errp, "Attempt to set property '%s' on device '%s' " |
|
15 |
"(type '%s') after it was realized", name, dev->id, |
|
16 |
object_get_typename(OBJECT(dev))); |
|
17 |
} else { |
|
18 |
error_setg(errp, "Attempt to set property '%s' on anonymous device " |
|
19 |
"(type '%s') after it was realized", name, |
|
20 |
object_get_typename(OBJECT(dev))); |
|
21 |
} |
|
22 |
} |
|
23 |
|
|
10 | 24 |
void *qdev_get_prop_ptr(DeviceState *dev, Property *prop) |
11 | 25 |
{ |
12 | 26 |
void *ptr = dev; |
... | ... | |
33 | 47 |
int *ptr = qdev_get_prop_ptr(dev, prop); |
34 | 48 |
|
35 | 49 |
if (dev->realized) { |
36 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
50 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
37 | 51 |
return; |
38 | 52 |
} |
39 | 53 |
|
... | ... | |
86 | 100 |
bool value; |
87 | 101 |
|
88 | 102 |
if (dev->realized) { |
89 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
103 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
90 | 104 |
return; |
91 | 105 |
} |
92 | 106 |
|
... | ... | |
126 | 140 |
uint8_t *ptr = qdev_get_prop_ptr(dev, prop); |
127 | 141 |
|
128 | 142 |
if (dev->realized) { |
129 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
143 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
130 | 144 |
return; |
131 | 145 |
} |
132 | 146 |
|
... | ... | |
193 | 207 |
uint16_t *ptr = qdev_get_prop_ptr(dev, prop); |
194 | 208 |
|
195 | 209 |
if (dev->realized) { |
196 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
210 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
197 | 211 |
return; |
198 | 212 |
} |
199 | 213 |
|
... | ... | |
226 | 240 |
uint32_t *ptr = qdev_get_prop_ptr(dev, prop); |
227 | 241 |
|
228 | 242 |
if (dev->realized) { |
229 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
243 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
230 | 244 |
return; |
231 | 245 |
} |
232 | 246 |
|
... | ... | |
251 | 265 |
int32_t *ptr = qdev_get_prop_ptr(dev, prop); |
252 | 266 |
|
253 | 267 |
if (dev->realized) { |
254 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
268 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
255 | 269 |
return; |
256 | 270 |
} |
257 | 271 |
|
... | ... | |
324 | 338 |
uint64_t *ptr = qdev_get_prop_ptr(dev, prop); |
325 | 339 |
|
326 | 340 |
if (dev->realized) { |
327 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
341 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
328 | 342 |
return; |
329 | 343 |
} |
330 | 344 |
|
... | ... | |
414 | 428 |
char *str; |
415 | 429 |
|
416 | 430 |
if (dev->realized) { |
417 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
431 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
418 | 432 |
return; |
419 | 433 |
} |
420 | 434 |
|
... | ... | |
478 | 492 |
char *str, *p; |
479 | 493 |
|
480 | 494 |
if (dev->realized) { |
481 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
495 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
482 | 496 |
return; |
483 | 497 |
} |
484 | 498 |
|
... | ... | |
570 | 584 |
char *str; |
571 | 585 |
|
572 | 586 |
if (dev->realized) { |
573 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
587 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
574 | 588 |
return; |
575 | 589 |
} |
576 | 590 |
|
... | ... | |
641 | 655 |
const int64_t max = 32768; |
642 | 656 |
|
643 | 657 |
if (dev->realized) { |
644 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
658 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
645 | 659 |
return; |
646 | 660 |
} |
647 | 661 |
|
... | ... | |
709 | 723 |
unsigned int slot = 0, func = 0; |
710 | 724 |
|
711 | 725 |
if (dev->realized) { |
712 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
726 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
713 | 727 |
return; |
714 | 728 |
} |
715 | 729 |
|
... | ... | |
824 | 838 |
int i; |
825 | 839 |
|
826 | 840 |
if (dev->realized) { |
827 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
841 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
828 | 842 |
return; |
829 | 843 |
} |
830 | 844 |
if (*alenptr) { |
b/hw/qdev-properties.h | ||
---|---|---|
167 | 167 |
*/ |
168 | 168 |
void qdev_property_add_static(DeviceState *dev, Property *prop, Error **errp); |
169 | 169 |
|
170 |
/** |
|
171 |
* @qdev_prop_set_after_realize: |
|
172 |
* @dev: device |
|
173 |
* @name: name of property |
|
174 |
* @errp: indirect pointer to Error to be set |
|
175 |
* Set the Error object to report that an attempt was made to set a property |
|
176 |
* on a device after it has already been realized. This is a utility function |
|
177 |
* which allows property-setter functions to easily report the error in |
|
178 |
* a friendly format identifying both the device and the property. |
|
179 |
*/ |
|
180 |
void qdev_prop_set_after_realize(DeviceState *dev, const char *name, |
|
181 |
Error **errp); |
|
170 | 182 |
#endif |
b/hw/qdev.c | ||
---|---|---|
562 | 562 |
int ret; |
563 | 563 |
|
564 | 564 |
if (dev->realized) { |
565 |
error_set(errp, QERR_PERMISSION_DENIED);
|
|
565 |
qdev_prop_set_after_realize(dev, name, errp);
|
|
566 | 566 |
return; |
567 | 567 |
} |
568 | 568 |
|
Also available in: Unified diff