savevm.c 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179
  1. /*
  2. * QEMU System Emulator
  3. *
  4. * Copyright (c) 2003-2008 Fabrice Bellard
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. * THE SOFTWARE.
  23. */
  24. #include <unistd.h>
  25. #include <fcntl.h>
  26. #include <time.h>
  27. #include <errno.h>
  28. #include <sys/time.h>
  29. #include <zlib.h>
  30. /* Needed early for CONFIG_BSD etc. */
  31. #include "config-host.h"
  32. #ifndef _WIN32
  33. #include <sys/times.h>
  34. #include <sys/wait.h>
  35. #include <termios.h>
  36. #include <sys/mman.h>
  37. #include <sys/ioctl.h>
  38. #include <sys/resource.h>
  39. #include <sys/socket.h>
  40. #include <netinet/in.h>
  41. #include <net/if.h>
  42. #include <arpa/inet.h>
  43. #include <dirent.h>
  44. #include <netdb.h>
  45. #include <sys/select.h>
  46. #ifdef CONFIG_BSD
  47. #include <sys/stat.h>
  48. #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
  49. #include <libutil.h>
  50. #else
  51. #include <util.h>
  52. #endif
  53. #ifdef __linux__
  54. #include <pty.h>
  55. #include <malloc.h>
  56. #include <linux/rtc.h>
  57. #endif
  58. #endif
  59. #endif
  60. #ifdef _WIN32
  61. #include <windows.h>
  62. #include <malloc.h>
  63. #include <sys/timeb.h>
  64. #include <mmsystem.h>
  65. #define getopt_long_only getopt_long
  66. #define memalign(align, size) malloc(size)
  67. #endif
  68. #include "qemu-common.h"
  69. #include "hw/hw.h"
  70. #include "hw/qdev.h"
  71. #include "net.h"
  72. #include "monitor.h"
  73. #include "sysemu.h"
  74. #include "qemu-timer.h"
  75. #include "qemu-char.h"
  76. #include "audio/audio.h"
  77. #include "migration.h"
  78. #include "qemu_socket.h"
  79. #include "qemu-queue.h"
  80. #include "cpus.h"
  81. #define SELF_ANNOUNCE_ROUNDS 5
  82. #ifndef ETH_P_RARP
  83. #define ETH_P_RARP 0x8035
  84. #endif
  85. #define ARP_HTYPE_ETH 0x0001
  86. #define ARP_PTYPE_IP 0x0800
  87. #define ARP_OP_REQUEST_REV 0x3
  88. static int announce_self_create(uint8_t *buf,
  89. uint8_t *mac_addr)
  90. {
  91. /* Ethernet header. */
  92. memset(buf, 0xff, 6); /* destination MAC addr */
  93. memcpy(buf + 6, mac_addr, 6); /* source MAC addr */
  94. *(uint16_t *)(buf + 12) = htons(ETH_P_RARP); /* ethertype */
  95. /* RARP header. */
  96. *(uint16_t *)(buf + 14) = htons(ARP_HTYPE_ETH); /* hardware addr space */
  97. *(uint16_t *)(buf + 16) = htons(ARP_PTYPE_IP); /* protocol addr space */
  98. *(buf + 18) = 6; /* hardware addr length (ethernet) */
  99. *(buf + 19) = 4; /* protocol addr length (IPv4) */
  100. *(uint16_t *)(buf + 20) = htons(ARP_OP_REQUEST_REV); /* opcode */
  101. memcpy(buf + 22, mac_addr, 6); /* source hw addr */
  102. memset(buf + 28, 0x00, 4); /* source protocol addr */
  103. memcpy(buf + 32, mac_addr, 6); /* target hw addr */
  104. memset(buf + 38, 0x00, 4); /* target protocol addr */
  105. /* Padding to get up to 60 bytes (ethernet min packet size, minus FCS). */
  106. memset(buf + 42, 0x00, 18);
  107. return 60; /* len (FCS will be added by hardware) */
  108. }
  109. static void qemu_announce_self_iter(NICState *nic, void *opaque)
  110. {
  111. uint8_t buf[60];
  112. int len;
  113. len = announce_self_create(buf, nic->conf->macaddr.a);
  114. qemu_send_packet_raw(&nic->nc, buf, len);
  115. }
  116. static void qemu_announce_self_once(void *opaque)
  117. {
  118. static int count = SELF_ANNOUNCE_ROUNDS;
  119. QEMUTimer *timer = *(QEMUTimer **)opaque;
  120. qemu_foreach_nic(qemu_announce_self_iter, NULL);
  121. if (--count) {
  122. /* delay 50ms, 150ms, 250ms, ... */
  123. qemu_mod_timer(timer, qemu_get_clock_ms(rt_clock) +
  124. 50 + (SELF_ANNOUNCE_ROUNDS - count - 1) * 100);
  125. } else {
  126. qemu_del_timer(timer);
  127. qemu_free_timer(timer);
  128. }
  129. }
  130. void qemu_announce_self(void)
  131. {
  132. static QEMUTimer *timer;
  133. timer = qemu_new_timer_ms(rt_clock, qemu_announce_self_once, &timer);
  134. qemu_announce_self_once(&timer);
  135. }
  136. /***********************************************************/
  137. /* savevm/loadvm support */
  138. #define IO_BUF_SIZE 32768
  139. struct QEMUFile {
  140. QEMUFilePutBufferFunc *put_buffer;
  141. QEMUFileGetBufferFunc *get_buffer;
  142. QEMUFileCloseFunc *close;
  143. QEMUFileRateLimit *rate_limit;
  144. QEMUFileSetRateLimit *set_rate_limit;
  145. QEMUFileGetRateLimit *get_rate_limit;
  146. void *opaque;
  147. int is_write;
  148. int64_t buf_offset; /* start of buffer when writing, end of buffer
  149. when reading */
  150. int buf_index;
  151. int buf_size; /* 0 when writing */
  152. uint8_t buf[IO_BUF_SIZE];
  153. int has_error;
  154. };
  155. typedef struct QEMUFileStdio
  156. {
  157. FILE *stdio_file;
  158. QEMUFile *file;
  159. } QEMUFileStdio;
  160. typedef struct QEMUFileSocket
  161. {
  162. int fd;
  163. QEMUFile *file;
  164. } QEMUFileSocket;
  165. static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
  166. {
  167. QEMUFileSocket *s = opaque;
  168. ssize_t len;
  169. do {
  170. len = qemu_recv(s->fd, buf, size, 0);
  171. } while (len == -1 && socket_error() == EINTR);
  172. if (len == -1)
  173. len = -socket_error();
  174. return len;
  175. }
  176. static int socket_close(void *opaque)
  177. {
  178. QEMUFileSocket *s = opaque;
  179. qemu_free(s);
  180. return 0;
  181. }
  182. static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
  183. {
  184. QEMUFileStdio *s = opaque;
  185. return fwrite(buf, 1, size, s->stdio_file);
  186. }
  187. static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
  188. {
  189. QEMUFileStdio *s = opaque;
  190. FILE *fp = s->stdio_file;
  191. int bytes;
  192. do {
  193. clearerr(fp);
  194. bytes = fread(buf, 1, size, fp);
  195. } while ((bytes == 0) && ferror(fp) && (errno == EINTR));
  196. return bytes;
  197. }
  198. static int stdio_pclose(void *opaque)
  199. {
  200. QEMUFileStdio *s = opaque;
  201. int ret;
  202. ret = pclose(s->stdio_file);
  203. qemu_free(s);
  204. return ret;
  205. }
  206. static int stdio_fclose(void *opaque)
  207. {
  208. QEMUFileStdio *s = opaque;
  209. fclose(s->stdio_file);
  210. qemu_free(s);
  211. return 0;
  212. }
  213. QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
  214. {
  215. QEMUFileStdio *s;
  216. if (stdio_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
  217. fprintf(stderr, "qemu_popen: Argument validity check failed\n");
  218. return NULL;
  219. }
  220. s = qemu_mallocz(sizeof(QEMUFileStdio));
  221. s->stdio_file = stdio_file;
  222. if(mode[0] == 'r') {
  223. s->file = qemu_fopen_ops(s, NULL, stdio_get_buffer, stdio_pclose,
  224. NULL, NULL, NULL);
  225. } else {
  226. s->file = qemu_fopen_ops(s, stdio_put_buffer, NULL, stdio_pclose,
  227. NULL, NULL, NULL);
  228. }
  229. return s->file;
  230. }
  231. QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
  232. {
  233. FILE *popen_file;
  234. popen_file = popen(command, mode);
  235. if(popen_file == NULL) {
  236. return NULL;
  237. }
  238. return qemu_popen(popen_file, mode);
  239. }
  240. int qemu_stdio_fd(QEMUFile *f)
  241. {
  242. QEMUFileStdio *p;
  243. int fd;
  244. p = (QEMUFileStdio *)f->opaque;
  245. fd = fileno(p->stdio_file);
  246. return fd;
  247. }
  248. QEMUFile *qemu_fdopen(int fd, const char *mode)
  249. {
  250. QEMUFileStdio *s;
  251. if (mode == NULL ||
  252. (mode[0] != 'r' && mode[0] != 'w') ||
  253. mode[1] != 'b' || mode[2] != 0) {
  254. fprintf(stderr, "qemu_fdopen: Argument validity check failed\n");
  255. return NULL;
  256. }
  257. s = qemu_mallocz(sizeof(QEMUFileStdio));
  258. s->stdio_file = fdopen(fd, mode);
  259. if (!s->stdio_file)
  260. goto fail;
  261. if(mode[0] == 'r') {
  262. s->file = qemu_fopen_ops(s, NULL, stdio_get_buffer, stdio_fclose,
  263. NULL, NULL, NULL);
  264. } else {
  265. s->file = qemu_fopen_ops(s, stdio_put_buffer, NULL, stdio_fclose,
  266. NULL, NULL, NULL);
  267. }
  268. return s->file;
  269. fail:
  270. qemu_free(s);
  271. return NULL;
  272. }
  273. QEMUFile *qemu_fopen_socket(int fd)
  274. {
  275. QEMUFileSocket *s = qemu_mallocz(sizeof(QEMUFileSocket));
  276. s->fd = fd;
  277. s->file = qemu_fopen_ops(s, NULL, socket_get_buffer, socket_close,
  278. NULL, NULL, NULL);
  279. return s->file;
  280. }
  281. static int file_put_buffer(void *opaque, const uint8_t *buf,
  282. int64_t pos, int size)
  283. {
  284. QEMUFileStdio *s = opaque;
  285. fseek(s->stdio_file, pos, SEEK_SET);
  286. return fwrite(buf, 1, size, s->stdio_file);
  287. }
  288. static int file_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
  289. {
  290. QEMUFileStdio *s = opaque;
  291. fseek(s->stdio_file, pos, SEEK_SET);
  292. return fread(buf, 1, size, s->stdio_file);
  293. }
  294. QEMUFile *qemu_fopen(const char *filename, const char *mode)
  295. {
  296. QEMUFileStdio *s;
  297. if (mode == NULL ||
  298. (mode[0] != 'r' && mode[0] != 'w') ||
  299. mode[1] != 'b' || mode[2] != 0) {
  300. fprintf(stderr, "qemu_fopen: Argument validity check failed\n");
  301. return NULL;
  302. }
  303. s = qemu_mallocz(sizeof(QEMUFileStdio));
  304. s->stdio_file = fopen(filename, mode);
  305. if (!s->stdio_file)
  306. goto fail;
  307. if(mode[0] == 'w') {
  308. s->file = qemu_fopen_ops(s, file_put_buffer, NULL, stdio_fclose,
  309. NULL, NULL, NULL);
  310. } else {
  311. s->file = qemu_fopen_ops(s, NULL, file_get_buffer, stdio_fclose,
  312. NULL, NULL, NULL);
  313. }
  314. return s->file;
  315. fail:
  316. qemu_free(s);
  317. return NULL;
  318. }
  319. static int block_put_buffer(void *opaque, const uint8_t *buf,
  320. int64_t pos, int size)
  321. {
  322. bdrv_save_vmstate(opaque, buf, pos, size);
  323. return size;
  324. }
  325. static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
  326. {
  327. return bdrv_load_vmstate(opaque, buf, pos, size);
  328. }
  329. static int bdrv_fclose(void *opaque)
  330. {
  331. return 0;
  332. }
  333. static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
  334. {
  335. if (is_writable)
  336. return qemu_fopen_ops(bs, block_put_buffer, NULL, bdrv_fclose,
  337. NULL, NULL, NULL);
  338. return qemu_fopen_ops(bs, NULL, block_get_buffer, bdrv_fclose, NULL, NULL, NULL);
  339. }
  340. QEMUFile *qemu_fopen_ops(void *opaque, QEMUFilePutBufferFunc *put_buffer,
  341. QEMUFileGetBufferFunc *get_buffer,
  342. QEMUFileCloseFunc *close,
  343. QEMUFileRateLimit *rate_limit,
  344. QEMUFileSetRateLimit *set_rate_limit,
  345. QEMUFileGetRateLimit *get_rate_limit)
  346. {
  347. QEMUFile *f;
  348. f = qemu_mallocz(sizeof(QEMUFile));
  349. f->opaque = opaque;
  350. f->put_buffer = put_buffer;
  351. f->get_buffer = get_buffer;
  352. f->close = close;
  353. f->rate_limit = rate_limit;
  354. f->set_rate_limit = set_rate_limit;
  355. f->get_rate_limit = get_rate_limit;
  356. f->is_write = 0;
  357. return f;
  358. }
  359. int qemu_file_has_error(QEMUFile *f)
  360. {
  361. return f->has_error;
  362. }
  363. void qemu_file_set_error(QEMUFile *f)
  364. {
  365. f->has_error = 1;
  366. }
  367. void qemu_fflush(QEMUFile *f)
  368. {
  369. if (!f->put_buffer)
  370. return;
  371. if (f->is_write && f->buf_index > 0) {
  372. int len;
  373. len = f->put_buffer(f->opaque, f->buf, f->buf_offset, f->buf_index);
  374. if (len > 0)
  375. f->buf_offset += f->buf_index;
  376. else
  377. f->has_error = 1;
  378. f->buf_index = 0;
  379. }
  380. }
  381. static void qemu_fill_buffer(QEMUFile *f)
  382. {
  383. int len;
  384. if (!f->get_buffer)
  385. return;
  386. if (f->is_write)
  387. abort();
  388. len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
  389. if (len > 0) {
  390. f->buf_index = 0;
  391. f->buf_size = len;
  392. f->buf_offset += len;
  393. } else if (len != -EAGAIN)
  394. f->has_error = 1;
  395. }
  396. int qemu_fclose(QEMUFile *f)
  397. {
  398. int ret = 0;
  399. qemu_fflush(f);
  400. if (f->close)
  401. ret = f->close(f->opaque);
  402. qemu_free(f);
  403. return ret;
  404. }
  405. void qemu_file_put_notify(QEMUFile *f)
  406. {
  407. f->put_buffer(f->opaque, NULL, 0, 0);
  408. }
  409. void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
  410. {
  411. int l;
  412. if (!f->has_error && f->is_write == 0 && f->buf_index > 0) {
  413. fprintf(stderr,
  414. "Attempted to write to buffer while read buffer is not empty\n");
  415. abort();
  416. }
  417. while (!f->has_error && size > 0) {
  418. l = IO_BUF_SIZE - f->buf_index;
  419. if (l > size)
  420. l = size;
  421. memcpy(f->buf + f->buf_index, buf, l);
  422. f->is_write = 1;
  423. f->buf_index += l;
  424. buf += l;
  425. size -= l;
  426. if (f->buf_index >= IO_BUF_SIZE)
  427. qemu_fflush(f);
  428. }
  429. }
  430. void qemu_put_byte(QEMUFile *f, int v)
  431. {
  432. if (!f->has_error && f->is_write == 0 && f->buf_index > 0) {
  433. fprintf(stderr,
  434. "Attempted to write to buffer while read buffer is not empty\n");
  435. abort();
  436. }
  437. f->buf[f->buf_index++] = v;
  438. f->is_write = 1;
  439. if (f->buf_index >= IO_BUF_SIZE)
  440. qemu_fflush(f);
  441. }
  442. int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size1)
  443. {
  444. int size, l;
  445. if (f->is_write)
  446. abort();
  447. size = size1;
  448. while (size > 0) {
  449. l = f->buf_size - f->buf_index;
  450. if (l == 0) {
  451. qemu_fill_buffer(f);
  452. l = f->buf_size - f->buf_index;
  453. if (l == 0)
  454. break;
  455. }
  456. if (l > size)
  457. l = size;
  458. memcpy(buf, f->buf + f->buf_index, l);
  459. f->buf_index += l;
  460. buf += l;
  461. size -= l;
  462. }
  463. return size1 - size;
  464. }
  465. static int qemu_peek_byte(QEMUFile *f)
  466. {
  467. if (f->is_write)
  468. abort();
  469. if (f->buf_index >= f->buf_size) {
  470. qemu_fill_buffer(f);
  471. if (f->buf_index >= f->buf_size)
  472. return 0;
  473. }
  474. return f->buf[f->buf_index];
  475. }
  476. int qemu_get_byte(QEMUFile *f)
  477. {
  478. if (f->is_write)
  479. abort();
  480. if (f->buf_index >= f->buf_size) {
  481. qemu_fill_buffer(f);
  482. if (f->buf_index >= f->buf_size)
  483. return 0;
  484. }
  485. return f->buf[f->buf_index++];
  486. }
  487. int64_t qemu_ftell(QEMUFile *f)
  488. {
  489. return f->buf_offset - f->buf_size + f->buf_index;
  490. }
  491. int64_t qemu_fseek(QEMUFile *f, int64_t pos, int whence)
  492. {
  493. if (whence == SEEK_SET) {
  494. /* nothing to do */
  495. } else if (whence == SEEK_CUR) {
  496. pos += qemu_ftell(f);
  497. } else {
  498. /* SEEK_END not supported */
  499. return -1;
  500. }
  501. if (f->put_buffer) {
  502. qemu_fflush(f);
  503. f->buf_offset = pos;
  504. } else {
  505. f->buf_offset = pos;
  506. f->buf_index = 0;
  507. f->buf_size = 0;
  508. }
  509. return pos;
  510. }
  511. int qemu_file_rate_limit(QEMUFile *f)
  512. {
  513. if (f->rate_limit)
  514. return f->rate_limit(f->opaque);
  515. return 0;
  516. }
  517. int64_t qemu_file_get_rate_limit(QEMUFile *f)
  518. {
  519. if (f->get_rate_limit)
  520. return f->get_rate_limit(f->opaque);
  521. return 0;
  522. }
  523. int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate)
  524. {
  525. /* any failed or completed migration keeps its state to allow probing of
  526. * migration data, but has no associated file anymore */
  527. if (f && f->set_rate_limit)
  528. return f->set_rate_limit(f->opaque, new_rate);
  529. return 0;
  530. }
  531. void qemu_put_be16(QEMUFile *f, unsigned int v)
  532. {
  533. qemu_put_byte(f, v >> 8);
  534. qemu_put_byte(f, v);
  535. }
  536. void qemu_put_be32(QEMUFile *f, unsigned int v)
  537. {
  538. qemu_put_byte(f, v >> 24);
  539. qemu_put_byte(f, v >> 16);
  540. qemu_put_byte(f, v >> 8);
  541. qemu_put_byte(f, v);
  542. }
  543. void qemu_put_be64(QEMUFile *f, uint64_t v)
  544. {
  545. qemu_put_be32(f, v >> 32);
  546. qemu_put_be32(f, v);
  547. }
  548. unsigned int qemu_get_be16(QEMUFile *f)
  549. {
  550. unsigned int v;
  551. v = qemu_get_byte(f) << 8;
  552. v |= qemu_get_byte(f);
  553. return v;
  554. }
  555. unsigned int qemu_get_be32(QEMUFile *f)
  556. {
  557. unsigned int v;
  558. v = qemu_get_byte(f) << 24;
  559. v |= qemu_get_byte(f) << 16;
  560. v |= qemu_get_byte(f) << 8;
  561. v |= qemu_get_byte(f);
  562. return v;
  563. }
  564. uint64_t qemu_get_be64(QEMUFile *f)
  565. {
  566. uint64_t v;
  567. v = (uint64_t)qemu_get_be32(f) << 32;
  568. v |= qemu_get_be32(f);
  569. return v;
  570. }
  571. /* bool */
  572. static int get_bool(QEMUFile *f, void *pv, size_t size)
  573. {
  574. bool *v = pv;
  575. *v = qemu_get_byte(f);
  576. return 0;
  577. }
  578. static void put_bool(QEMUFile *f, void *pv, size_t size)
  579. {
  580. bool *v = pv;
  581. qemu_put_byte(f, *v);
  582. }
  583. const VMStateInfo vmstate_info_bool = {
  584. .name = "bool",
  585. .get = get_bool,
  586. .put = put_bool,
  587. };
  588. /* 8 bit int */
  589. static int get_int8(QEMUFile *f, void *pv, size_t size)
  590. {
  591. int8_t *v = pv;
  592. qemu_get_s8s(f, v);
  593. return 0;
  594. }
  595. static void put_int8(QEMUFile *f, void *pv, size_t size)
  596. {
  597. int8_t *v = pv;
  598. qemu_put_s8s(f, v);
  599. }
  600. const VMStateInfo vmstate_info_int8 = {
  601. .name = "int8",
  602. .get = get_int8,
  603. .put = put_int8,
  604. };
  605. /* 16 bit int */
  606. static int get_int16(QEMUFile *f, void *pv, size_t size)
  607. {
  608. int16_t *v = pv;
  609. qemu_get_sbe16s(f, v);
  610. return 0;
  611. }
  612. static void put_int16(QEMUFile *f, void *pv, size_t size)
  613. {
  614. int16_t *v = pv;
  615. qemu_put_sbe16s(f, v);
  616. }
  617. const VMStateInfo vmstate_info_int16 = {
  618. .name = "int16",
  619. .get = get_int16,
  620. .put = put_int16,
  621. };
  622. /* 32 bit int */
  623. static int get_int32(QEMUFile *f, void *pv, size_t size)
  624. {
  625. int32_t *v = pv;
  626. qemu_get_sbe32s(f, v);
  627. return 0;
  628. }
  629. static void put_int32(QEMUFile *f, void *pv, size_t size)
  630. {
  631. int32_t *v = pv;
  632. qemu_put_sbe32s(f, v);
  633. }
  634. const VMStateInfo vmstate_info_int32 = {
  635. .name = "int32",
  636. .get = get_int32,
  637. .put = put_int32,
  638. };
  639. /* 32 bit int. See that the received value is the same than the one
  640. in the field */
  641. static int get_int32_equal(QEMUFile *f, void *pv, size_t size)
  642. {
  643. int32_t *v = pv;
  644. int32_t v2;
  645. qemu_get_sbe32s(f, &v2);
  646. if (*v == v2)
  647. return 0;
  648. return -EINVAL;
  649. }
  650. const VMStateInfo vmstate_info_int32_equal = {
  651. .name = "int32 equal",
  652. .get = get_int32_equal,
  653. .put = put_int32,
  654. };
  655. /* 32 bit int. See that the received value is the less or the same
  656. than the one in the field */
  657. static int get_int32_le(QEMUFile *f, void *pv, size_t size)
  658. {
  659. int32_t *old = pv;
  660. int32_t new;
  661. qemu_get_sbe32s(f, &new);
  662. if (*old <= new)
  663. return 0;
  664. return -EINVAL;
  665. }
  666. const VMStateInfo vmstate_info_int32_le = {
  667. .name = "int32 equal",
  668. .get = get_int32_le,
  669. .put = put_int32,
  670. };
  671. /* 64 bit int */
  672. static int get_int64(QEMUFile *f, void *pv, size_t size)
  673. {
  674. int64_t *v = pv;
  675. qemu_get_sbe64s(f, v);
  676. return 0;
  677. }
  678. static void put_int64(QEMUFile *f, void *pv, size_t size)
  679. {
  680. int64_t *v = pv;
  681. qemu_put_sbe64s(f, v);
  682. }
  683. const VMStateInfo vmstate_info_int64 = {
  684. .name = "int64",
  685. .get = get_int64,
  686. .put = put_int64,
  687. };
  688. /* 8 bit unsigned int */
  689. static int get_uint8(QEMUFile *f, void *pv, size_t size)
  690. {
  691. uint8_t *v = pv;
  692. qemu_get_8s(f, v);
  693. return 0;
  694. }
  695. static void put_uint8(QEMUFile *f, void *pv, size_t size)
  696. {
  697. uint8_t *v = pv;
  698. qemu_put_8s(f, v);
  699. }
  700. const VMStateInfo vmstate_info_uint8 = {
  701. .name = "uint8",
  702. .get = get_uint8,
  703. .put = put_uint8,
  704. };
  705. /* 16 bit unsigned int */
  706. static int get_uint16(QEMUFile *f, void *pv, size_t size)
  707. {
  708. uint16_t *v = pv;
  709. qemu_get_be16s(f, v);
  710. return 0;
  711. }
  712. static void put_uint16(QEMUFile *f, void *pv, size_t size)
  713. {
  714. uint16_t *v = pv;
  715. qemu_put_be16s(f, v);
  716. }
  717. const VMStateInfo vmstate_info_uint16 = {
  718. .name = "uint16",
  719. .get = get_uint16,
  720. .put = put_uint16,
  721. };
  722. /* 32 bit unsigned int */
  723. static int get_uint32(QEMUFile *f, void *pv, size_t size)
  724. {
  725. uint32_t *v = pv;
  726. qemu_get_be32s(f, v);
  727. return 0;
  728. }
  729. static void put_uint32(QEMUFile *f, void *pv, size_t size)
  730. {
  731. uint32_t *v = pv;
  732. qemu_put_be32s(f, v);
  733. }
  734. const VMStateInfo vmstate_info_uint32 = {
  735. .name = "uint32",
  736. .get = get_uint32,
  737. .put = put_uint32,
  738. };
  739. /* 32 bit uint. See that the received value is the same than the one
  740. in the field */
  741. static int get_uint32_equal(QEMUFile *f, void *pv, size_t size)
  742. {
  743. uint32_t *v = pv;
  744. uint32_t v2;
  745. qemu_get_be32s(f, &v2);
  746. if (*v == v2) {
  747. return 0;
  748. }
  749. return -EINVAL;
  750. }
  751. const VMStateInfo vmstate_info_uint32_equal = {
  752. .name = "uint32 equal",
  753. .get = get_uint32_equal,
  754. .put = put_uint32,
  755. };
  756. /* 64 bit unsigned int */
  757. static int get_uint64(QEMUFile *f, void *pv, size_t size)
  758. {
  759. uint64_t *v = pv;
  760. qemu_get_be64s(f, v);
  761. return 0;
  762. }
  763. static void put_uint64(QEMUFile *f, void *pv, size_t size)
  764. {
  765. uint64_t *v = pv;
  766. qemu_put_be64s(f, v);
  767. }
  768. const VMStateInfo vmstate_info_uint64 = {
  769. .name = "uint64",
  770. .get = get_uint64,
  771. .put = put_uint64,
  772. };
  773. /* 8 bit int. See that the received value is the same than the one
  774. in the field */
  775. static int get_uint8_equal(QEMUFile *f, void *pv, size_t size)
  776. {
  777. uint8_t *v = pv;
  778. uint8_t v2;
  779. qemu_get_8s(f, &v2);
  780. if (*v == v2)
  781. return 0;
  782. return -EINVAL;
  783. }
  784. const VMStateInfo vmstate_info_uint8_equal = {
  785. .name = "uint8 equal",
  786. .get = get_uint8_equal,
  787. .put = put_uint8,
  788. };
  789. /* 16 bit unsigned int int. See that the received value is the same than the one
  790. in the field */
  791. static int get_uint16_equal(QEMUFile *f, void *pv, size_t size)
  792. {
  793. uint16_t *v = pv;
  794. uint16_t v2;
  795. qemu_get_be16s(f, &v2);
  796. if (*v == v2)
  797. return 0;
  798. return -EINVAL;
  799. }
  800. const VMStateInfo vmstate_info_uint16_equal = {
  801. .name = "uint16 equal",
  802. .get = get_uint16_equal,
  803. .put = put_uint16,
  804. };
  805. /* timers */
  806. static int get_timer(QEMUFile *f, void *pv, size_t size)
  807. {
  808. QEMUTimer *v = pv;
  809. qemu_get_timer(f, v);
  810. return 0;
  811. }
  812. static void put_timer(QEMUFile *f, void *pv, size_t size)
  813. {
  814. QEMUTimer *v = pv;
  815. qemu_put_timer(f, v);
  816. }
  817. const VMStateInfo vmstate_info_timer = {
  818. .name = "timer",
  819. .get = get_timer,
  820. .put = put_timer,
  821. };
  822. /* uint8_t buffers */
  823. static int get_buffer(QEMUFile *f, void *pv, size_t size)
  824. {
  825. uint8_t *v = pv;
  826. qemu_get_buffer(f, v, size);
  827. return 0;
  828. }
  829. static void put_buffer(QEMUFile *f, void *pv, size_t size)
  830. {
  831. uint8_t *v = pv;
  832. qemu_put_buffer(f, v, size);
  833. }
  834. const VMStateInfo vmstate_info_buffer = {
  835. .name = "buffer",
  836. .get = get_buffer,
  837. .put = put_buffer,
  838. };
  839. /* unused buffers: space that was used for some fields that are
  840. not useful anymore */
  841. static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
  842. {
  843. uint8_t buf[1024];
  844. int block_len;
  845. while (size > 0) {
  846. block_len = MIN(sizeof(buf), size);
  847. size -= block_len;
  848. qemu_get_buffer(f, buf, block_len);
  849. }
  850. return 0;
  851. }
  852. static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
  853. {
  854. static const uint8_t buf[1024];
  855. int block_len;
  856. while (size > 0) {
  857. block_len = MIN(sizeof(buf), size);
  858. size -= block_len;
  859. qemu_put_buffer(f, buf, block_len);
  860. }
  861. }
  862. const VMStateInfo vmstate_info_unused_buffer = {
  863. .name = "unused_buffer",
  864. .get = get_unused_buffer,
  865. .put = put_unused_buffer,
  866. };
  867. typedef struct CompatEntry {
  868. char idstr[256];
  869. int instance_id;
  870. } CompatEntry;
  871. typedef struct SaveStateEntry {
  872. QTAILQ_ENTRY(SaveStateEntry) entry;
  873. char idstr[256];
  874. int instance_id;
  875. int alias_id;
  876. int version_id;
  877. int section_id;
  878. SaveSetParamsHandler *set_params;
  879. SaveLiveStateHandler *save_live_state;
  880. SaveStateHandler *save_state;
  881. LoadStateHandler *load_state;
  882. const VMStateDescription *vmsd;
  883. void *opaque;
  884. CompatEntry *compat;
  885. int no_migrate;
  886. } SaveStateEntry;
  887. static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
  888. QTAILQ_HEAD_INITIALIZER(savevm_handlers);
  889. static int global_section_id;
  890. static int calculate_new_instance_id(const char *idstr)
  891. {
  892. SaveStateEntry *se;
  893. int instance_id = 0;
  894. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  895. if (strcmp(idstr, se->idstr) == 0
  896. && instance_id <= se->instance_id) {
  897. instance_id = se->instance_id + 1;
  898. }
  899. }
  900. return instance_id;
  901. }
  902. static int calculate_compat_instance_id(const char *idstr)
  903. {
  904. SaveStateEntry *se;
  905. int instance_id = 0;
  906. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  907. if (!se->compat)
  908. continue;
  909. if (strcmp(idstr, se->compat->idstr) == 0
  910. && instance_id <= se->compat->instance_id) {
  911. instance_id = se->compat->instance_id + 1;
  912. }
  913. }
  914. return instance_id;
  915. }
  916. /* TODO: Individual devices generally have very little idea about the rest
  917. of the system, so instance_id should be removed/replaced.
  918. Meanwhile pass -1 as instance_id if you do not already have a clearly
  919. distinguishing id for all instances of your device class. */
  920. int register_savevm_live(DeviceState *dev,
  921. const char *idstr,
  922. int instance_id,
  923. int version_id,
  924. SaveSetParamsHandler *set_params,
  925. SaveLiveStateHandler *save_live_state,
  926. SaveStateHandler *save_state,
  927. LoadStateHandler *load_state,
  928. void *opaque)
  929. {
  930. SaveStateEntry *se;
  931. se = qemu_mallocz(sizeof(SaveStateEntry));
  932. se->version_id = version_id;
  933. se->section_id = global_section_id++;
  934. se->set_params = set_params;
  935. se->save_live_state = save_live_state;
  936. se->save_state = save_state;
  937. se->load_state = load_state;
  938. se->opaque = opaque;
  939. se->vmsd = NULL;
  940. se->no_migrate = 0;
  941. if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
  942. char *id = dev->parent_bus->info->get_dev_path(dev);
  943. if (id) {
  944. pstrcpy(se->idstr, sizeof(se->idstr), id);
  945. pstrcat(se->idstr, sizeof(se->idstr), "/");
  946. qemu_free(id);
  947. se->compat = qemu_mallocz(sizeof(CompatEntry));
  948. pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), idstr);
  949. se->compat->instance_id = instance_id == -1 ?
  950. calculate_compat_instance_id(idstr) : instance_id;
  951. instance_id = -1;
  952. }
  953. }
  954. pstrcat(se->idstr, sizeof(se->idstr), idstr);
  955. if (instance_id == -1) {
  956. se->instance_id = calculate_new_instance_id(se->idstr);
  957. } else {
  958. se->instance_id = instance_id;
  959. }
  960. assert(!se->compat || se->instance_id == 0);
  961. /* add at the end of list */
  962. QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
  963. return 0;
  964. }
  965. int register_savevm(DeviceState *dev,
  966. const char *idstr,
  967. int instance_id,
  968. int version_id,
  969. SaveStateHandler *save_state,
  970. LoadStateHandler *load_state,
  971. void *opaque)
  972. {
  973. return register_savevm_live(dev, idstr, instance_id, version_id,
  974. NULL, NULL, save_state, load_state, opaque);
  975. }
  976. void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
  977. {
  978. SaveStateEntry *se, *new_se;
  979. char id[256] = "";
  980. if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
  981. char *path = dev->parent_bus->info->get_dev_path(dev);
  982. if (path) {
  983. pstrcpy(id, sizeof(id), path);
  984. pstrcat(id, sizeof(id), "/");
  985. qemu_free(path);
  986. }
  987. }
  988. pstrcat(id, sizeof(id), idstr);
  989. QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
  990. if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
  991. QTAILQ_REMOVE(&savevm_handlers, se, entry);
  992. if (se->compat) {
  993. qemu_free(se->compat);
  994. }
  995. qemu_free(se);
  996. }
  997. }
  998. }
  999. /* mark a device as not to be migrated, that is the device should be
  1000. unplugged before migration */
  1001. void register_device_unmigratable(DeviceState *dev, const char *idstr,
  1002. void *opaque)
  1003. {
  1004. SaveStateEntry *se;
  1005. char id[256] = "";
  1006. if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
  1007. char *path = dev->parent_bus->info->get_dev_path(dev);
  1008. if (path) {
  1009. pstrcpy(id, sizeof(id), path);
  1010. pstrcat(id, sizeof(id), "/");
  1011. qemu_free(path);
  1012. }
  1013. }
  1014. pstrcat(id, sizeof(id), idstr);
  1015. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1016. if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
  1017. se->no_migrate = 1;
  1018. }
  1019. }
  1020. }
  1021. int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
  1022. const VMStateDescription *vmsd,
  1023. void *opaque, int alias_id,
  1024. int required_for_version)
  1025. {
  1026. SaveStateEntry *se;
  1027. /* If this triggers, alias support can be dropped for the vmsd. */
  1028. assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
  1029. se = qemu_mallocz(sizeof(SaveStateEntry));
  1030. se->version_id = vmsd->version_id;
  1031. se->section_id = global_section_id++;
  1032. se->save_live_state = NULL;
  1033. se->save_state = NULL;
  1034. se->load_state = NULL;
  1035. se->opaque = opaque;
  1036. se->vmsd = vmsd;
  1037. se->alias_id = alias_id;
  1038. if (dev && dev->parent_bus && dev->parent_bus->info->get_dev_path) {
  1039. char *id = dev->parent_bus->info->get_dev_path(dev);
  1040. if (id) {
  1041. pstrcpy(se->idstr, sizeof(se->idstr), id);
  1042. pstrcat(se->idstr, sizeof(se->idstr), "/");
  1043. qemu_free(id);
  1044. se->compat = qemu_mallocz(sizeof(CompatEntry));
  1045. pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), vmsd->name);
  1046. se->compat->instance_id = instance_id == -1 ?
  1047. calculate_compat_instance_id(vmsd->name) : instance_id;
  1048. instance_id = -1;
  1049. }
  1050. }
  1051. pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
  1052. if (instance_id == -1) {
  1053. se->instance_id = calculate_new_instance_id(se->idstr);
  1054. } else {
  1055. se->instance_id = instance_id;
  1056. }
  1057. assert(!se->compat || se->instance_id == 0);
  1058. /* add at the end of list */
  1059. QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
  1060. return 0;
  1061. }
  1062. int vmstate_register(DeviceState *dev, int instance_id,
  1063. const VMStateDescription *vmsd, void *opaque)
  1064. {
  1065. return vmstate_register_with_alias_id(dev, instance_id, vmsd,
  1066. opaque, -1, 0);
  1067. }
  1068. void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
  1069. void *opaque)
  1070. {
  1071. SaveStateEntry *se, *new_se;
  1072. QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
  1073. if (se->vmsd == vmsd && se->opaque == opaque) {
  1074. QTAILQ_REMOVE(&savevm_handlers, se, entry);
  1075. if (se->compat) {
  1076. qemu_free(se->compat);
  1077. }
  1078. qemu_free(se);
  1079. }
  1080. }
  1081. }
  1082. static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
  1083. void *opaque);
  1084. static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
  1085. void *opaque);
  1086. int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
  1087. void *opaque, int version_id)
  1088. {
  1089. VMStateField *field = vmsd->fields;
  1090. int ret;
  1091. if (version_id > vmsd->version_id) {
  1092. return -EINVAL;
  1093. }
  1094. if (version_id < vmsd->minimum_version_id_old) {
  1095. return -EINVAL;
  1096. }
  1097. if (version_id < vmsd->minimum_version_id) {
  1098. return vmsd->load_state_old(f, opaque, version_id);
  1099. }
  1100. if (vmsd->pre_load) {
  1101. int ret = vmsd->pre_load(opaque);
  1102. if (ret)
  1103. return ret;
  1104. }
  1105. while(field->name) {
  1106. if ((field->field_exists &&
  1107. field->field_exists(opaque, version_id)) ||
  1108. (!field->field_exists &&
  1109. field->version_id <= version_id)) {
  1110. void *base_addr = opaque + field->offset;
  1111. int i, n_elems = 1;
  1112. int size = field->size;
  1113. if (field->flags & VMS_VBUFFER) {
  1114. size = *(int32_t *)(opaque+field->size_offset);
  1115. if (field->flags & VMS_MULTIPLY) {
  1116. size *= field->size;
  1117. }
  1118. }
  1119. if (field->flags & VMS_ARRAY) {
  1120. n_elems = field->num;
  1121. } else if (field->flags & VMS_VARRAY_INT32) {
  1122. n_elems = *(int32_t *)(opaque+field->num_offset);
  1123. } else if (field->flags & VMS_VARRAY_UINT32) {
  1124. n_elems = *(uint32_t *)(opaque+field->num_offset);
  1125. } else if (field->flags & VMS_VARRAY_UINT16) {
  1126. n_elems = *(uint16_t *)(opaque+field->num_offset);
  1127. } else if (field->flags & VMS_VARRAY_UINT8) {
  1128. n_elems = *(uint8_t *)(opaque+field->num_offset);
  1129. }
  1130. if (field->flags & VMS_POINTER) {
  1131. base_addr = *(void **)base_addr + field->start;
  1132. }
  1133. for (i = 0; i < n_elems; i++) {
  1134. void *addr = base_addr + size * i;
  1135. if (field->flags & VMS_ARRAY_OF_POINTER) {
  1136. addr = *(void **)addr;
  1137. }
  1138. if (field->flags & VMS_STRUCT) {
  1139. ret = vmstate_load_state(f, field->vmsd, addr, field->vmsd->version_id);
  1140. } else {
  1141. ret = field->info->get(f, addr, size);
  1142. }
  1143. if (ret < 0) {
  1144. return ret;
  1145. }
  1146. }
  1147. }
  1148. field++;
  1149. }
  1150. ret = vmstate_subsection_load(f, vmsd, opaque);
  1151. if (ret != 0) {
  1152. return ret;
  1153. }
  1154. if (vmsd->post_load) {
  1155. return vmsd->post_load(opaque, version_id);
  1156. }
  1157. return 0;
  1158. }
  1159. void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
  1160. void *opaque)
  1161. {
  1162. VMStateField *field = vmsd->fields;
  1163. if (vmsd->pre_save) {
  1164. vmsd->pre_save(opaque);
  1165. }
  1166. while(field->name) {
  1167. if (!field->field_exists ||
  1168. field->field_exists(opaque, vmsd->version_id)) {
  1169. void *base_addr = opaque + field->offset;
  1170. int i, n_elems = 1;
  1171. int size = field->size;
  1172. if (field->flags & VMS_VBUFFER) {
  1173. size = *(int32_t *)(opaque+field->size_offset);
  1174. if (field->flags & VMS_MULTIPLY) {
  1175. size *= field->size;
  1176. }
  1177. }
  1178. if (field->flags & VMS_ARRAY) {
  1179. n_elems = field->num;
  1180. } else if (field->flags & VMS_VARRAY_INT32) {
  1181. n_elems = *(int32_t *)(opaque+field->num_offset);
  1182. } else if (field->flags & VMS_VARRAY_UINT16) {
  1183. n_elems = *(uint16_t *)(opaque+field->num_offset);
  1184. } else if (field->flags & VMS_VARRAY_UINT8) {
  1185. n_elems = *(uint8_t *)(opaque+field->num_offset);
  1186. }
  1187. if (field->flags & VMS_POINTER) {
  1188. base_addr = *(void **)base_addr + field->start;
  1189. }
  1190. for (i = 0; i < n_elems; i++) {
  1191. void *addr = base_addr + size * i;
  1192. if (field->flags & VMS_ARRAY_OF_POINTER) {
  1193. addr = *(void **)addr;
  1194. }
  1195. if (field->flags & VMS_STRUCT) {
  1196. vmstate_save_state(f, field->vmsd, addr);
  1197. } else {
  1198. field->info->put(f, addr, size);
  1199. }
  1200. }
  1201. }
  1202. field++;
  1203. }
  1204. vmstate_subsection_save(f, vmsd, opaque);
  1205. }
  1206. static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
  1207. {
  1208. if (!se->vmsd) { /* Old style */
  1209. return se->load_state(f, se->opaque, version_id);
  1210. }
  1211. return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
  1212. }
  1213. static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
  1214. {
  1215. if (!se->vmsd) { /* Old style */
  1216. se->save_state(f, se->opaque);
  1217. return;
  1218. }
  1219. vmstate_save_state(f,se->vmsd, se->opaque);
  1220. }
  1221. #define QEMU_VM_FILE_MAGIC 0x5145564d
  1222. #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
  1223. #define QEMU_VM_FILE_VERSION 0x00000003
  1224. #define QEMU_VM_EOF 0x00
  1225. #define QEMU_VM_SECTION_START 0x01
  1226. #define QEMU_VM_SECTION_PART 0x02
  1227. #define QEMU_VM_SECTION_END 0x03
  1228. #define QEMU_VM_SECTION_FULL 0x04
  1229. #define QEMU_VM_SUBSECTION 0x05
  1230. bool qemu_savevm_state_blocked(Monitor *mon)
  1231. {
  1232. SaveStateEntry *se;
  1233. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1234. if (se->no_migrate) {
  1235. monitor_printf(mon, "state blocked by non-migratable device '%s'\n",
  1236. se->idstr);
  1237. return true;
  1238. }
  1239. }
  1240. return false;
  1241. }
  1242. int qemu_savevm_state_begin(Monitor *mon, QEMUFile *f, int blk_enable,
  1243. int shared)
  1244. {
  1245. SaveStateEntry *se;
  1246. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1247. if(se->set_params == NULL) {
  1248. continue;
  1249. }
  1250. se->set_params(blk_enable, shared, se->opaque);
  1251. }
  1252. qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
  1253. qemu_put_be32(f, QEMU_VM_FILE_VERSION);
  1254. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1255. int len;
  1256. if (se->save_live_state == NULL)
  1257. continue;
  1258. /* Section type */
  1259. qemu_put_byte(f, QEMU_VM_SECTION_START);
  1260. qemu_put_be32(f, se->section_id);
  1261. /* ID string */
  1262. len = strlen(se->idstr);
  1263. qemu_put_byte(f, len);
  1264. qemu_put_buffer(f, (uint8_t *)se->idstr, len);
  1265. qemu_put_be32(f, se->instance_id);
  1266. qemu_put_be32(f, se->version_id);
  1267. se->save_live_state(mon, f, QEMU_VM_SECTION_START, se->opaque);
  1268. }
  1269. if (qemu_file_has_error(f)) {
  1270. qemu_savevm_state_cancel(mon, f);
  1271. return -EIO;
  1272. }
  1273. return 0;
  1274. }
  1275. int qemu_savevm_state_iterate(Monitor *mon, QEMUFile *f)
  1276. {
  1277. SaveStateEntry *se;
  1278. int ret = 1;
  1279. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1280. if (se->save_live_state == NULL)
  1281. continue;
  1282. /* Section type */
  1283. qemu_put_byte(f, QEMU_VM_SECTION_PART);
  1284. qemu_put_be32(f, se->section_id);
  1285. ret = se->save_live_state(mon, f, QEMU_VM_SECTION_PART, se->opaque);
  1286. if (!ret) {
  1287. /* Do not proceed to the next vmstate before this one reported
  1288. completion of the current stage. This serializes the migration
  1289. and reduces the probability that a faster changing state is
  1290. synchronized over and over again. */
  1291. break;
  1292. }
  1293. }
  1294. if (ret)
  1295. return 1;
  1296. if (qemu_file_has_error(f)) {
  1297. qemu_savevm_state_cancel(mon, f);
  1298. return -EIO;
  1299. }
  1300. return 0;
  1301. }
  1302. int qemu_savevm_state_complete(Monitor *mon, QEMUFile *f)
  1303. {
  1304. SaveStateEntry *se;
  1305. cpu_synchronize_all_states();
  1306. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1307. if (se->save_live_state == NULL)
  1308. continue;
  1309. /* Section type */
  1310. qemu_put_byte(f, QEMU_VM_SECTION_END);
  1311. qemu_put_be32(f, se->section_id);
  1312. se->save_live_state(mon, f, QEMU_VM_SECTION_END, se->opaque);
  1313. }
  1314. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1315. int len;
  1316. if (se->save_state == NULL && se->vmsd == NULL)
  1317. continue;
  1318. /* Section type */
  1319. qemu_put_byte(f, QEMU_VM_SECTION_FULL);
  1320. qemu_put_be32(f, se->section_id);
  1321. /* ID string */
  1322. len = strlen(se->idstr);
  1323. qemu_put_byte(f, len);
  1324. qemu_put_buffer(f, (uint8_t *)se->idstr, len);
  1325. qemu_put_be32(f, se->instance_id);
  1326. qemu_put_be32(f, se->version_id);
  1327. vmstate_save(f, se);
  1328. }
  1329. qemu_put_byte(f, QEMU_VM_EOF);
  1330. if (qemu_file_has_error(f))
  1331. return -EIO;
  1332. return 0;
  1333. }
  1334. void qemu_savevm_state_cancel(Monitor *mon, QEMUFile *f)
  1335. {
  1336. SaveStateEntry *se;
  1337. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1338. if (se->save_live_state) {
  1339. se->save_live_state(mon, f, -1, se->opaque);
  1340. }
  1341. }
  1342. }
  1343. static int qemu_savevm_state(Monitor *mon, QEMUFile *f)
  1344. {
  1345. int saved_vm_running;
  1346. int ret;
  1347. saved_vm_running = vm_running;
  1348. vm_stop(VMSTOP_SAVEVM);
  1349. if (qemu_savevm_state_blocked(mon)) {
  1350. ret = -EINVAL;
  1351. goto out;
  1352. }
  1353. ret = qemu_savevm_state_begin(mon, f, 0, 0);
  1354. if (ret < 0)
  1355. goto out;
  1356. do {
  1357. ret = qemu_savevm_state_iterate(mon, f);
  1358. if (ret < 0)
  1359. goto out;
  1360. } while (ret == 0);
  1361. ret = qemu_savevm_state_complete(mon, f);
  1362. out:
  1363. if (qemu_file_has_error(f))
  1364. ret = -EIO;
  1365. if (!ret && saved_vm_running)
  1366. vm_start();
  1367. return ret;
  1368. }
  1369. static SaveStateEntry *find_se(const char *idstr, int instance_id)
  1370. {
  1371. SaveStateEntry *se;
  1372. QTAILQ_FOREACH(se, &savevm_handlers, entry) {
  1373. if (!strcmp(se->idstr, idstr) &&
  1374. (instance_id == se->instance_id ||
  1375. instance_id == se->alias_id))
  1376. return se;
  1377. /* Migrating from an older version? */
  1378. if (strstr(se->idstr, idstr) && se->compat) {
  1379. if (!strcmp(se->compat->idstr, idstr) &&
  1380. (instance_id == se->compat->instance_id ||
  1381. instance_id == se->alias_id))
  1382. return se;
  1383. }
  1384. }
  1385. return NULL;
  1386. }
  1387. static const VMStateDescription *vmstate_get_subsection(const VMStateSubsection *sub, char *idstr)
  1388. {
  1389. while(sub && sub->needed) {
  1390. if (strcmp(idstr, sub->vmsd->name) == 0) {
  1391. return sub->vmsd;
  1392. }
  1393. sub++;
  1394. }
  1395. return NULL;
  1396. }
  1397. static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
  1398. void *opaque)
  1399. {
  1400. const VMStateSubsection *sub = vmsd->subsections;
  1401. if (!sub || !sub->needed) {
  1402. return 0;
  1403. }
  1404. while (qemu_peek_byte(f) == QEMU_VM_SUBSECTION) {
  1405. char idstr[256];
  1406. int ret;
  1407. uint8_t version_id, len;
  1408. const VMStateDescription *sub_vmsd;
  1409. qemu_get_byte(f); /* subsection */
  1410. len = qemu_get_byte(f);
  1411. qemu_get_buffer(f, (uint8_t *)idstr, len);
  1412. idstr[len] = 0;
  1413. version_id = qemu_get_be32(f);
  1414. sub_vmsd = vmstate_get_subsection(sub, idstr);
  1415. if (sub_vmsd == NULL) {
  1416. return -ENOENT;
  1417. }
  1418. assert(!sub_vmsd->subsections);
  1419. ret = vmstate_load_state(f, sub_vmsd, opaque, version_id);
  1420. if (ret) {
  1421. return ret;
  1422. }
  1423. }
  1424. return 0;
  1425. }
  1426. static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
  1427. void *opaque)
  1428. {
  1429. const VMStateSubsection *sub = vmsd->subsections;
  1430. while (sub && sub->needed) {
  1431. if (sub->needed(opaque)) {
  1432. const VMStateDescription *vmsd = sub->vmsd;
  1433. uint8_t len;
  1434. qemu_put_byte(f, QEMU_VM_SUBSECTION);
  1435. len = strlen(vmsd->name);
  1436. qemu_put_byte(f, len);
  1437. qemu_put_buffer(f, (uint8_t *)vmsd->name, len);
  1438. qemu_put_be32(f, vmsd->version_id);
  1439. assert(!vmsd->subsections);
  1440. vmstate_save_state(f, vmsd, opaque);
  1441. }
  1442. sub++;
  1443. }
  1444. }
  1445. typedef struct LoadStateEntry {
  1446. QLIST_ENTRY(LoadStateEntry) entry;
  1447. SaveStateEntry *se;
  1448. int section_id;
  1449. int version_id;
  1450. } LoadStateEntry;
  1451. int qemu_loadvm_state(QEMUFile *f)
  1452. {
  1453. QLIST_HEAD(, LoadStateEntry) loadvm_handlers =
  1454. QLIST_HEAD_INITIALIZER(loadvm_handlers);
  1455. LoadStateEntry *le, *new_le;
  1456. uint8_t section_type;
  1457. unsigned int v;
  1458. int ret;
  1459. if (qemu_savevm_state_blocked(default_mon)) {
  1460. return -EINVAL;
  1461. }
  1462. v = qemu_get_be32(f);
  1463. if (v != QEMU_VM_FILE_MAGIC)
  1464. return -EINVAL;
  1465. v = qemu_get_be32(f);
  1466. if (v == QEMU_VM_FILE_VERSION_COMPAT) {
  1467. fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n");
  1468. return -ENOTSUP;
  1469. }
  1470. if (v != QEMU_VM_FILE_VERSION)
  1471. return -ENOTSUP;
  1472. while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
  1473. uint32_t instance_id, version_id, section_id;
  1474. SaveStateEntry *se;
  1475. char idstr[257];
  1476. int len;
  1477. switch (section_type) {
  1478. case QEMU_VM_SECTION_START:
  1479. case QEMU_VM_SECTION_FULL:
  1480. /* Read section start */
  1481. section_id = qemu_get_be32(f);
  1482. len = qemu_get_byte(f);
  1483. qemu_get_buffer(f, (uint8_t *)idstr, len);
  1484. idstr[len] = 0;
  1485. instance_id = qemu_get_be32(f);
  1486. version_id = qemu_get_be32(f);
  1487. /* Find savevm section */
  1488. se = find_se(idstr, instance_id);
  1489. if (se == NULL) {
  1490. fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
  1491. ret = -EINVAL;
  1492. goto out;
  1493. }
  1494. /* Validate version */
  1495. if (version_id > se->version_id) {
  1496. fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
  1497. version_id, idstr, se->version_id);
  1498. ret = -EINVAL;
  1499. goto out;
  1500. }
  1501. /* Add entry */
  1502. le = qemu_mallocz(sizeof(*le));
  1503. le->se = se;
  1504. le->section_id = section_id;
  1505. le->version_id = version_id;
  1506. QLIST_INSERT_HEAD(&loadvm_handlers, le, entry);
  1507. ret = vmstate_load(f, le->se, le->version_id);
  1508. if (ret < 0) {
  1509. fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
  1510. instance_id, idstr);
  1511. goto out;
  1512. }
  1513. break;
  1514. case QEMU_VM_SECTION_PART:
  1515. case QEMU_VM_SECTION_END:
  1516. section_id = qemu_get_be32(f);
  1517. QLIST_FOREACH(le, &loadvm_handlers, entry) {
  1518. if (le->section_id == section_id) {
  1519. break;
  1520. }
  1521. }
  1522. if (le == NULL) {
  1523. fprintf(stderr, "Unknown savevm section %d\n", section_id);
  1524. ret = -EINVAL;
  1525. goto out;
  1526. }
  1527. ret = vmstate_load(f, le->se, le->version_id);
  1528. if (ret < 0) {
  1529. fprintf(stderr, "qemu: warning: error while loading state section id %d\n",
  1530. section_id);
  1531. goto out;
  1532. }
  1533. break;
  1534. default:
  1535. fprintf(stderr, "Unknown savevm section type %d\n", section_type);
  1536. ret = -EINVAL;
  1537. goto out;
  1538. }
  1539. }
  1540. cpu_synchronize_all_post_init();
  1541. ret = 0;
  1542. out:
  1543. QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) {
  1544. QLIST_REMOVE(le, entry);
  1545. qemu_free(le);
  1546. }
  1547. if (qemu_file_has_error(f))
  1548. ret = -EIO;
  1549. return ret;
  1550. }
  1551. static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
  1552. const char *name)
  1553. {
  1554. QEMUSnapshotInfo *sn_tab, *sn;
  1555. int nb_sns, i, ret;
  1556. ret = -ENOENT;
  1557. nb_sns = bdrv_snapshot_list(bs, &sn_tab);
  1558. if (nb_sns < 0)
  1559. return ret;
  1560. for(i = 0; i < nb_sns; i++) {
  1561. sn = &sn_tab[i];
  1562. if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
  1563. *sn_info = *sn;
  1564. ret = 0;
  1565. break;
  1566. }
  1567. }
  1568. qemu_free(sn_tab);
  1569. return ret;
  1570. }
  1571. /*
  1572. * Deletes snapshots of a given name in all opened images.
  1573. */
  1574. static int del_existing_snapshots(Monitor *mon, const char *name)
  1575. {
  1576. BlockDriverState *bs;
  1577. QEMUSnapshotInfo sn1, *snapshot = &sn1;
  1578. int ret;
  1579. bs = NULL;
  1580. while ((bs = bdrv_next(bs))) {
  1581. if (bdrv_can_snapshot(bs) &&
  1582. bdrv_snapshot_find(bs, snapshot, name) >= 0)
  1583. {
  1584. ret = bdrv_snapshot_delete(bs, name);
  1585. if (ret < 0) {
  1586. monitor_printf(mon,
  1587. "Error while deleting snapshot on '%s'\n",
  1588. bdrv_get_device_name(bs));
  1589. return -1;
  1590. }
  1591. }
  1592. }
  1593. return 0;
  1594. }
  1595. void do_savevm(Monitor *mon, const QDict *qdict)
  1596. {
  1597. BlockDriverState *bs, *bs1;
  1598. QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
  1599. int ret;
  1600. QEMUFile *f;
  1601. int saved_vm_running;
  1602. uint32_t vm_state_size;
  1603. #ifdef _WIN32
  1604. struct _timeb tb;
  1605. struct tm *ptm;
  1606. #else
  1607. struct timeval tv;
  1608. struct tm tm;
  1609. #endif
  1610. const char *name = qdict_get_try_str(qdict, "name");
  1611. /* Verify if there is a device that doesn't support snapshots and is writable */
  1612. bs = NULL;
  1613. while ((bs = bdrv_next(bs))) {
  1614. if (bdrv_is_removable(bs) || bdrv_is_read_only(bs)) {
  1615. continue;
  1616. }
  1617. if (!bdrv_can_snapshot(bs)) {
  1618. monitor_printf(mon, "Device '%s' is writable but does not support snapshots.\n",
  1619. bdrv_get_device_name(bs));
  1620. return;
  1621. }
  1622. }
  1623. bs = bdrv_snapshots();
  1624. if (!bs) {
  1625. monitor_printf(mon, "No block device can accept snapshots\n");
  1626. return;
  1627. }
  1628. saved_vm_running = vm_running;
  1629. vm_stop(VMSTOP_SAVEVM);
  1630. memset(sn, 0, sizeof(*sn));
  1631. /* fill auxiliary fields */
  1632. #ifdef _WIN32
  1633. _ftime(&tb);
  1634. sn->date_sec = tb.time;
  1635. sn->date_nsec = tb.millitm * 1000000;
  1636. #else
  1637. gettimeofday(&tv, NULL);
  1638. sn->date_sec = tv.tv_sec;
  1639. sn->date_nsec = tv.tv_usec * 1000;
  1640. #endif
  1641. sn->vm_clock_nsec = qemu_get_clock_ns(vm_clock);
  1642. if (name) {
  1643. ret = bdrv_snapshot_find(bs, old_sn, name);
  1644. if (ret >= 0) {
  1645. pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
  1646. pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
  1647. } else {
  1648. pstrcpy(sn->name, sizeof(sn->name), name);
  1649. }
  1650. } else {
  1651. #ifdef _WIN32
  1652. ptm = localtime(&tb.time);
  1653. strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", ptm);
  1654. #else
  1655. /* cast below needed for OpenBSD where tv_sec is still 'long' */
  1656. localtime_r((const time_t *)&tv.tv_sec, &tm);
  1657. strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
  1658. #endif
  1659. }
  1660. /* Delete old snapshots of the same name */
  1661. if (name && del_existing_snapshots(mon, name) < 0) {
  1662. goto the_end;
  1663. }
  1664. /* save the VM state */
  1665. f = qemu_fopen_bdrv(bs, 1);
  1666. if (!f) {
  1667. monitor_printf(mon, "Could not open VM state file\n");
  1668. goto the_end;
  1669. }
  1670. ret = qemu_savevm_state(mon, f);
  1671. vm_state_size = qemu_ftell(f);
  1672. qemu_fclose(f);
  1673. if (ret < 0) {
  1674. monitor_printf(mon, "Error %d while writing VM\n", ret);
  1675. goto the_end;
  1676. }
  1677. /* create the snapshots */
  1678. bs1 = NULL;
  1679. while ((bs1 = bdrv_next(bs1))) {
  1680. if (bdrv_can_snapshot(bs1)) {
  1681. /* Write VM state size only to the image that contains the state */
  1682. sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
  1683. ret = bdrv_snapshot_create(bs1, sn);
  1684. if (ret < 0) {
  1685. monitor_printf(mon, "Error while creating snapshot on '%s'\n",
  1686. bdrv_get_device_name(bs1));
  1687. }
  1688. }
  1689. }
  1690. the_end:
  1691. if (saved_vm_running)
  1692. vm_start();
  1693. }
  1694. int load_vmstate(const char *name)
  1695. {
  1696. BlockDriverState *bs, *bs_vm_state;
  1697. QEMUSnapshotInfo sn;
  1698. QEMUFile *f;
  1699. int ret;
  1700. bs_vm_state = bdrv_snapshots();
  1701. if (!bs_vm_state) {
  1702. error_report("No block device supports snapshots");
  1703. return -ENOTSUP;
  1704. }
  1705. /* Don't even try to load empty VM states */
  1706. ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
  1707. if (ret < 0) {
  1708. return ret;
  1709. } else if (sn.vm_state_size == 0) {
  1710. error_report("This is a disk-only snapshot. Revert to it offline "
  1711. "using qemu-img.");
  1712. return -EINVAL;
  1713. }
  1714. /* Verify if there is any device that doesn't support snapshots and is
  1715. writable and check if the requested snapshot is available too. */
  1716. bs = NULL;
  1717. while ((bs = bdrv_next(bs))) {
  1718. if (bdrv_is_removable(bs) || bdrv_is_read_only(bs)) {
  1719. continue;
  1720. }
  1721. if (!bdrv_can_snapshot(bs)) {
  1722. error_report("Device '%s' is writable but does not support snapshots.",
  1723. bdrv_get_device_name(bs));
  1724. return -ENOTSUP;
  1725. }
  1726. ret = bdrv_snapshot_find(bs, &sn, name);
  1727. if (ret < 0) {
  1728. error_report("Device '%s' does not have the requested snapshot '%s'",
  1729. bdrv_get_device_name(bs), name);
  1730. return ret;
  1731. }
  1732. }
  1733. /* Flush all IO requests so they don't interfere with the new state. */
  1734. qemu_aio_flush();
  1735. bs = NULL;
  1736. while ((bs = bdrv_next(bs))) {
  1737. if (bdrv_can_snapshot(bs)) {
  1738. ret = bdrv_snapshot_goto(bs, name);
  1739. if (ret < 0) {
  1740. error_report("Error %d while activating snapshot '%s' on '%s'",
  1741. ret, name, bdrv_get_device_name(bs));
  1742. return ret;
  1743. }
  1744. }
  1745. }
  1746. /* restore the VM state */
  1747. f = qemu_fopen_bdrv(bs_vm_state, 0);
  1748. if (!f) {
  1749. error_report("Could not open VM state file");
  1750. return -EINVAL;
  1751. }
  1752. qemu_system_reset(VMRESET_SILENT);
  1753. ret = qemu_loadvm_state(f);
  1754. qemu_fclose(f);
  1755. if (ret < 0) {
  1756. error_report("Error %d while loading VM state", ret);
  1757. return ret;
  1758. }
  1759. return 0;
  1760. }
  1761. void do_delvm(Monitor *mon, const QDict *qdict)
  1762. {
  1763. BlockDriverState *bs, *bs1;
  1764. int ret;
  1765. const char *name = qdict_get_str(qdict, "name");
  1766. bs = bdrv_snapshots();
  1767. if (!bs) {
  1768. monitor_printf(mon, "No block device supports snapshots\n");
  1769. return;
  1770. }
  1771. bs1 = NULL;
  1772. while ((bs1 = bdrv_next(bs1))) {
  1773. if (bdrv_can_snapshot(bs1)) {
  1774. ret = bdrv_snapshot_delete(bs1, name);
  1775. if (ret < 0) {
  1776. if (ret == -ENOTSUP)
  1777. monitor_printf(mon,
  1778. "Snapshots not supported on device '%s'\n",
  1779. bdrv_get_device_name(bs1));
  1780. else
  1781. monitor_printf(mon, "Error %d while deleting snapshot on "
  1782. "'%s'\n", ret, bdrv_get_device_name(bs1));
  1783. }
  1784. }
  1785. }
  1786. }
  1787. void do_info_snapshots(Monitor *mon)
  1788. {
  1789. BlockDriverState *bs, *bs1;
  1790. QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
  1791. int nb_sns, i, ret, available;
  1792. int total;
  1793. int *available_snapshots;
  1794. char buf[256];
  1795. bs = bdrv_snapshots();
  1796. if (!bs) {
  1797. monitor_printf(mon, "No available block device supports snapshots\n");
  1798. return;
  1799. }
  1800. nb_sns = bdrv_snapshot_list(bs, &sn_tab);
  1801. if (nb_sns < 0) {
  1802. monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
  1803. return;
  1804. }
  1805. if (nb_sns == 0) {
  1806. monitor_printf(mon, "There is no snapshot available.\n");
  1807. return;
  1808. }
  1809. available_snapshots = qemu_mallocz(sizeof(int) * nb_sns);
  1810. total = 0;
  1811. for (i = 0; i < nb_sns; i++) {
  1812. sn = &sn_tab[i];
  1813. available = 1;
  1814. bs1 = NULL;
  1815. while ((bs1 = bdrv_next(bs1))) {
  1816. if (bdrv_can_snapshot(bs1) && bs1 != bs) {
  1817. ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
  1818. if (ret < 0) {
  1819. available = 0;
  1820. break;
  1821. }
  1822. }
  1823. }
  1824. if (available) {
  1825. available_snapshots[total] = i;
  1826. total++;
  1827. }
  1828. }
  1829. if (total > 0) {
  1830. monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
  1831. for (i = 0; i < total; i++) {
  1832. sn = &sn_tab[available_snapshots[i]];
  1833. monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
  1834. }
  1835. } else {
  1836. monitor_printf(mon, "There is no suitable snapshot available\n");
  1837. }
  1838. qemu_free(sn_tab);
  1839. qemu_free(available_snapshots);
  1840. }