savevm.c 59 KB

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