1 /* 2 * Copyright (c) 2012, Microsoft Corporation. 3 * 4 * Author: 5 * K. Y. Srinivasan <kys@microsoft.com> 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 as published 9 * by the Free Software Foundation. 10 * 11 * This program is distributed in the hope that it will be useful, but 12 * WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 14 * NON INFRINGEMENT. See the GNU General Public License for more 15 * details. 16 * 17 */ 18 19 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 20 21 #include <linux/kernel.h> 22 #include <linux/mman.h> 23 #include <linux/delay.h> 24 #include <linux/init.h> 25 #include <linux/module.h> 26 #include <linux/slab.h> 27 #include <linux/kthread.h> 28 #include <linux/completion.h> 29 #include <linux/memory_hotplug.h> 30 #include <linux/memory.h> 31 #include <linux/notifier.h> 32 #include <linux/percpu_counter.h> 33 34 #include <linux/hyperv.h> 35 36 /* 37 * We begin with definitions supporting the Dynamic Memory protocol 38 * with the host. 39 * 40 * Begin protocol definitions. 41 */ 42 43 44 45 /* 46 * Protocol versions. The low word is the minor version, the high word the major 47 * version. 48 * 49 * History: 50 * Initial version 1.0 51 * Changed to 0.1 on 2009/03/25 52 * Changes to 0.2 on 2009/05/14 53 * Changes to 0.3 on 2009/12/03 54 * Changed to 1.0 on 2011/04/05 55 */ 56 57 #define DYNMEM_MAKE_VERSION(Major, Minor) ((__u32)(((Major) << 16) | (Minor))) 58 #define DYNMEM_MAJOR_VERSION(Version) ((__u32)(Version) >> 16) 59 #define DYNMEM_MINOR_VERSION(Version) ((__u32)(Version) & 0xff) 60 61 enum { 62 DYNMEM_PROTOCOL_VERSION_1 = DYNMEM_MAKE_VERSION(0, 3), 63 DYNMEM_PROTOCOL_VERSION_2 = DYNMEM_MAKE_VERSION(1, 0), 64 65 DYNMEM_PROTOCOL_VERSION_WIN7 = DYNMEM_PROTOCOL_VERSION_1, 66 DYNMEM_PROTOCOL_VERSION_WIN8 = DYNMEM_PROTOCOL_VERSION_2, 67 68 DYNMEM_PROTOCOL_VERSION_CURRENT = DYNMEM_PROTOCOL_VERSION_WIN8 69 }; 70 71 72 73 /* 74 * Message Types 75 */ 76 77 enum dm_message_type { 78 /* 79 * Version 0.3 80 */ 81 DM_ERROR = 0, 82 DM_VERSION_REQUEST = 1, 83 DM_VERSION_RESPONSE = 2, 84 DM_CAPABILITIES_REPORT = 3, 85 DM_CAPABILITIES_RESPONSE = 4, 86 DM_STATUS_REPORT = 5, 87 DM_BALLOON_REQUEST = 6, 88 DM_BALLOON_RESPONSE = 7, 89 DM_UNBALLOON_REQUEST = 8, 90 DM_UNBALLOON_RESPONSE = 9, 91 DM_MEM_HOT_ADD_REQUEST = 10, 92 DM_MEM_HOT_ADD_RESPONSE = 11, 93 DM_VERSION_03_MAX = 11, 94 /* 95 * Version 1.0. 96 */ 97 DM_INFO_MESSAGE = 12, 98 DM_VERSION_1_MAX = 12 99 }; 100 101 102 /* 103 * Structures defining the dynamic memory management 104 * protocol. 105 */ 106 107 union dm_version { 108 struct { 109 __u16 minor_version; 110 __u16 major_version; 111 }; 112 __u32 version; 113 } __packed; 114 115 116 union dm_caps { 117 struct { 118 __u64 balloon:1; 119 __u64 hot_add:1; 120 /* 121 * To support guests that may have alignment 122 * limitations on hot-add, the guest can specify 123 * its alignment requirements; a value of n 124 * represents an alignment of 2^n in mega bytes. 125 */ 126 __u64 hot_add_alignment:4; 127 __u64 reservedz:58; 128 } cap_bits; 129 __u64 caps; 130 } __packed; 131 132 union dm_mem_page_range { 133 struct { 134 /* 135 * The PFN number of the first page in the range. 136 * 40 bits is the architectural limit of a PFN 137 * number for AMD64. 138 */ 139 __u64 start_page:40; 140 /* 141 * The number of pages in the range. 142 */ 143 __u64 page_cnt:24; 144 } finfo; 145 __u64 page_range; 146 } __packed; 147 148 149 150 /* 151 * The header for all dynamic memory messages: 152 * 153 * type: Type of the message. 154 * size: Size of the message in bytes; including the header. 155 * trans_id: The guest is responsible for manufacturing this ID. 156 */ 157 158 struct dm_header { 159 __u16 type; 160 __u16 size; 161 __u32 trans_id; 162 } __packed; 163 164 /* 165 * A generic message format for dynamic memory. 166 * Specific message formats are defined later in the file. 167 */ 168 169 struct dm_message { 170 struct dm_header hdr; 171 __u8 data[]; /* enclosed message */ 172 } __packed; 173 174 175 /* 176 * Specific message types supporting the dynamic memory protocol. 177 */ 178 179 /* 180 * Version negotiation message. Sent from the guest to the host. 181 * The guest is free to try different versions until the host 182 * accepts the version. 183 * 184 * dm_version: The protocol version requested. 185 * is_last_attempt: If TRUE, this is the last version guest will request. 186 * reservedz: Reserved field, set to zero. 187 */ 188 189 struct dm_version_request { 190 struct dm_header hdr; 191 union dm_version version; 192 __u32 is_last_attempt:1; 193 __u32 reservedz:31; 194 } __packed; 195 196 /* 197 * Version response message; Host to Guest and indicates 198 * if the host has accepted the version sent by the guest. 199 * 200 * is_accepted: If TRUE, host has accepted the version and the guest 201 * should proceed to the next stage of the protocol. FALSE indicates that 202 * guest should re-try with a different version. 203 * 204 * reservedz: Reserved field, set to zero. 205 */ 206 207 struct dm_version_response { 208 struct dm_header hdr; 209 __u64 is_accepted:1; 210 __u64 reservedz:63; 211 } __packed; 212 213 /* 214 * Message reporting capabilities. This is sent from the guest to the 215 * host. 216 */ 217 218 struct dm_capabilities { 219 struct dm_header hdr; 220 union dm_caps caps; 221 __u64 min_page_cnt; 222 __u64 max_page_number; 223 } __packed; 224 225 /* 226 * Response to the capabilities message. This is sent from the host to the 227 * guest. This message notifies if the host has accepted the guest's 228 * capabilities. If the host has not accepted, the guest must shutdown 229 * the service. 230 * 231 * is_accepted: Indicates if the host has accepted guest's capabilities. 232 * reservedz: Must be 0. 233 */ 234 235 struct dm_capabilities_resp_msg { 236 struct dm_header hdr; 237 __u64 is_accepted:1; 238 __u64 reservedz:63; 239 } __packed; 240 241 /* 242 * This message is used to report memory pressure from the guest. 243 * This message is not part of any transaction and there is no 244 * response to this message. 245 * 246 * num_avail: Available memory in pages. 247 * num_committed: Committed memory in pages. 248 * page_file_size: The accumulated size of all page files 249 * in the system in pages. 250 * zero_free: The nunber of zero and free pages. 251 * page_file_writes: The writes to the page file in pages. 252 * io_diff: An indicator of file cache efficiency or page file activity, 253 * calculated as File Cache Page Fault Count - Page Read Count. 254 * This value is in pages. 255 * 256 * Some of these metrics are Windows specific and fortunately 257 * the algorithm on the host side that computes the guest memory 258 * pressure only uses num_committed value. 259 */ 260 261 struct dm_status { 262 struct dm_header hdr; 263 __u64 num_avail; 264 __u64 num_committed; 265 __u64 page_file_size; 266 __u64 zero_free; 267 __u32 page_file_writes; 268 __u32 io_diff; 269 } __packed; 270 271 272 /* 273 * Message to ask the guest to allocate memory - balloon up message. 274 * This message is sent from the host to the guest. The guest may not be 275 * able to allocate as much memory as requested. 276 * 277 * num_pages: number of pages to allocate. 278 */ 279 280 struct dm_balloon { 281 struct dm_header hdr; 282 __u32 num_pages; 283 __u32 reservedz; 284 } __packed; 285 286 287 /* 288 * Balloon response message; this message is sent from the guest 289 * to the host in response to the balloon message. 290 * 291 * reservedz: Reserved; must be set to zero. 292 * more_pages: If FALSE, this is the last message of the transaction. 293 * if TRUE there will atleast one more message from the guest. 294 * 295 * range_count: The number of ranges in the range array. 296 * 297 * range_array: An array of page ranges returned to the host. 298 * 299 */ 300 301 struct dm_balloon_response { 302 struct dm_header hdr; 303 __u32 reservedz; 304 __u32 more_pages:1; 305 __u32 range_count:31; 306 union dm_mem_page_range range_array[]; 307 } __packed; 308 309 /* 310 * Un-balloon message; this message is sent from the host 311 * to the guest to give guest more memory. 312 * 313 * more_pages: If FALSE, this is the last message of the transaction. 314 * if TRUE there will atleast one more message from the guest. 315 * 316 * reservedz: Reserved; must be set to zero. 317 * 318 * range_count: The number of ranges in the range array. 319 * 320 * range_array: An array of page ranges returned to the host. 321 * 322 */ 323 324 struct dm_unballoon_request { 325 struct dm_header hdr; 326 __u32 more_pages:1; 327 __u32 reservedz:31; 328 __u32 range_count; 329 union dm_mem_page_range range_array[]; 330 } __packed; 331 332 /* 333 * Un-balloon response message; this message is sent from the guest 334 * to the host in response to an unballoon request. 335 * 336 */ 337 338 struct dm_unballoon_response { 339 struct dm_header hdr; 340 } __packed; 341 342 343 /* 344 * Hot add request message. Message sent from the host to the guest. 345 * 346 * mem_range: Memory range to hot add. 347 * 348 * On Linux we currently don't support this since we cannot hot add 349 * arbitrary granularity of memory. 350 */ 351 352 struct dm_hot_add { 353 struct dm_header hdr; 354 union dm_mem_page_range range; 355 } __packed; 356 357 /* 358 * Hot add response message. 359 * This message is sent by the guest to report the status of a hot add request. 360 * If page_count is less than the requested page count, then the host should 361 * assume all further hot add requests will fail, since this indicates that 362 * the guest has hit an upper physical memory barrier. 363 * 364 * Hot adds may also fail due to low resources; in this case, the guest must 365 * not complete this message until the hot add can succeed, and the host must 366 * not send a new hot add request until the response is sent. 367 * If VSC fails to hot add memory DYNMEM_NUMBER_OF_UNSUCCESSFUL_HOTADD_ATTEMPTS 368 * times it fails the request. 369 * 370 * 371 * page_count: number of pages that were successfully hot added. 372 * 373 * result: result of the operation 1: success, 0: failure. 374 * 375 */ 376 377 struct dm_hot_add_response { 378 struct dm_header hdr; 379 __u32 page_count; 380 __u32 result; 381 } __packed; 382 383 /* 384 * Types of information sent from host to the guest. 385 */ 386 387 enum dm_info_type { 388 INFO_TYPE_MAX_PAGE_CNT = 0, 389 MAX_INFO_TYPE 390 }; 391 392 393 /* 394 * Header for the information message. 395 */ 396 397 struct dm_info_header { 398 enum dm_info_type type; 399 __u32 data_size; 400 } __packed; 401 402 /* 403 * This message is sent from the host to the guest to pass 404 * some relevant information (win8 addition). 405 * 406 * reserved: no used. 407 * info_size: size of the information blob. 408 * info: information blob. 409 */ 410 411 struct dm_info_msg { 412 struct dm_header hdr; 413 __u32 reserved; 414 __u32 info_size; 415 __u8 info[]; 416 }; 417 418 /* 419 * End protocol definitions. 420 */ 421 422 /* 423 * State to manage hot adding memory into the guest. 424 * The range start_pfn : end_pfn specifies the range 425 * that the host has asked us to hot add. The range 426 * start_pfn : ha_end_pfn specifies the range that we have 427 * currently hot added. We hot add in multiples of 128M 428 * chunks; it is possible that we may not be able to bring 429 * online all the pages in the region. The range 430 * covered_start_pfn : covered_end_pfn defines the pages that can 431 * be brough online. 432 */ 433 434 struct hv_hotadd_state { 435 struct list_head list; 436 unsigned long start_pfn; 437 unsigned long covered_start_pfn; 438 unsigned long covered_end_pfn; 439 unsigned long ha_end_pfn; 440 unsigned long end_pfn; 441 }; 442 443 struct balloon_state { 444 __u32 num_pages; 445 struct work_struct wrk; 446 }; 447 448 struct hot_add_wrk { 449 union dm_mem_page_range ha_page_range; 450 union dm_mem_page_range ha_region_range; 451 struct work_struct wrk; 452 }; 453 454 static bool hot_add = true; 455 static bool do_hot_add; 456 /* 457 * Delay reporting memory pressure by 458 * the specified number of seconds. 459 */ 460 static uint pressure_report_delay = 45; 461 462 module_param(hot_add, bool, (S_IRUGO | S_IWUSR)); 463 MODULE_PARM_DESC(hot_add, "If set attempt memory hot_add"); 464 465 module_param(pressure_report_delay, uint, (S_IRUGO | S_IWUSR)); 466 MODULE_PARM_DESC(pressure_report_delay, "Delay in secs in reporting pressure"); 467 static atomic_t trans_id = ATOMIC_INIT(0); 468 469 static int dm_ring_size = (5 * PAGE_SIZE); 470 471 /* 472 * Driver specific state. 473 */ 474 475 enum hv_dm_state { 476 DM_INITIALIZING = 0, 477 DM_INITIALIZED, 478 DM_BALLOON_UP, 479 DM_BALLOON_DOWN, 480 DM_HOT_ADD, 481 DM_INIT_ERROR 482 }; 483 484 485 static __u8 recv_buffer[PAGE_SIZE]; 486 static __u8 *send_buffer; 487 #define PAGES_IN_2M 512 488 #define HA_CHUNK (32 * 1024) 489 490 struct hv_dynmem_device { 491 struct hv_device *dev; 492 enum hv_dm_state state; 493 struct completion host_event; 494 struct completion config_event; 495 496 /* 497 * Number of pages we have currently ballooned out. 498 */ 499 unsigned int num_pages_ballooned; 500 501 /* 502 * State to manage the ballooning (up) operation. 503 */ 504 struct balloon_state balloon_wrk; 505 506 /* 507 * State to execute the "hot-add" operation. 508 */ 509 struct hot_add_wrk ha_wrk; 510 511 /* 512 * This state tracks if the host has specified a hot-add 513 * region. 514 */ 515 bool host_specified_ha_region; 516 517 /* 518 * State to synchronize hot-add. 519 */ 520 struct completion ol_waitevent; 521 bool ha_waiting; 522 /* 523 * This thread handles hot-add 524 * requests from the host as well as notifying 525 * the host with regards to memory pressure in 526 * the guest. 527 */ 528 struct task_struct *thread; 529 530 /* 531 * A list of hot-add regions. 532 */ 533 struct list_head ha_region_list; 534 535 /* 536 * We start with the highest version we can support 537 * and downgrade based on the host; we save here the 538 * next version to try. 539 */ 540 __u32 next_version; 541 }; 542 543 static struct hv_dynmem_device dm_device; 544 545 #ifdef CONFIG_MEMORY_HOTPLUG 546 547 static void hv_bring_pgs_online(unsigned long start_pfn, unsigned long size) 548 { 549 int i; 550 551 for (i = 0; i < size; i++) { 552 struct page *pg; 553 pg = pfn_to_page(start_pfn + i); 554 __online_page_set_limits(pg); 555 __online_page_increment_counters(pg); 556 __online_page_free(pg); 557 } 558 } 559 560 static void hv_mem_hot_add(unsigned long start, unsigned long size, 561 unsigned long pfn_count, 562 struct hv_hotadd_state *has) 563 { 564 int ret = 0; 565 int i, nid; 566 unsigned long start_pfn; 567 unsigned long processed_pfn; 568 unsigned long total_pfn = pfn_count; 569 570 for (i = 0; i < (size/HA_CHUNK); i++) { 571 start_pfn = start + (i * HA_CHUNK); 572 has->ha_end_pfn += HA_CHUNK; 573 574 if (total_pfn > HA_CHUNK) { 575 processed_pfn = HA_CHUNK; 576 total_pfn -= HA_CHUNK; 577 } else { 578 processed_pfn = total_pfn; 579 total_pfn = 0; 580 } 581 582 has->covered_end_pfn += processed_pfn; 583 584 init_completion(&dm_device.ol_waitevent); 585 dm_device.ha_waiting = true; 586 587 nid = memory_add_physaddr_to_nid(PFN_PHYS(start_pfn)); 588 ret = add_memory(nid, PFN_PHYS((start_pfn)), 589 (HA_CHUNK << PAGE_SHIFT)); 590 591 if (ret) { 592 pr_info("hot_add memory failed error is %d\n", ret); 593 if (ret == -EEXIST) { 594 /* 595 * This error indicates that the error 596 * is not a transient failure. This is the 597 * case where the guest's physical address map 598 * precludes hot adding memory. Stop all further 599 * memory hot-add. 600 */ 601 do_hot_add = false; 602 } 603 has->ha_end_pfn -= HA_CHUNK; 604 has->covered_end_pfn -= processed_pfn; 605 break; 606 } 607 608 /* 609 * Wait for the memory block to be onlined. 610 * Since the hot add has succeeded, it is ok to 611 * proceed even if the pages in the hot added region 612 * have not been "onlined" within the allowed time. 613 */ 614 wait_for_completion_timeout(&dm_device.ol_waitevent, 5*HZ); 615 616 } 617 618 return; 619 } 620 621 static void hv_online_page(struct page *pg) 622 { 623 struct list_head *cur; 624 struct hv_hotadd_state *has; 625 unsigned long cur_start_pgp; 626 unsigned long cur_end_pgp; 627 628 if (dm_device.ha_waiting) { 629 dm_device.ha_waiting = false; 630 complete(&dm_device.ol_waitevent); 631 } 632 633 list_for_each(cur, &dm_device.ha_region_list) { 634 has = list_entry(cur, struct hv_hotadd_state, list); 635 cur_start_pgp = (unsigned long) 636 pfn_to_page(has->covered_start_pfn); 637 cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn); 638 639 if (((unsigned long)pg >= cur_start_pgp) && 640 ((unsigned long)pg < cur_end_pgp)) { 641 /* 642 * This frame is currently backed; online the 643 * page. 644 */ 645 __online_page_set_limits(pg); 646 __online_page_increment_counters(pg); 647 __online_page_free(pg); 648 has->covered_start_pfn++; 649 } 650 } 651 } 652 653 static bool pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt) 654 { 655 struct list_head *cur; 656 struct hv_hotadd_state *has; 657 unsigned long residual, new_inc; 658 659 if (list_empty(&dm_device.ha_region_list)) 660 return false; 661 662 list_for_each(cur, &dm_device.ha_region_list) { 663 has = list_entry(cur, struct hv_hotadd_state, list); 664 665 /* 666 * If the pfn range we are dealing with is not in the current 667 * "hot add block", move on. 668 */ 669 if ((start_pfn >= has->end_pfn)) 670 continue; 671 /* 672 * If the current hot add-request extends beyond 673 * our current limit; extend it. 674 */ 675 if ((start_pfn + pfn_cnt) > has->end_pfn) { 676 residual = (start_pfn + pfn_cnt - has->end_pfn); 677 /* 678 * Extend the region by multiples of HA_CHUNK. 679 */ 680 new_inc = (residual / HA_CHUNK) * HA_CHUNK; 681 if (residual % HA_CHUNK) 682 new_inc += HA_CHUNK; 683 684 has->end_pfn += new_inc; 685 } 686 687 /* 688 * If the current start pfn is not where the covered_end 689 * is, update it. 690 */ 691 692 if (has->covered_end_pfn != start_pfn) { 693 has->covered_end_pfn = start_pfn; 694 has->covered_start_pfn = start_pfn; 695 } 696 return true; 697 698 } 699 700 return false; 701 } 702 703 static unsigned long handle_pg_range(unsigned long pg_start, 704 unsigned long pg_count) 705 { 706 unsigned long start_pfn = pg_start; 707 unsigned long pfn_cnt = pg_count; 708 unsigned long size; 709 struct list_head *cur; 710 struct hv_hotadd_state *has; 711 unsigned long pgs_ol = 0; 712 unsigned long old_covered_state; 713 714 if (list_empty(&dm_device.ha_region_list)) 715 return 0; 716 717 list_for_each(cur, &dm_device.ha_region_list) { 718 has = list_entry(cur, struct hv_hotadd_state, list); 719 720 /* 721 * If the pfn range we are dealing with is not in the current 722 * "hot add block", move on. 723 */ 724 if ((start_pfn >= has->end_pfn)) 725 continue; 726 727 old_covered_state = has->covered_end_pfn; 728 729 if (start_pfn < has->ha_end_pfn) { 730 /* 731 * This is the case where we are backing pages 732 * in an already hot added region. Bring 733 * these pages online first. 734 */ 735 pgs_ol = has->ha_end_pfn - start_pfn; 736 if (pgs_ol > pfn_cnt) 737 pgs_ol = pfn_cnt; 738 hv_bring_pgs_online(start_pfn, pgs_ol); 739 has->covered_end_pfn += pgs_ol; 740 has->covered_start_pfn += pgs_ol; 741 pfn_cnt -= pgs_ol; 742 } 743 744 if ((has->ha_end_pfn < has->end_pfn) && (pfn_cnt > 0)) { 745 /* 746 * We have some residual hot add range 747 * that needs to be hot added; hot add 748 * it now. Hot add a multiple of 749 * of HA_CHUNK that fully covers the pages 750 * we have. 751 */ 752 size = (has->end_pfn - has->ha_end_pfn); 753 if (pfn_cnt <= size) { 754 size = ((pfn_cnt / HA_CHUNK) * HA_CHUNK); 755 if (pfn_cnt % HA_CHUNK) 756 size += HA_CHUNK; 757 } else { 758 pfn_cnt = size; 759 } 760 hv_mem_hot_add(has->ha_end_pfn, size, pfn_cnt, has); 761 } 762 /* 763 * If we managed to online any pages that were given to us, 764 * we declare success. 765 */ 766 return has->covered_end_pfn - old_covered_state; 767 768 } 769 770 return 0; 771 } 772 773 static unsigned long process_hot_add(unsigned long pg_start, 774 unsigned long pfn_cnt, 775 unsigned long rg_start, 776 unsigned long rg_size) 777 { 778 struct hv_hotadd_state *ha_region = NULL; 779 780 if (pfn_cnt == 0) 781 return 0; 782 783 if (!dm_device.host_specified_ha_region) 784 if (pfn_covered(pg_start, pfn_cnt)) 785 goto do_pg_range; 786 787 /* 788 * If the host has specified a hot-add range; deal with it first. 789 */ 790 791 if (rg_size != 0) { 792 ha_region = kzalloc(sizeof(struct hv_hotadd_state), GFP_KERNEL); 793 if (!ha_region) 794 return 0; 795 796 INIT_LIST_HEAD(&ha_region->list); 797 798 list_add_tail(&ha_region->list, &dm_device.ha_region_list); 799 ha_region->start_pfn = rg_start; 800 ha_region->ha_end_pfn = rg_start; 801 ha_region->covered_start_pfn = pg_start; 802 ha_region->covered_end_pfn = pg_start; 803 ha_region->end_pfn = rg_start + rg_size; 804 } 805 806 do_pg_range: 807 /* 808 * Process the page range specified; bringing them 809 * online if possible. 810 */ 811 return handle_pg_range(pg_start, pfn_cnt); 812 } 813 814 #endif 815 816 static void hot_add_req(struct work_struct *dummy) 817 { 818 struct dm_hot_add_response resp; 819 #ifdef CONFIG_MEMORY_HOTPLUG 820 unsigned long pg_start, pfn_cnt; 821 unsigned long rg_start, rg_sz; 822 #endif 823 struct hv_dynmem_device *dm = &dm_device; 824 825 memset(&resp, 0, sizeof(struct dm_hot_add_response)); 826 resp.hdr.type = DM_MEM_HOT_ADD_RESPONSE; 827 resp.hdr.size = sizeof(struct dm_hot_add_response); 828 829 #ifdef CONFIG_MEMORY_HOTPLUG 830 pg_start = dm->ha_wrk.ha_page_range.finfo.start_page; 831 pfn_cnt = dm->ha_wrk.ha_page_range.finfo.page_cnt; 832 833 rg_start = dm->ha_wrk.ha_region_range.finfo.start_page; 834 rg_sz = dm->ha_wrk.ha_region_range.finfo.page_cnt; 835 836 if ((rg_start == 0) && (!dm->host_specified_ha_region)) { 837 unsigned long region_size; 838 unsigned long region_start; 839 840 /* 841 * The host has not specified the hot-add region. 842 * Based on the hot-add page range being specified, 843 * compute a hot-add region that can cover the pages 844 * that need to be hot-added while ensuring the alignment 845 * and size requirements of Linux as it relates to hot-add. 846 */ 847 region_start = pg_start; 848 region_size = (pfn_cnt / HA_CHUNK) * HA_CHUNK; 849 if (pfn_cnt % HA_CHUNK) 850 region_size += HA_CHUNK; 851 852 region_start = (pg_start / HA_CHUNK) * HA_CHUNK; 853 854 rg_start = region_start; 855 rg_sz = region_size; 856 } 857 858 if (do_hot_add) 859 resp.page_count = process_hot_add(pg_start, pfn_cnt, 860 rg_start, rg_sz); 861 #endif 862 /* 863 * The result field of the response structure has the 864 * following semantics: 865 * 866 * 1. If all or some pages hot-added: Guest should return success. 867 * 868 * 2. If no pages could be hot-added: 869 * 870 * If the guest returns success, then the host 871 * will not attempt any further hot-add operations. This 872 * signifies a permanent failure. 873 * 874 * If the guest returns failure, then this failure will be 875 * treated as a transient failure and the host may retry the 876 * hot-add operation after some delay. 877 */ 878 if (resp.page_count > 0) 879 resp.result = 1; 880 else if (!do_hot_add) 881 resp.result = 1; 882 else 883 resp.result = 0; 884 885 if (!do_hot_add || (resp.page_count == 0)) 886 pr_info("Memory hot add failed\n"); 887 888 dm->state = DM_INITIALIZED; 889 resp.hdr.trans_id = atomic_inc_return(&trans_id); 890 vmbus_sendpacket(dm->dev->channel, &resp, 891 sizeof(struct dm_hot_add_response), 892 (unsigned long)NULL, 893 VM_PKT_DATA_INBAND, 0); 894 } 895 896 static void process_info(struct hv_dynmem_device *dm, struct dm_info_msg *msg) 897 { 898 struct dm_info_header *info_hdr; 899 900 info_hdr = (struct dm_info_header *)msg->info; 901 902 switch (info_hdr->type) { 903 case INFO_TYPE_MAX_PAGE_CNT: 904 pr_info("Received INFO_TYPE_MAX_PAGE_CNT\n"); 905 pr_info("Data Size is %d\n", info_hdr->data_size); 906 break; 907 default: 908 pr_info("Received Unknown type: %d\n", info_hdr->type); 909 } 910 } 911 912 static unsigned long compute_balloon_floor(void) 913 { 914 unsigned long min_pages; 915 #define MB2PAGES(mb) ((mb) << (20 - PAGE_SHIFT)) 916 /* Simple continuous piecewiese linear function: 917 * max MiB -> min MiB gradient 918 * 0 0 919 * 16 16 920 * 32 24 921 * 128 72 (1/2) 922 * 512 168 (1/4) 923 * 2048 360 (1/8) 924 * 8192 552 (1/32) 925 * 32768 1320 926 * 131072 4392 927 */ 928 if (totalram_pages < MB2PAGES(128)) 929 min_pages = MB2PAGES(8) + (totalram_pages >> 1); 930 else if (totalram_pages < MB2PAGES(512)) 931 min_pages = MB2PAGES(40) + (totalram_pages >> 2); 932 else if (totalram_pages < MB2PAGES(2048)) 933 min_pages = MB2PAGES(104) + (totalram_pages >> 3); 934 else 935 min_pages = MB2PAGES(296) + (totalram_pages >> 5); 936 #undef MB2PAGES 937 return min_pages; 938 } 939 940 /* 941 * Post our status as it relates memory pressure to the 942 * host. Host expects the guests to post this status 943 * periodically at 1 second intervals. 944 * 945 * The metrics specified in this protocol are very Windows 946 * specific and so we cook up numbers here to convey our memory 947 * pressure. 948 */ 949 950 static void post_status(struct hv_dynmem_device *dm) 951 { 952 struct dm_status status; 953 struct sysinfo val; 954 955 if (pressure_report_delay > 0) { 956 --pressure_report_delay; 957 return; 958 } 959 si_meminfo(&val); 960 memset(&status, 0, sizeof(struct dm_status)); 961 status.hdr.type = DM_STATUS_REPORT; 962 status.hdr.size = sizeof(struct dm_status); 963 status.hdr.trans_id = atomic_inc_return(&trans_id); 964 965 /* 966 * The host expects the guest to report free memory. 967 * Further, the host expects the pressure information to 968 * include the ballooned out pages. 969 * For a given amount of memory that we are managing, we 970 * need to compute a floor below which we should not balloon. 971 * Compute this and add it to the pressure report. 972 */ 973 status.num_avail = val.freeram; 974 status.num_committed = vm_memory_committed() + 975 dm->num_pages_ballooned + 976 compute_balloon_floor(); 977 978 /* 979 * If our transaction ID is no longer current, just don't 980 * send the status. This can happen if we were interrupted 981 * after we picked our transaction ID. 982 */ 983 if (status.hdr.trans_id != atomic_read(&trans_id)) 984 return; 985 986 vmbus_sendpacket(dm->dev->channel, &status, 987 sizeof(struct dm_status), 988 (unsigned long)NULL, 989 VM_PKT_DATA_INBAND, 0); 990 991 } 992 993 static void free_balloon_pages(struct hv_dynmem_device *dm, 994 union dm_mem_page_range *range_array) 995 { 996 int num_pages = range_array->finfo.page_cnt; 997 __u64 start_frame = range_array->finfo.start_page; 998 struct page *pg; 999 int i; 1000 1001 for (i = 0; i < num_pages; i++) { 1002 pg = pfn_to_page(i + start_frame); 1003 __free_page(pg); 1004 dm->num_pages_ballooned--; 1005 } 1006 } 1007 1008 1009 1010 static int alloc_balloon_pages(struct hv_dynmem_device *dm, int num_pages, 1011 struct dm_balloon_response *bl_resp, int alloc_unit, 1012 bool *alloc_error) 1013 { 1014 int i = 0; 1015 struct page *pg; 1016 1017 if (num_pages < alloc_unit) 1018 return 0; 1019 1020 for (i = 0; (i * alloc_unit) < num_pages; i++) { 1021 if (bl_resp->hdr.size + sizeof(union dm_mem_page_range) > 1022 PAGE_SIZE) 1023 return i * alloc_unit; 1024 1025 /* 1026 * We execute this code in a thread context. Furthermore, 1027 * we don't want the kernel to try too hard. 1028 */ 1029 pg = alloc_pages(GFP_HIGHUSER | __GFP_NORETRY | 1030 __GFP_NOMEMALLOC | __GFP_NOWARN, 1031 get_order(alloc_unit << PAGE_SHIFT)); 1032 1033 if (!pg) { 1034 *alloc_error = true; 1035 return i * alloc_unit; 1036 } 1037 1038 1039 dm->num_pages_ballooned += alloc_unit; 1040 1041 /* 1042 * If we allocatted 2M pages; split them so we 1043 * can free them in any order we get. 1044 */ 1045 1046 if (alloc_unit != 1) 1047 split_page(pg, get_order(alloc_unit << PAGE_SHIFT)); 1048 1049 bl_resp->range_count++; 1050 bl_resp->range_array[i].finfo.start_page = 1051 page_to_pfn(pg); 1052 bl_resp->range_array[i].finfo.page_cnt = alloc_unit; 1053 bl_resp->hdr.size += sizeof(union dm_mem_page_range); 1054 1055 } 1056 1057 return num_pages; 1058 } 1059 1060 1061 1062 static void balloon_up(struct work_struct *dummy) 1063 { 1064 int num_pages = dm_device.balloon_wrk.num_pages; 1065 int num_ballooned = 0; 1066 struct dm_balloon_response *bl_resp; 1067 int alloc_unit; 1068 int ret; 1069 bool alloc_error = false; 1070 bool done = false; 1071 int i; 1072 1073 1074 /* 1075 * We will attempt 2M allocations. However, if we fail to 1076 * allocate 2M chunks, we will go back to 4k allocations. 1077 */ 1078 alloc_unit = 512; 1079 1080 while (!done) { 1081 bl_resp = (struct dm_balloon_response *)send_buffer; 1082 memset(send_buffer, 0, PAGE_SIZE); 1083 bl_resp->hdr.type = DM_BALLOON_RESPONSE; 1084 bl_resp->hdr.size = sizeof(struct dm_balloon_response); 1085 bl_resp->more_pages = 1; 1086 1087 1088 num_pages -= num_ballooned; 1089 num_ballooned = alloc_balloon_pages(&dm_device, num_pages, 1090 bl_resp, alloc_unit, 1091 &alloc_error); 1092 1093 if ((alloc_error) && (alloc_unit != 1)) { 1094 alloc_unit = 1; 1095 continue; 1096 } 1097 1098 if ((alloc_error) || (num_ballooned == num_pages)) { 1099 bl_resp->more_pages = 0; 1100 done = true; 1101 dm_device.state = DM_INITIALIZED; 1102 } 1103 1104 /* 1105 * We are pushing a lot of data through the channel; 1106 * deal with transient failures caused because of the 1107 * lack of space in the ring buffer. 1108 */ 1109 1110 do { 1111 bl_resp->hdr.trans_id = atomic_inc_return(&trans_id); 1112 ret = vmbus_sendpacket(dm_device.dev->channel, 1113 bl_resp, 1114 bl_resp->hdr.size, 1115 (unsigned long)NULL, 1116 VM_PKT_DATA_INBAND, 0); 1117 1118 if (ret == -EAGAIN) 1119 msleep(20); 1120 1121 } while (ret == -EAGAIN); 1122 1123 if (ret) { 1124 /* 1125 * Free up the memory we allocatted. 1126 */ 1127 pr_info("Balloon response failed\n"); 1128 1129 for (i = 0; i < bl_resp->range_count; i++) 1130 free_balloon_pages(&dm_device, 1131 &bl_resp->range_array[i]); 1132 1133 done = true; 1134 } 1135 } 1136 1137 } 1138 1139 static void balloon_down(struct hv_dynmem_device *dm, 1140 struct dm_unballoon_request *req) 1141 { 1142 union dm_mem_page_range *range_array = req->range_array; 1143 int range_count = req->range_count; 1144 struct dm_unballoon_response resp; 1145 int i; 1146 1147 for (i = 0; i < range_count; i++) 1148 free_balloon_pages(dm, &range_array[i]); 1149 1150 if (req->more_pages == 1) 1151 return; 1152 1153 memset(&resp, 0, sizeof(struct dm_unballoon_response)); 1154 resp.hdr.type = DM_UNBALLOON_RESPONSE; 1155 resp.hdr.trans_id = atomic_inc_return(&trans_id); 1156 resp.hdr.size = sizeof(struct dm_unballoon_response); 1157 1158 vmbus_sendpacket(dm_device.dev->channel, &resp, 1159 sizeof(struct dm_unballoon_response), 1160 (unsigned long)NULL, 1161 VM_PKT_DATA_INBAND, 0); 1162 1163 dm->state = DM_INITIALIZED; 1164 } 1165 1166 static void balloon_onchannelcallback(void *context); 1167 1168 static int dm_thread_func(void *dm_dev) 1169 { 1170 struct hv_dynmem_device *dm = dm_dev; 1171 int t; 1172 1173 while (!kthread_should_stop()) { 1174 t = wait_for_completion_interruptible_timeout( 1175 &dm_device.config_event, 1*HZ); 1176 /* 1177 * The host expects us to post information on the memory 1178 * pressure every second. 1179 */ 1180 1181 if (t == 0) 1182 post_status(dm); 1183 1184 } 1185 1186 return 0; 1187 } 1188 1189 1190 static void version_resp(struct hv_dynmem_device *dm, 1191 struct dm_version_response *vresp) 1192 { 1193 struct dm_version_request version_req; 1194 int ret; 1195 1196 if (vresp->is_accepted) { 1197 /* 1198 * We are done; wakeup the 1199 * context waiting for version 1200 * negotiation. 1201 */ 1202 complete(&dm->host_event); 1203 return; 1204 } 1205 /* 1206 * If there are more versions to try, continue 1207 * with negotiations; if not 1208 * shutdown the service since we are not able 1209 * to negotiate a suitable version number 1210 * with the host. 1211 */ 1212 if (dm->next_version == 0) 1213 goto version_error; 1214 1215 dm->next_version = 0; 1216 memset(&version_req, 0, sizeof(struct dm_version_request)); 1217 version_req.hdr.type = DM_VERSION_REQUEST; 1218 version_req.hdr.size = sizeof(struct dm_version_request); 1219 version_req.hdr.trans_id = atomic_inc_return(&trans_id); 1220 version_req.version.version = DYNMEM_PROTOCOL_VERSION_WIN7; 1221 version_req.is_last_attempt = 1; 1222 1223 ret = vmbus_sendpacket(dm->dev->channel, &version_req, 1224 sizeof(struct dm_version_request), 1225 (unsigned long)NULL, 1226 VM_PKT_DATA_INBAND, 0); 1227 1228 if (ret) 1229 goto version_error; 1230 1231 return; 1232 1233 version_error: 1234 dm->state = DM_INIT_ERROR; 1235 complete(&dm->host_event); 1236 } 1237 1238 static void cap_resp(struct hv_dynmem_device *dm, 1239 struct dm_capabilities_resp_msg *cap_resp) 1240 { 1241 if (!cap_resp->is_accepted) { 1242 pr_info("Capabilities not accepted by host\n"); 1243 dm->state = DM_INIT_ERROR; 1244 } 1245 complete(&dm->host_event); 1246 } 1247 1248 static void balloon_onchannelcallback(void *context) 1249 { 1250 struct hv_device *dev = context; 1251 u32 recvlen; 1252 u64 requestid; 1253 struct dm_message *dm_msg; 1254 struct dm_header *dm_hdr; 1255 struct hv_dynmem_device *dm = hv_get_drvdata(dev); 1256 struct dm_balloon *bal_msg; 1257 struct dm_hot_add *ha_msg; 1258 union dm_mem_page_range *ha_pg_range; 1259 union dm_mem_page_range *ha_region; 1260 1261 memset(recv_buffer, 0, sizeof(recv_buffer)); 1262 vmbus_recvpacket(dev->channel, recv_buffer, 1263 PAGE_SIZE, &recvlen, &requestid); 1264 1265 if (recvlen > 0) { 1266 dm_msg = (struct dm_message *)recv_buffer; 1267 dm_hdr = &dm_msg->hdr; 1268 1269 switch (dm_hdr->type) { 1270 case DM_VERSION_RESPONSE: 1271 version_resp(dm, 1272 (struct dm_version_response *)dm_msg); 1273 break; 1274 1275 case DM_CAPABILITIES_RESPONSE: 1276 cap_resp(dm, 1277 (struct dm_capabilities_resp_msg *)dm_msg); 1278 break; 1279 1280 case DM_BALLOON_REQUEST: 1281 if (dm->state == DM_BALLOON_UP) 1282 pr_warn("Currently ballooning\n"); 1283 bal_msg = (struct dm_balloon *)recv_buffer; 1284 dm->state = DM_BALLOON_UP; 1285 dm_device.balloon_wrk.num_pages = bal_msg->num_pages; 1286 schedule_work(&dm_device.balloon_wrk.wrk); 1287 break; 1288 1289 case DM_UNBALLOON_REQUEST: 1290 dm->state = DM_BALLOON_DOWN; 1291 balloon_down(dm, 1292 (struct dm_unballoon_request *)recv_buffer); 1293 break; 1294 1295 case DM_MEM_HOT_ADD_REQUEST: 1296 if (dm->state == DM_HOT_ADD) 1297 pr_warn("Currently hot-adding\n"); 1298 dm->state = DM_HOT_ADD; 1299 ha_msg = (struct dm_hot_add *)recv_buffer; 1300 if (ha_msg->hdr.size == sizeof(struct dm_hot_add)) { 1301 /* 1302 * This is a normal hot-add request specifying 1303 * hot-add memory. 1304 */ 1305 ha_pg_range = &ha_msg->range; 1306 dm->ha_wrk.ha_page_range = *ha_pg_range; 1307 dm->ha_wrk.ha_region_range.page_range = 0; 1308 } else { 1309 /* 1310 * Host is specifying that we first hot-add 1311 * a region and then partially populate this 1312 * region. 1313 */ 1314 dm->host_specified_ha_region = true; 1315 ha_pg_range = &ha_msg->range; 1316 ha_region = &ha_pg_range[1]; 1317 dm->ha_wrk.ha_page_range = *ha_pg_range; 1318 dm->ha_wrk.ha_region_range = *ha_region; 1319 } 1320 schedule_work(&dm_device.ha_wrk.wrk); 1321 break; 1322 1323 case DM_INFO_MESSAGE: 1324 process_info(dm, (struct dm_info_msg *)dm_msg); 1325 break; 1326 1327 default: 1328 pr_err("Unhandled message: type: %d\n", dm_hdr->type); 1329 1330 } 1331 } 1332 1333 } 1334 1335 static int balloon_probe(struct hv_device *dev, 1336 const struct hv_vmbus_device_id *dev_id) 1337 { 1338 int ret, t; 1339 struct dm_version_request version_req; 1340 struct dm_capabilities cap_msg; 1341 1342 do_hot_add = hot_add; 1343 1344 /* 1345 * First allocate a send buffer. 1346 */ 1347 1348 send_buffer = kmalloc(PAGE_SIZE, GFP_KERNEL); 1349 if (!send_buffer) 1350 return -ENOMEM; 1351 1352 ret = vmbus_open(dev->channel, dm_ring_size, dm_ring_size, NULL, 0, 1353 balloon_onchannelcallback, dev); 1354 1355 if (ret) 1356 goto probe_error0; 1357 1358 dm_device.dev = dev; 1359 dm_device.state = DM_INITIALIZING; 1360 dm_device.next_version = DYNMEM_PROTOCOL_VERSION_WIN7; 1361 init_completion(&dm_device.host_event); 1362 init_completion(&dm_device.config_event); 1363 INIT_LIST_HEAD(&dm_device.ha_region_list); 1364 INIT_WORK(&dm_device.balloon_wrk.wrk, balloon_up); 1365 INIT_WORK(&dm_device.ha_wrk.wrk, hot_add_req); 1366 dm_device.host_specified_ha_region = false; 1367 1368 dm_device.thread = 1369 kthread_run(dm_thread_func, &dm_device, "hv_balloon"); 1370 if (IS_ERR(dm_device.thread)) { 1371 ret = PTR_ERR(dm_device.thread); 1372 goto probe_error1; 1373 } 1374 1375 #ifdef CONFIG_MEMORY_HOTPLUG 1376 set_online_page_callback(&hv_online_page); 1377 #endif 1378 1379 hv_set_drvdata(dev, &dm_device); 1380 /* 1381 * Initiate the hand shake with the host and negotiate 1382 * a version that the host can support. We start with the 1383 * highest version number and go down if the host cannot 1384 * support it. 1385 */ 1386 memset(&version_req, 0, sizeof(struct dm_version_request)); 1387 version_req.hdr.type = DM_VERSION_REQUEST; 1388 version_req.hdr.size = sizeof(struct dm_version_request); 1389 version_req.hdr.trans_id = atomic_inc_return(&trans_id); 1390 version_req.version.version = DYNMEM_PROTOCOL_VERSION_WIN8; 1391 version_req.is_last_attempt = 0; 1392 1393 ret = vmbus_sendpacket(dev->channel, &version_req, 1394 sizeof(struct dm_version_request), 1395 (unsigned long)NULL, 1396 VM_PKT_DATA_INBAND, 0); 1397 if (ret) 1398 goto probe_error2; 1399 1400 t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ); 1401 if (t == 0) { 1402 ret = -ETIMEDOUT; 1403 goto probe_error2; 1404 } 1405 1406 /* 1407 * If we could not negotiate a compatible version with the host 1408 * fail the probe function. 1409 */ 1410 if (dm_device.state == DM_INIT_ERROR) { 1411 ret = -ETIMEDOUT; 1412 goto probe_error2; 1413 } 1414 /* 1415 * Now submit our capabilities to the host. 1416 */ 1417 memset(&cap_msg, 0, sizeof(struct dm_capabilities)); 1418 cap_msg.hdr.type = DM_CAPABILITIES_REPORT; 1419 cap_msg.hdr.size = sizeof(struct dm_capabilities); 1420 cap_msg.hdr.trans_id = atomic_inc_return(&trans_id); 1421 1422 cap_msg.caps.cap_bits.balloon = 1; 1423 cap_msg.caps.cap_bits.hot_add = 1; 1424 1425 /* 1426 * Specify our alignment requirements as it relates 1427 * memory hot-add. Specify 128MB alignment. 1428 */ 1429 cap_msg.caps.cap_bits.hot_add_alignment = 7; 1430 1431 /* 1432 * Currently the host does not use these 1433 * values and we set them to what is done in the 1434 * Windows driver. 1435 */ 1436 cap_msg.min_page_cnt = 0; 1437 cap_msg.max_page_number = -1; 1438 1439 ret = vmbus_sendpacket(dev->channel, &cap_msg, 1440 sizeof(struct dm_capabilities), 1441 (unsigned long)NULL, 1442 VM_PKT_DATA_INBAND, 0); 1443 if (ret) 1444 goto probe_error2; 1445 1446 t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ); 1447 if (t == 0) { 1448 ret = -ETIMEDOUT; 1449 goto probe_error2; 1450 } 1451 1452 /* 1453 * If the host does not like our capabilities, 1454 * fail the probe function. 1455 */ 1456 if (dm_device.state == DM_INIT_ERROR) { 1457 ret = -ETIMEDOUT; 1458 goto probe_error2; 1459 } 1460 1461 dm_device.state = DM_INITIALIZED; 1462 1463 return 0; 1464 1465 probe_error2: 1466 #ifdef CONFIG_MEMORY_HOTPLUG 1467 restore_online_page_callback(&hv_online_page); 1468 #endif 1469 kthread_stop(dm_device.thread); 1470 1471 probe_error1: 1472 vmbus_close(dev->channel); 1473 probe_error0: 1474 kfree(send_buffer); 1475 return ret; 1476 } 1477 1478 static int balloon_remove(struct hv_device *dev) 1479 { 1480 struct hv_dynmem_device *dm = hv_get_drvdata(dev); 1481 struct list_head *cur, *tmp; 1482 struct hv_hotadd_state *has; 1483 1484 if (dm->num_pages_ballooned != 0) 1485 pr_warn("Ballooned pages: %d\n", dm->num_pages_ballooned); 1486 1487 cancel_work_sync(&dm->balloon_wrk.wrk); 1488 cancel_work_sync(&dm->ha_wrk.wrk); 1489 1490 vmbus_close(dev->channel); 1491 kthread_stop(dm->thread); 1492 kfree(send_buffer); 1493 #ifdef CONFIG_MEMORY_HOTPLUG 1494 restore_online_page_callback(&hv_online_page); 1495 #endif 1496 list_for_each_safe(cur, tmp, &dm->ha_region_list) { 1497 has = list_entry(cur, struct hv_hotadd_state, list); 1498 list_del(&has->list); 1499 kfree(has); 1500 } 1501 1502 return 0; 1503 } 1504 1505 static const struct hv_vmbus_device_id id_table[] = { 1506 /* Dynamic Memory Class ID */ 1507 /* 525074DC-8985-46e2-8057-A307DC18A502 */ 1508 { HV_DM_GUID, }, 1509 { }, 1510 }; 1511 1512 MODULE_DEVICE_TABLE(vmbus, id_table); 1513 1514 static struct hv_driver balloon_drv = { 1515 .name = "hv_balloon", 1516 .id_table = id_table, 1517 .probe = balloon_probe, 1518 .remove = balloon_remove, 1519 }; 1520 1521 static int __init init_balloon_drv(void) 1522 { 1523 1524 return vmbus_driver_register(&balloon_drv); 1525 } 1526 1527 module_init(init_balloon_drv); 1528 1529 MODULE_DESCRIPTION("Hyper-V Balloon"); 1530 MODULE_LICENSE("GPL"); 1531