~ubuntu-branches/ubuntu/oneiric/seabios/oneiric

« back to all changes in this revision

Viewing changes to debian/patches/0020-Minor-split-up-virtio_blk_setup.patch

  • Committer: Bazaar Package Importer
  • Author(s): Serge Hallyn
  • Date: 2010-10-22 11:04:31 UTC
  • Revision ID: james.westby@ubuntu.com-20101022110431-fnfj73ra6xkq623n
Tags: 0.6.0-0ubuntu2
Add all patches which were included in qemu-0.13.0-rc2 (per
commit on Jul 13, 2010).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From c4fe135074cc48e7215e6eed04b4ae958c412ee4 Mon Sep 17 00:00:00 2001
 
2
From: Kevin O'Connor <kevin@koconnor.net>
 
3
Date: Thu, 20 May 2010 00:22:02 -0400
 
4
Subject: [PATCH 20/54] Minor - split up virtio_blk_setup().
 
5
 
 
6
Split function to make it more readable.
 
7
 
 
8
Also, report all found virtio devices at debug level 1.
 
9
---
 
10
 src/virtio-blk.c |  143 ++++++++++++++++++++++++++++--------------------------
 
11
 1 files changed, 74 insertions(+), 69 deletions(-)
 
12
 
 
13
diff --git a/src/virtio-blk.c b/src/virtio-blk.c
 
14
index e6167e9..7f9b3d2 100644
 
15
--- a/src/virtio-blk.c
 
16
+++ b/src/virtio-blk.c
 
17
@@ -85,6 +85,79 @@ process_virtio_op(struct disk_op_s *op)
 
18
     }
 
19
 }
 
20
 
 
21
+static void
 
22
+init_virtio_blk(u16 bdf)
 
23
+{
 
24
+    dprintf(1, "found virtio-blk at %x:%x\n", pci_bdf_to_bus(bdf),
 
25
+            pci_bdf_to_dev(bdf));
 
26
+    char *desc = malloc_tmphigh(MAXDESCSIZE);
 
27
+    struct virtiodrive_s *vdrive_g = malloc_fseg(sizeof(*vdrive_g));
 
28
+    struct vring_virtqueue *vq = memalign_low(PAGE_SIZE, sizeof(*vq));
 
29
+    if (!vdrive_g || !desc || !vq) {
 
30
+        warn_noalloc();
 
31
+        goto fail;
 
32
+    }
 
33
+    memset(vdrive_g, 0, sizeof(*vdrive_g));
 
34
+    vdrive_g->drive.type = DTYPE_VIRTIO;
 
35
+    vdrive_g->drive.cntl_id = bdf;
 
36
+    vdrive_g->vq = vq;
 
37
+
 
38
+    u16 ioaddr = pci_config_readl(bdf, PCI_BASE_ADDRESS_0) &
 
39
+        PCI_BASE_ADDRESS_IO_MASK;
 
40
+
 
41
+    vdrive_g->ioaddr = ioaddr;
 
42
+
 
43
+    vp_reset(ioaddr);
 
44
+    vp_set_status(ioaddr, VIRTIO_CONFIG_S_ACKNOWLEDGE |
 
45
+                  VIRTIO_CONFIG_S_DRIVER );
 
46
+
 
47
+    if (vp_find_vq(ioaddr, 0, vdrive_g->vq) < 0 ) {
 
48
+        dprintf(1, "fail to find vq for virtio-blk %x:%x\n",
 
49
+                pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf));
 
50
+        goto fail;
 
51
+    }
 
52
+
 
53
+    struct virtio_blk_config cfg;
 
54
+    vp_get(ioaddr, 0, &cfg, sizeof(cfg));
 
55
+
 
56
+    u32 f = vp_get_features(ioaddr);
 
57
+    vdrive_g->drive.blksize = (f & (1 << VIRTIO_BLK_F_BLK_SIZE)) ?
 
58
+        cfg.blk_size : DISK_SECTOR_SIZE;
 
59
+
 
60
+    vdrive_g->drive.sectors = cfg.capacity;
 
61
+    dprintf(3, "virtio-blk %x:%x blksize=%d sectors=%u\n",
 
62
+            pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf),
 
63
+            vdrive_g->drive.blksize, (u32)vdrive_g->drive.sectors);
 
64
+
 
65
+    if (vdrive_g->drive.blksize != DISK_SECTOR_SIZE) {
 
66
+        dprintf(1, "virtio-blk %x:%x block size %d is unsupported\n",
 
67
+                pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf),
 
68
+                vdrive_g->drive.blksize);
 
69
+        goto fail;
 
70
+    }
 
71
+
 
72
+    vdrive_g->drive.pchs.cylinders = cfg.cylinders;
 
73
+    vdrive_g->drive.pchs.heads = cfg.heads;
 
74
+    vdrive_g->drive.pchs.spt = cfg.sectors;
 
75
+
 
76
+    setup_translation(&vdrive_g->drive);
 
77
+    add_bcv_internal(&vdrive_g->drive);
 
78
+
 
