aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch
diff options
context:
space:
mode:
authorBrett Mastbergen <bmastbergen@untangle.com>2019-10-02 10:28:16 -0400
committerHauke Mehrtens <hauke@hauke-m.de>2019-12-23 00:22:06 +0100
commit9e2e48ff31cea669cfc9c1476f49b815ea9ac1b1 (patch)
tree15532a58e45a1ba9470de39c566ad84678606941 /tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch
parentdc34c695c4faa46efc6e2367a2ba06a47caa4840 (diff)
downloadupstream-9e2e48ff31cea669cfc9c1476f49b815ea9ac1b1.tar.gz
upstream-9e2e48ff31cea669cfc9c1476f49b815ea9ac1b1.tar.bz2
upstream-9e2e48ff31cea669cfc9c1476f49b815ea9ac1b1.zip
tools: qemu: Add patches to support adapter_type and monolithicFlat
Its way more trouble to update this to a newer version of qemu than it is to backport the two additional features we need. Signed-off-by: Brett Mastbergen <bmastbergen@untangle.com>
Diffstat (limited to 'tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch')
-rw-r--r--tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch114
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch b/tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch
new file mode 100644
index 0000000000..fc3dee361e
--- /dev/null
+++ b/tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch
@@ -0,0 +1,114 @@
+From 5483df4df2729a5d1e4888a48039b1cd90438480 Mon Sep 17 00:00:00 2001
+From: Othmar Pasteka <pasteka@kabsi.at>
+Date: Wed, 30 Jan 2013 00:26:52 +0100
+Subject: [PATCH 12/12] vmdk: Allow selecting SCSI adapter in image creation
+
+Introduce a new option "adapter_type" when converting to vmdk images.
+It can be one of the following: ide (default), buslogic, lsilogic
+or legacyESX (according to the vmdk spec from vmware).
+
+In case of a non-ide adapter, heads is set to 255 instead of the 16.
+The latter is used for "ide".
+
+Also see LP#545089
+
+Signed-off-by: Othmar Pasteka <pasteka@kabsi.at>
+Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
+---
+ block/vmdk.c | 31 ++++++++++++++++++++++++++++---
+ block_int.h | 1 +
+ 2 files changed, 29 insertions(+), 3 deletions(-)
+
+--- a/block/vmdk.c
++++ b/block/vmdk.c
+@@ -1089,6 +1089,7 @@ static int vmdk_create(const char *filen
+ int fd, idx = 0;
+ char desc[BUF_SIZE];
+ int64_t total_size = 0, filesize;
++ const char *adapter_type = NULL;
+ const char *backing_file = NULL;
+ const char *fmt = NULL;
+ int flags = 0;
+@@ -1100,6 +1101,7 @@ static int vmdk_create(const char *filen
+ const char *desc_extent_line;
+ char parent_desc_line[BUF_SIZE] = "";
+ uint32_t parent_cid = 0xffffffff;
++ uint32_t number_heads = 16;
+ const char desc_template[] =
+ "# Disk DescriptorFile\n"
+ "version=1\n"
+@@ -1116,9 +1118,9 @@ static int vmdk_create(const char *filen
+ "\n"
+ "ddb.virtualHWVersion = \"%d\"\n"
+ "ddb.geometry.cylinders = \"%" PRId64 "\"\n"
+- "ddb.geometry.heads = \"16\"\n"
++ "ddb.geometry.heads = \"%d\"\n"
+ "ddb.geometry.sectors = \"63\"\n"
+- "ddb.adapterType = \"ide\"\n";
++ "ddb.adapterType = \"%s\"\n";
+
+ if (filename_decompose(filename, path, prefix, postfix, PATH_MAX)) {
+ return -EINVAL;
+@@ -1127,6 +1129,8 @@ static int vmdk_create(const char *filen
+ while (options && options->name) {
+ if (!strcmp(options->name, BLOCK_OPT_SIZE)) {
+ total_size = options->value.n;
++ } else if (!strcmp(options->name, BLOCK_OPT_ADAPTER_TYPE)) {
++ adapter_type = options->value.s;
+ } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) {
+ backing_file = options->value.s;
+ } else if (!strcmp(options->name, BLOCK_OPT_COMPAT6)) {
+@@ -1136,6 +1140,20 @@ static int vmdk_create(const char *filen
+ }
+ options++;
+ }
++ if (!adapter_type) {
++ adapter_type = "ide";
++ } else if (strcmp(adapter_type, "ide") &&
++ strcmp(adapter_type, "buslogic") &&
++ strcmp(adapter_type, "lsilogic") &&
++ strcmp(adapter_type, "legacyESX")) {
++ fprintf(stderr, "VMDK: Unknown adapter type: '%s'.\n", adapter_type);
++ return -EINVAL;
++ }
++ if (strcmp(adapter_type, "ide") != 0) {
++ /* that's the number of heads with which vmware operates when
++ creating, exporting, etc. vmdk files with a non-ide adapter type */
++ number_heads = 255;
++ }
+ if (!fmt) {
+ /* Default format to monolithicSparse */
+ fmt = "monolithicSparse";
+@@ -1222,7 +1240,8 @@ static int vmdk_create(const char *filen
+ parent_desc_line,
+ ext_desc_lines,
+ (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
+- total_size / (int64_t)(63 * 16 * 512));
++ total_size / (int64_t)(63 * number_heads * 512), number_heads,
++ adapter_type);
+ if (split || flat) {
+ fd = open(
+ filename,
+@@ -1281,6 +1300,12 @@ static QEMUOptionParameter vmdk_create_o
+ .help = "Virtual disk size"
+ },
+ {
++ .name = BLOCK_OPT_ADAPTER_TYPE,
++ .type = OPT_STRING,
++ .help = "Virtual adapter type, can be one of "
++ "ide (default), lsilogic, buslogic or legacyESX"
++ },
++ {
+ .name = BLOCK_OPT_BACKING_FILE,
+ .type = OPT_STRING,
+ .help = "File name of a base image"
+--- a/block_int.h
++++ b/block_int.h
+@@ -40,6 +40,7 @@
+ #define BLOCK_OPT_TABLE_SIZE "table_size"
+ #define BLOCK_OPT_PREALLOC "preallocation"
+ #define BLOCK_OPT_SUBFMT "subformat"
++#define BLOCK_OPT_ADAPTER_TYPE "adapter_type"
+
+ typedef struct AIOPool {
+ void (*cancel)(BlockDriverAIOCB *acb);