1 |
commit: e1554e1bcc2babe2394f62fd65327583e3ae5d9c |
2 |
Author: Alice Ferrazzi <alicef <AT> gentoo <DOT> org> |
3 |
AuthorDate: Tue Feb 23 13:42:03 2021 +0000 |
4 |
Commit: Alice Ferrazzi <alicef <AT> gentoo <DOT> org> |
5 |
CommitDate: Tue Feb 23 13:42:13 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=e1554e1b |
7 |
|
8 |
Linux patch 5.11.1 |
9 |
|
10 |
Signed-off-by: Alice Ferrazzi <alicef <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1000_linux-5.11.1.patch | 405 ++++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 409 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index e856f62..530e7ef 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -43,6 +43,10 @@ EXPERIMENTAL |
21 |
Individual Patch Descriptions: |
22 |
-------------------------------------------------------------------------- |
23 |
|
24 |
+Patch: 1000_linux-5.11.1.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 5.11.1 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1000_linux-5.11.1.patch b/1000_linux-5.11.1.patch |
33 |
new file mode 100644 |
34 |
index 0000000..54e57fe |
35 |
--- /dev/null |
36 |
+++ b/1000_linux-5.11.1.patch |
37 |
@@ -0,0 +1,405 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index de1acaefe87e6..0b9ae470a7145 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,7 +1,7 @@ |
43 |
+ # SPDX-License-Identifier: GPL-2.0 |
44 |
+ VERSION = 5 |
45 |
+ PATCHLEVEL = 11 |
46 |
+-SUBLEVEL = 0 |
47 |
++SUBLEVEL = 1 |
48 |
+ EXTRAVERSION = |
49 |
+ NAME = 💕 Valentine's Day Edition 💕 |
50 |
+ |
51 |
+diff --git a/arch/arm/xen/p2m.c b/arch/arm/xen/p2m.c |
52 |
+index e52950a43f2ed..fd6e3aafe2724 100644 |
53 |
+--- a/arch/arm/xen/p2m.c |
54 |
++++ b/arch/arm/xen/p2m.c |
55 |
+@@ -95,8 +95,10 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops, |
56 |
+ for (i = 0; i < count; i++) { |
57 |
+ if (map_ops[i].status) |
58 |
+ continue; |
59 |
+- set_phys_to_machine(map_ops[i].host_addr >> XEN_PAGE_SHIFT, |
60 |
+- map_ops[i].dev_bus_addr >> XEN_PAGE_SHIFT); |
61 |
++ if (unlikely(!set_phys_to_machine(map_ops[i].host_addr >> XEN_PAGE_SHIFT, |
62 |
++ map_ops[i].dev_bus_addr >> XEN_PAGE_SHIFT))) { |
63 |
++ return -ENOMEM; |
64 |
++ } |
65 |
+ } |
66 |
+ |
67 |
+ return 0; |
68 |
+diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c |
69 |
+index 3301875dd1965..b5949e5a83ec8 100644 |
70 |
+--- a/arch/x86/xen/p2m.c |
71 |
++++ b/arch/x86/xen/p2m.c |
72 |
+@@ -712,7 +712,8 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops, |
73 |
+ unsigned long mfn, pfn; |
74 |
+ |
75 |
+ /* Do not add to override if the map failed. */ |
76 |
+- if (map_ops[i].status) |
77 |
++ if (map_ops[i].status != GNTST_okay || |
78 |
++ (kmap_ops && kmap_ops[i].status != GNTST_okay)) |
79 |
+ continue; |
80 |
+ |
81 |
+ if (map_ops[i].flags & GNTMAP_contains_pte) { |
82 |
+@@ -750,17 +751,15 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, |
83 |
+ unsigned long mfn = __pfn_to_mfn(page_to_pfn(pages[i])); |
84 |
+ unsigned long pfn = page_to_pfn(pages[i]); |
85 |
+ |
86 |
+- if (mfn == INVALID_P2M_ENTRY || !(mfn & FOREIGN_FRAME_BIT)) { |
87 |
++ if (mfn != INVALID_P2M_ENTRY && (mfn & FOREIGN_FRAME_BIT)) |
88 |
++ set_phys_to_machine(pfn, INVALID_P2M_ENTRY); |
89 |
++ else |
90 |
+ ret = -EINVAL; |
91 |
+- goto out; |
92 |
+- } |
93 |
+- |
94 |
+- set_phys_to_machine(pfn, INVALID_P2M_ENTRY); |
95 |
+ } |
96 |
+ if (kunmap_ops) |
97 |
+ ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, |
98 |
+- kunmap_ops, count); |
99 |
+-out: |
100 |
++ kunmap_ops, count) ?: ret; |
101 |
++ |
102 |
+ return ret; |
103 |
+ } |
104 |
+ EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping); |
105 |
+diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c |
106 |
+index 9ebf53903d7bf..da16121140cab 100644 |
107 |
+--- a/drivers/block/xen-blkback/blkback.c |
108 |
++++ b/drivers/block/xen-blkback/blkback.c |
109 |
+@@ -794,8 +794,13 @@ again: |
110 |
+ pages[i]->persistent_gnt = persistent_gnt; |
111 |
+ } else { |
112 |
+ if (gnttab_page_cache_get(&ring->free_pages, |
113 |
+- &pages[i]->page)) |
114 |
+- goto out_of_memory; |
115 |
++ &pages[i]->page)) { |
116 |
++ gnttab_page_cache_put(&ring->free_pages, |
117 |
++ pages_to_gnt, |
118 |
++ segs_to_map); |
119 |
++ ret = -ENOMEM; |
120 |
++ goto out; |
121 |
++ } |
122 |
+ addr = vaddr(pages[i]->page); |
123 |
+ pages_to_gnt[segs_to_map] = pages[i]->page; |
124 |
+ pages[i]->persistent_gnt = NULL; |
125 |
+@@ -811,10 +816,8 @@ again: |
126 |
+ break; |
127 |
+ } |
128 |
+ |
129 |
+- if (segs_to_map) { |
130 |
++ if (segs_to_map) |
131 |
+ ret = gnttab_map_refs(map, NULL, pages_to_gnt, segs_to_map); |
132 |
+- BUG_ON(ret); |
133 |
+- } |
134 |
+ |
135 |
+ /* |
136 |
+ * Now swizzle the MFN in our domain with the MFN from the other domain |
137 |
+@@ -830,7 +833,7 @@ again: |
138 |
+ gnttab_page_cache_put(&ring->free_pages, |
139 |
+ &pages[seg_idx]->page, 1); |
140 |
+ pages[seg_idx]->handle = BLKBACK_INVALID_HANDLE; |
141 |
+- ret |= 1; |
142 |
++ ret |= !ret; |
143 |
+ goto next; |
144 |
+ } |
145 |
+ pages[seg_idx]->handle = map[new_map_idx].handle; |
146 |
+@@ -882,17 +885,18 @@ next: |
147 |
+ } |
148 |
+ segs_to_map = 0; |
149 |
+ last_map = map_until; |
150 |
+- if (map_until != num) |
151 |
++ if (!ret && map_until != num) |
152 |
+ goto again; |
153 |
+ |
154 |
+- return ret; |
155 |
+- |
156 |
+-out_of_memory: |
157 |
+- pr_alert("%s: out of memory\n", __func__); |
158 |
+- gnttab_page_cache_put(&ring->free_pages, pages_to_gnt, segs_to_map); |
159 |
+- for (i = last_map; i < num; i++) |
160 |
++out: |
161 |
++ for (i = last_map; i < num; i++) { |
162 |
++ /* Don't zap current batch's valid persistent grants. */ |
163 |
++ if(i >= last_map + segs_to_map) |
164 |
++ pages[i]->persistent_gnt = NULL; |
165 |
+ pages[i]->handle = BLKBACK_INVALID_HANDLE; |
166 |
+- return -ENOMEM; |
167 |
++ } |
168 |
++ |
169 |
++ return ret; |
170 |
+ } |
171 |
+ |
172 |
+ static int xen_blkbk_map_seg(struct pending_req *pending_req) |
173 |
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c |
174 |
+index 03b83aa912779..1b690164ab5b9 100644 |
175 |
+--- a/drivers/bluetooth/btusb.c |
176 |
++++ b/drivers/bluetooth/btusb.c |
177 |
+@@ -506,7 +506,6 @@ static const struct dmi_system_id btusb_needs_reset_resume_table[] = { |
178 |
+ #define BTUSB_HW_RESET_ACTIVE 12 |
179 |
+ #define BTUSB_TX_WAIT_VND_EVT 13 |
180 |
+ #define BTUSB_WAKEUP_DISABLE 14 |
181 |
+-#define BTUSB_USE_ALT1_FOR_WBS 15 |
182 |
+ |
183 |
+ struct btusb_data { |
184 |
+ struct hci_dev *hdev; |
185 |
+@@ -1736,15 +1735,12 @@ static void btusb_work(struct work_struct *work) |
186 |
+ new_alts = data->sco_num; |
187 |
+ } |
188 |
+ } else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) { |
189 |
+- /* Check if Alt 6 is supported for Transparent audio */ |
190 |
+- if (btusb_find_altsetting(data, 6)) { |
191 |
+- data->usb_alt6_packet_flow = true; |
192 |
+- new_alts = 6; |
193 |
+- } else if (test_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags)) { |
194 |
+- new_alts = 1; |
195 |
+- } else { |
196 |
+- bt_dev_err(hdev, "Device does not support ALT setting 6"); |
197 |
+- } |
198 |
++ /* Bluetooth USB spec recommends alt 6 (63 bytes), but |
199 |
++ * many adapters do not support it. Alt 1 appears to |
200 |
++ * work for all adapters that do not have alt 6, and |
201 |
++ * which work with WBS at all. |
202 |
++ */ |
203 |
++ new_alts = btusb_find_altsetting(data, 6) ? 6 : 1; |
204 |
+ } |
205 |
+ |
206 |
+ if (btusb_switch_alt_setting(hdev, new_alts) < 0) |
207 |
+@@ -4548,10 +4544,6 @@ static int btusb_probe(struct usb_interface *intf, |
208 |
+ * (DEVICE_REMOTE_WAKEUP) |
209 |
+ */ |
210 |
+ set_bit(BTUSB_WAKEUP_DISABLE, &data->flags); |
211 |
+- if (btusb_find_altsetting(data, 1)) |
212 |
+- set_bit(BTUSB_USE_ALT1_FOR_WBS, &data->flags); |
213 |
+- else |
214 |
+- bt_dev_err(hdev, "Device does not support ALT setting 1"); |
215 |
+ } |
216 |
+ |
217 |
+ if (!reset) |
218 |
+diff --git a/drivers/media/usb/pwc/pwc-if.c b/drivers/media/usb/pwc/pwc-if.c |
219 |
+index 61869636ec613..5e3339cc31c07 100644 |
220 |
+--- a/drivers/media/usb/pwc/pwc-if.c |
221 |
++++ b/drivers/media/usb/pwc/pwc-if.c |
222 |
+@@ -155,16 +155,17 @@ static const struct video_device pwc_template = { |
223 |
+ /***************************************************************************/ |
224 |
+ /* Private functions */ |
225 |
+ |
226 |
+-static void *pwc_alloc_urb_buffer(struct device *dev, |
227 |
++static void *pwc_alloc_urb_buffer(struct usb_device *dev, |
228 |
+ size_t size, dma_addr_t *dma_handle) |
229 |
+ { |
230 |
++ struct device *dmadev = dev->bus->sysdev; |
231 |
+ void *buffer = kmalloc(size, GFP_KERNEL); |
232 |
+ |
233 |
+ if (!buffer) |
234 |
+ return NULL; |
235 |
+ |
236 |
+- *dma_handle = dma_map_single(dev, buffer, size, DMA_FROM_DEVICE); |
237 |
+- if (dma_mapping_error(dev, *dma_handle)) { |
238 |
++ *dma_handle = dma_map_single(dmadev, buffer, size, DMA_FROM_DEVICE); |
239 |
++ if (dma_mapping_error(dmadev, *dma_handle)) { |
240 |
+ kfree(buffer); |
241 |
+ return NULL; |
242 |
+ } |
243 |
+@@ -172,12 +173,14 @@ static void *pwc_alloc_urb_buffer(struct device *dev, |
244 |
+ return buffer; |
245 |
+ } |
246 |
+ |
247 |
+-static void pwc_free_urb_buffer(struct device *dev, |
248 |
++static void pwc_free_urb_buffer(struct usb_device *dev, |
249 |
+ size_t size, |
250 |
+ void *buffer, |
251 |
+ dma_addr_t dma_handle) |
252 |
+ { |
253 |
+- dma_unmap_single(dev, dma_handle, size, DMA_FROM_DEVICE); |
254 |
++ struct device *dmadev = dev->bus->sysdev; |
255 |
++ |
256 |
++ dma_unmap_single(dmadev, dma_handle, size, DMA_FROM_DEVICE); |
257 |
+ kfree(buffer); |
258 |
+ } |
259 |
+ |
260 |
+@@ -282,6 +285,7 @@ static void pwc_frame_complete(struct pwc_device *pdev) |
261 |
+ static void pwc_isoc_handler(struct urb *urb) |
262 |
+ { |
263 |
+ struct pwc_device *pdev = (struct pwc_device *)urb->context; |
264 |
++ struct device *dmadev = urb->dev->bus->sysdev; |
265 |
+ int i, fst, flen; |
266 |
+ unsigned char *iso_buf = NULL; |
267 |
+ |
268 |
+@@ -328,7 +332,7 @@ static void pwc_isoc_handler(struct urb *urb) |
269 |
+ /* Reset ISOC error counter. We did get here, after all. */ |
270 |
+ pdev->visoc_errors = 0; |
271 |
+ |
272 |
+- dma_sync_single_for_cpu(&urb->dev->dev, |
273 |
++ dma_sync_single_for_cpu(dmadev, |
274 |
+ urb->transfer_dma, |
275 |
+ urb->transfer_buffer_length, |
276 |
+ DMA_FROM_DEVICE); |
277 |
+@@ -379,7 +383,7 @@ static void pwc_isoc_handler(struct urb *urb) |
278 |
+ pdev->vlast_packet_size = flen; |
279 |
+ } |
280 |
+ |
281 |
+- dma_sync_single_for_device(&urb->dev->dev, |
282 |
++ dma_sync_single_for_device(dmadev, |
283 |
+ urb->transfer_dma, |
284 |
+ urb->transfer_buffer_length, |
285 |
+ DMA_FROM_DEVICE); |
286 |
+@@ -461,7 +465,7 @@ retry: |
287 |
+ urb->pipe = usb_rcvisocpipe(udev, pdev->vendpoint); |
288 |
+ urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP; |
289 |
+ urb->transfer_buffer_length = ISO_BUFFER_SIZE; |
290 |
+- urb->transfer_buffer = pwc_alloc_urb_buffer(&udev->dev, |
291 |
++ urb->transfer_buffer = pwc_alloc_urb_buffer(udev, |
292 |
+ urb->transfer_buffer_length, |
293 |
+ &urb->transfer_dma); |
294 |
+ if (urb->transfer_buffer == NULL) { |
295 |
+@@ -524,7 +528,7 @@ static void pwc_iso_free(struct pwc_device *pdev) |
296 |
+ if (urb) { |
297 |
+ PWC_DEBUG_MEMORY("Freeing URB\n"); |
298 |
+ if (urb->transfer_buffer) |
299 |
+- pwc_free_urb_buffer(&urb->dev->dev, |
300 |
++ pwc_free_urb_buffer(urb->dev, |
301 |
+ urb->transfer_buffer_length, |
302 |
+ urb->transfer_buffer, |
303 |
+ urb->transfer_dma); |
304 |
+diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c |
305 |
+index bc3421d145768..423667b837510 100644 |
306 |
+--- a/drivers/net/xen-netback/netback.c |
307 |
++++ b/drivers/net/xen-netback/netback.c |
308 |
+@@ -1342,13 +1342,11 @@ int xenvif_tx_action(struct xenvif_queue *queue, int budget) |
309 |
+ return 0; |
310 |
+ |
311 |
+ gnttab_batch_copy(queue->tx_copy_ops, nr_cops); |
312 |
+- if (nr_mops != 0) { |
313 |
++ if (nr_mops != 0) |
314 |
+ ret = gnttab_map_refs(queue->tx_map_ops, |
315 |
+ NULL, |
316 |
+ queue->pages_to_map, |
317 |
+ nr_mops); |
318 |
+- BUG_ON(ret); |
319 |
+- } |
320 |
+ |
321 |
+ work_done = xenvif_tx_submit(queue); |
322 |
+ |
323 |
+diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c |
324 |
+index 816e709afa561..082da38762fc7 100644 |
325 |
+--- a/drivers/tty/tty_io.c |
326 |
++++ b/drivers/tty/tty_io.c |
327 |
+@@ -962,11 +962,14 @@ static inline ssize_t do_tty_write( |
328 |
+ if (ret <= 0) |
329 |
+ break; |
330 |
+ |
331 |
++ written += ret; |
332 |
++ if (ret > size) |
333 |
++ break; |
334 |
++ |
335 |
+ /* FIXME! Have Al check this! */ |
336 |
+ if (ret != size) |
337 |
+ iov_iter_revert(from, size-ret); |
338 |
+ |
339 |
+- written += ret; |
340 |
+ count -= ret; |
341 |
+ if (!count) |
342 |
+ break; |
343 |
+diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c |
344 |
+index a36b71286bcf8..5447c5156b2e6 100644 |
345 |
+--- a/drivers/xen/gntdev.c |
346 |
++++ b/drivers/xen/gntdev.c |
347 |
+@@ -309,44 +309,47 @@ int gntdev_map_grant_pages(struct gntdev_grant_map *map) |
348 |
+ * to the kernel linear addresses of the struct pages. |
349 |
+ * These ptes are completely different from the user ptes dealt |
350 |
+ * with find_grant_ptes. |
351 |
++ * Note that GNTMAP_device_map isn't needed here: The |
352 |
++ * dev_bus_addr output field gets consumed only from ->map_ops, |
353 |
++ * and by not requesting it when mapping we also avoid needing |
354 |
++ * to mirror dev_bus_addr into ->unmap_ops (and holding an extra |
355 |
++ * reference to the page in the hypervisor). |
356 |
+ */ |
357 |
++ unsigned int flags = (map->flags & ~GNTMAP_device_map) | |
358 |
++ GNTMAP_host_map; |
359 |
++ |
360 |
+ for (i = 0; i < map->count; i++) { |
361 |
+ unsigned long address = (unsigned long) |
362 |
+ pfn_to_kaddr(page_to_pfn(map->pages[i])); |
363 |
+ BUG_ON(PageHighMem(map->pages[i])); |
364 |
+ |
365 |
+- gnttab_set_map_op(&map->kmap_ops[i], address, |
366 |
+- map->flags | GNTMAP_host_map, |
367 |
++ gnttab_set_map_op(&map->kmap_ops[i], address, flags, |
368 |
+ map->grants[i].ref, |
369 |
+ map->grants[i].domid); |
370 |
+ gnttab_set_unmap_op(&map->kunmap_ops[i], address, |
371 |
+- map->flags | GNTMAP_host_map, -1); |
372 |
++ flags, -1); |
373 |
+ } |
374 |
+ } |
375 |
+ |
376 |
+ pr_debug("map %d+%d\n", map->index, map->count); |
377 |
+ err = gnttab_map_refs(map->map_ops, use_ptemod ? map->kmap_ops : NULL, |
378 |
+ map->pages, map->count); |
379 |
+- if (err) |
380 |
+- return err; |
381 |
+ |
382 |
+ for (i = 0; i < map->count; i++) { |
383 |
+- if (map->map_ops[i].status) { |
384 |
++ if (map->map_ops[i].status == GNTST_okay) |
385 |
++ map->unmap_ops[i].handle = map->map_ops[i].handle; |
386 |
++ else if (!err) |
387 |
+ err = -EINVAL; |
388 |
+- continue; |
389 |
+- } |
390 |
+ |
391 |
+- map->unmap_ops[i].handle = map->map_ops[i].handle; |
392 |
+- if (use_ptemod) |
393 |
+- map->kunmap_ops[i].handle = map->kmap_ops[i].handle; |
394 |
+-#ifdef CONFIG_XEN_GRANT_DMA_ALLOC |
395 |
+- else if (map->dma_vaddr) { |
396 |
+- unsigned long bfn; |
397 |
++ if (map->flags & GNTMAP_device_map) |
398 |
++ map->unmap_ops[i].dev_bus_addr = map->map_ops[i].dev_bus_addr; |
399 |
+ |
400 |
+- bfn = pfn_to_bfn(page_to_pfn(map->pages[i])); |
401 |
+- map->unmap_ops[i].dev_bus_addr = __pfn_to_phys(bfn); |
402 |
++ if (use_ptemod) { |
403 |
++ if (map->kmap_ops[i].status == GNTST_okay) |
404 |
++ map->kunmap_ops[i].handle = map->kmap_ops[i].handle; |
405 |
++ else if (!err) |
406 |
++ err = -EINVAL; |
407 |
+ } |
408 |
+-#endif |
409 |
+ } |
410 |
+ return err; |
411 |
+ } |
412 |
+diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c |
413 |
+index 862162dca33cf..9cd4fe8ce6803 100644 |
414 |
+--- a/drivers/xen/xen-scsiback.c |
415 |
++++ b/drivers/xen/xen-scsiback.c |
416 |
+@@ -386,12 +386,12 @@ static int scsiback_gnttab_data_map_batch(struct gnttab_map_grant_ref *map, |
417 |
+ return 0; |
418 |
+ |
419 |
+ err = gnttab_map_refs(map, NULL, pg, cnt); |
420 |
+- BUG_ON(err); |
421 |
+ for (i = 0; i < cnt; i++) { |
422 |
+ if (unlikely(map[i].status != GNTST_okay)) { |
423 |
+ pr_err("invalid buffer -- could not remap it\n"); |
424 |
+ map[i].handle = SCSIBACK_INVALID_HANDLE; |
425 |
+- err = -ENOMEM; |
426 |
++ if (!err) |
427 |
++ err = -ENOMEM; |
428 |
+ } else { |
429 |
+ get_page(pg[i]); |
430 |
+ } |
431 |
+diff --git a/include/xen/grant_table.h b/include/xen/grant_table.h |
432 |
+index b9c937b3a1499..0b1182a3cf412 100644 |
433 |
+--- a/include/xen/grant_table.h |
434 |
++++ b/include/xen/grant_table.h |
435 |
+@@ -157,6 +157,7 @@ gnttab_set_map_op(struct gnttab_map_grant_ref *map, phys_addr_t addr, |
436 |
+ map->flags = flags; |
437 |
+ map->ref = ref; |
438 |
+ map->dom = domid; |
439 |
++ map->status = 1; /* arbitrary positive value */ |
440 |
+ } |
441 |
+ |
442 |
+ static inline void |