79
+    snprintf(desc, MAXDESCSIZE, "Virtio disk PCI:%x:%x",
 
80
+             pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf));
 
81
+
 
82
+    vdrive_g->drive.desc = desc;
 
83
+
 
84
+    vp_set_status(ioaddr, VIRTIO_CONFIG_S_ACKNOWLEDGE |
 
85
+                  VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK);
 
86
+    return;
 
87
+
 
88
+fail:
 
89
+    free(vdrive_g);
 
90
+    free(desc);
 
91
+    free(vq);
 
92
+}
 
93
+
 
94
 void
 
95
 virtio_blk_setup(void)
 
96
 {
 
97
@@ -100,74 +173,6 @@ virtio_blk_setup(void)
 
98
         u32 v = pci_config_readl(bdf, PCI_VENDOR_ID);
 
99
         if (v != id)
 
100
             continue;
 
101
-        dprintf(3, "found virtio-blk at %x:%x\n", pci_bdf_to_bus(bdf),
 
102
-                pci_bdf_to_dev(bdf));
 
103
-        char *desc = malloc_tmphigh(MAXDESCSIZE);
 
104
-        struct virtiodrive_s *vdrive_g = malloc_fseg(sizeof(*vdrive_g));
 
105
-        struct vring_virtqueue *vq = memalign_low(PAGE_SIZE, sizeof(*vq));
 
106
-        if (!vdrive_g || !desc || !vq) {
 
107
-            free(vdrive_g);
 
108
-            free(desc);
 
109
-            free(vq);
 
110
-            warn_noalloc();
 
111
-            return;
 
112
-        }
 
113
-        memset(vdrive_g, 0, sizeof(*vdrive_g));
 
114
-        vdrive_g->drive.type = DTYPE_VIRTIO;
 
115
-        vdrive_g->drive.cntl_id = bdf;
 
116
-        vdrive_g->vq = vq;
 
117
-
 
118
-        u16 ioaddr = pci_config_readl(bdf, PCI_BASE_ADDRESS_0) &
 
119
-            PCI_BASE_ADDRESS_IO_MASK;
 
120
-
 
121
-        vdrive_g->ioaddr = ioaddr;
 
122
-
 
123
-        vp_reset(ioaddr);
 
124
-        vp_set_status(ioaddr, VIRTIO_CONFIG_S_ACKNOWLEDGE |
 
125
-                      VIRTIO_CONFIG_S_DRIVER );
 
126
-
 
127
-        if (vp_find_vq(ioaddr, 0, vdrive_g->vq) < 0 ) {
 
128
-            dprintf(1, "fail to find vq for virtio-blk %x:%x\n",
 
129
-                    pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf));
 
130
-        next:
 
131
-            free(vdrive_g);
 
132
-            free(desc);
 
133
-            free(vq);
 
134
-            continue;
 
135
-        }
 
136
-
 
137
-        struct virtio_blk_config cfg;
 
138
-        vp_get(ioaddr, 0, &cfg, sizeof(cfg));
 
139
-
 
140
-        u32 f = vp_get_features(ioaddr);
 
141
-        vdrive_g->drive.blksize = (f & (1 << VIRTIO_BLK_F_BLK_SIZE)) ?
 
142
-            cfg.blk_size : DISK_SECTOR_SIZE;
 
143
-
 
144
-        vdrive_g->drive.sectors = cfg.capacity;
 
145
-        dprintf(3, "virtio-blk %x:%x blksize=%d sectors=%u\n",
 
146
-                pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf),
 
147
-                vdrive_g->drive.blksize, (u32)vdrive_g->drive.sectors);
 
148
-
 
149
-        if (vdrive_g->drive.blksize != DISK_SECTOR_SIZE) {
 
150
-            dprintf(1, "virtio-blk %x:%x block size %d is unsupported\n",
 
151
-                    pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf),
 
152
-                    vdrive_g->drive.blksize);
 
153
-            goto next;
 
154
-        }
 
155
-
 
156
-        vdrive_g->drive.pchs.cylinders = cfg.cylinders;
 
157
-        vdrive_g->drive.pchs.heads = cfg.heads;
 
158
-        vdrive_g->drive.pchs.spt = cfg.sectors;
 
159
-
 
160
-        setup_translation(&vdrive_g->drive);
 
161
-        add_bcv_internal(&vdrive_g->drive);
 
162
-
 
163
-        snprintf(desc, MAXDESCSIZE, "Virtio disk PCI:%x:%x",
 
164
-                 pci_bdf_to_bus(bdf), pci_bdf_to_dev(bdf));
 
165
-
 
166
-        vdrive_g->drive.desc = desc;
 
167
-
 
168
-        vp_set_status(ioaddr, VIRTIO_CONFIG_S_ACKNOWLEDGE |
 
169
-                      VIRTIO_CONFIG_S_DRIVER | VIRTIO_CONFIG_S_DRIVER_OK);
 
170
+        init_virtio_blk(bdf);
 
171
     }
 
172
 }
 
173
-- 
 
174
1.7.1
 
175