summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBruce Ashfield <bruce.ashfield@gmail.com>2021-09-24 00:21:41 -0400
committerKhem Raj <raj.khem@gmail.com>2021-09-24 08:12:36 -0700
commitcff8331f9625b2a9f1ffefef4519763b410eb33c (patch)
treec6d8f277af7369f66edfe90890e595b39e59640f
parent69d39fa3d9fb93a1ff590378e7bc4b4a88359f0f (diff)
downloadmeta-openembedded-cff8331f9625b2a9f1ffefef4519763b410eb33c.tar.gz
vboxguestdrivers: fix build against 5.14+
The bump of the reference / default kernels and libc-headers to 5.14 in oe-core broke the build of the vbox guest drivers. The upstream SVN already has 5.14 fixes for the issues, so these are SVN exports of the changes. When a new release is available, we can drop the changes. Also in this patch, is a fixup for the source directory for patching. It was broken in the overrides conversion, and since there weren't any active patches at the time, we didn't notice that source wasn't set to a directory where quilt could actually find the files. Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch442
-rw-r--r--meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch118
-rw-r--r--meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb4
3 files changed, 563 insertions, 1 deletions
diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch
new file mode 100644
index 0000000000..951bd5013d
--- /dev/null
+++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r89690-5.14-fixes.patch
@@ -0,0 +1,442 @@
1Subject: Fix build errors with linux 5.14
2
3Upstream-Status: backport
4
5svn-id: r89690
6
7Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
8
9Index: a/src/VBox/Additions/linux/drm/vbox_drv.h
10===================================================================
11--- a/src/VBox/Additions/linux/drm/vbox_drv.h (revision 89690)
12+++ a/src/VBox/Additions/linux/drm/vbox_drv.h (revision 90498)
13@@ -227,6 +227,15 @@
14 sizeof(HGSMIHOSTFLAGS))
15 #define HOST_FLAGS_OFFSET GUEST_HEAP_USABLE_SIZE
16
17+/** Field @pdev of struct drm_device was removed in 5.14. This macro
18+ * transparently handles this change. Input argument is a pointer
19+ * to struct drm_device. */
20+#if RTLNX_VER_MIN(5,14,0)
21+# define VBOX_DRM_TO_PCI_DEV(_dev) to_pci_dev(_dev->dev)
22+#else
23+# define VBOX_DRM_TO_PCI_DEV(_dev) _dev->pdev
24+#endif
25+
26 /** How frequently we refresh if the guest is not providing dirty rectangles. */
27 #define VBOX_REFRESH_PERIOD (HZ / 2)
28
29Index: a/src/VBox/Additions/linux/drm/vbox_main.c
30===================================================================
31--- a/src/VBox/Additions/linux/drm/vbox_main.c (revision 89690)
32+++ a/src/VBox/Additions/linux/drm/vbox_main.c (revision 90498)
33@@ -290,7 +290,7 @@
34 /* Take a command buffer for each screen from the end of usable VRAM. */
35 vbox->available_vram_size -= vbox->num_crtcs * VBVA_MIN_BUFFER_SIZE;
36
37- vbox->vbva_buffers = pci_iomap_range(vbox->dev->pdev, 0,
38+ vbox->vbva_buffers = pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0,
39 vbox->available_vram_size,
40 vbox->num_crtcs *
41 VBVA_MIN_BUFFER_SIZE);
42@@ -311,7 +311,7 @@
43 return 0;
44
45 err_pci_iounmap:
46- pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
47+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->vbva_buffers);
48 return ret;
49 }
50
51@@ -318,7 +318,7 @@
52 static void vbox_accel_fini(struct vbox_private *vbox)
53 {
54 vbox_disable_accel(vbox);
55- pci_iounmap(vbox->dev->pdev, vbox->vbva_buffers);
56+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->vbva_buffers);
57 }
58
59 /** Do we support the 4.3 plus mode hint reporting interface? */
60@@ -393,7 +393,7 @@
61
62 /* Map guest-heap at end of vram */
63 vbox->guest_heap =
64- pci_iomap_range(vbox->dev->pdev, 0, GUEST_HEAP_OFFSET(vbox),
65+ pci_iomap_range(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0, GUEST_HEAP_OFFSET(vbox),
66 GUEST_HEAP_SIZE);
67 if (!vbox->guest_heap)
68 return -ENOMEM;
69@@ -442,7 +442,7 @@
70 err_destroy_guest_pool:
71 gen_pool_destroy(vbox->guest_pool);
72 err_unmap_guest_heap:
73- pci_iounmap(vbox->dev->pdev, vbox->guest_heap);
74+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->guest_heap);
75 return ret;
76 }
77
78@@ -452,7 +452,7 @@
79 cancel_delayed_work(&vbox->refresh_work);
80 vbox_accel_fini(vbox);
81 gen_pool_destroy(vbox->guest_pool);
82- pci_iounmap(vbox->dev->pdev, vbox->guest_heap);
83+ pci_iounmap(VBOX_DRM_TO_PCI_DEV(vbox->dev), vbox->guest_heap);
84 }
85
86 #if RTLNX_VER_MIN(4,19,0) || RTLNX_RHEL_MIN(8,3)
87@@ -567,12 +567,16 @@
88
89 size = roundup(size, PAGE_SIZE);
90 if (size == 0)
91+ {
92+ DRM_ERROR("bad size\n");
93 return -EINVAL;
94+ }
95
96 ret = vbox_bo_create(dev, size, 0, 0, &vboxbo);
97 if (ret) {
98 if (ret != -ERESTARTSYS)
99 DRM_ERROR("failed to allocate GEM object\n");
100+ DRM_ERROR("failed to allocate GEM (%d)\n", ret);
101 return ret;
102 }
103
104@@ -628,6 +632,21 @@
105 {
106 struct vbox_bo *vbox_bo = gem_to_vbox_bo(obj);
107
108+#if RTLNX_VER_MIN(5,14,0)
109+ /* Starting from kernel 5.14, there is a warning appears in dmesg
110+ * on attempt to desroy pinned buffer object. Make sure it is unpinned. */
111+ while (vbox_bo->bo.pin_count)
112+ {
113+ int ret;
114+ ret = vbox_bo_unpin(vbox_bo);
115+ if (ret)
116+ {
117+ DRM_ERROR("unable to unpin buffer object\n");
118+ break;
119+ }
120+ }
121+#endif
122+
123 ttm_bo_put(&vbox_bo->bo);
124 }
125
126@@ -648,7 +667,7 @@
127 u32 handle, u64 *offset)
128 {
129 struct drm_gem_object *obj;
130- int ret;
131+ int ret = 0;
132 struct vbox_bo *bo;
133
134 mutex_lock(&dev->struct_mutex);
135@@ -665,8 +684,15 @@
136 bo = gem_to_vbox_bo(obj);
137 *offset = vbox_bo_mmap_offset(bo);
138
139+#if RTLNX_VER_MIN(5,14,0)
140+ ret = drm_vma_node_allow(&bo->bo.base.vma_node, file);
141+ if (ret)
142+ {
143+ DRM_ERROR("unable to grant previladges to user");
144+ }
145+#endif
146+
147 drm_gem_object_put(obj);
148- ret = 0;
149
150 out_unlock:
151 mutex_unlock(&dev->struct_mutex);
152Index: a/src/VBox/Additions/linux/drm/vbox_mode.c
153===================================================================
154--- a/src/VBox/Additions/linux/drm/vbox_mode.c (revision 89690)
155+++ a/src/VBox/Additions/linux/drm/vbox_mode.c (revision 90498)
156@@ -245,6 +245,10 @@
157 vbox_bo_unpin(bo);
158 vbox_bo_unreserve(bo);
159 }
160+ else
161+ {
162+ DRM_ERROR("unable to lock buffer object: error %d\n", ret);
163+ }
164 }
165
166 if (&vbox->fbdev->afb == vbox_fb)
167@@ -856,7 +860,9 @@
168 vbox->cursor_data_size = data_size;
169 dst = vbox->cursor_data;
170
171-#if RTLNX_VER_MIN(5,12,0)
172+#if RTLNX_VER_MIN(5,14,0)
173+ ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &uobj_map);
174+#elif RTLNX_VER_MIN(5,12,0)
175 ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &uobj_map);
176 #else
177 ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &uobj_map);
178Index: a/src/VBox/Additions/linux/drm/vbox_ttm.c
179===================================================================
180--- a/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 89690)
181+++ a/src/VBox/Additions/linux/drm/vbox_ttm.c (revision 90498)
182@@ -41,6 +41,10 @@
183 # include <drm/ttm/ttm_page_alloc.h>
184 #endif
185
186+#if RTLNX_VER_MIN(5,14,0)
187+# include <drm/ttm/ttm_range_manager.h>
188+#endif
189+
190 #if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2)
191 #define PLACEMENT_FLAGS(placement) (placement)
192 #else
193@@ -174,11 +178,13 @@
194 *pl = vboxbo->placement;
195 }
196
197+#if RTLNX_VER_MAX(5,14,0)
198 static int vbox_bo_verify_access(struct ttm_buffer_object *bo,
199 struct file *filp)
200 {
201 return 0;
202 }
203+#endif
204
205 #if RTLNX_VER_MAX(5,10,0)
206 static int vbox_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
207@@ -234,10 +240,10 @@
208 mem->bus.caching = ttm_write_combined;
209 # endif
210 # if RTLNX_VER_MIN(5,10,0)
211- mem->bus.offset = (mem->start << PAGE_SHIFT) + pci_resource_start(vbox->dev->pdev, 0);
212+ mem->bus.offset = (mem->start << PAGE_SHIFT) + pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);
213 # else
214 mem->bus.offset = mem->start << PAGE_SHIFT;
215- mem->start = pci_resource_start(vbox->dev->pdev, 0);
216+ mem->start = pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0);
217 # endif
218 mem->bus.is_iomem = true;
219 break;
220@@ -373,7 +379,9 @@
221 .eviction_valuable = ttm_bo_eviction_valuable,
222 #endif
223 .evict_flags = vbox_bo_evict_flags,
224+#if RTLNX_VER_MAX(5,14,0)
225 .verify_access = vbox_bo_verify_access,
226+#endif
227 .io_mem_reserve = &vbox_ttm_io_mem_reserve,
228 .io_mem_free = &vbox_ttm_io_mem_free,
229 #if RTLNX_VER_MIN(4,12,0) || RTLNX_RHEL_MAJ_PREREQ(7,5)
230@@ -451,12 +459,12 @@
231 }
232
233 #ifdef DRM_MTRR_WC
234- vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0),
235- pci_resource_len(dev->pdev, 0),
236+ vbox->fb_mtrr = drm_mtrr_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
237+ pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0),
238 DRM_MTRR_WC);
239 #else
240- vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
241- pci_resource_len(dev->pdev, 0));
242+ vbox->fb_mtrr = arch_phys_wc_add(pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0),
243+ pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0));
244 #endif
245 return 0;
246
247@@ -477,8 +485,8 @@
248 {
249 #ifdef DRM_MTRR_WC
250 drm_mtrr_del(vbox->fb_mtrr,
251- pci_resource_start(vbox->dev->pdev, 0),
252- pci_resource_len(vbox->dev->pdev, 0), DRM_MTRR_WC);
253+ pci_resource_start(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0),
254+ pci_resource_len(VBOX_DRM_TO_PCI_DEV(vbox->dev), 0), DRM_MTRR_WC);
255 #else
256 arch_phys_wc_del(vbox->fb_mtrr);
257 #endif
258@@ -560,6 +568,9 @@
259 static const struct drm_gem_object_funcs vbox_drm_gem_object_funcs = {
260 .free = vbox_gem_free_object,
261 .print_info = drm_gem_ttm_print_info,
262+# if RTLNX_VER_MIN(5,14,0)
263+ .mmap = drm_gem_ttm_mmap,
264+# endif
265 };
266 #endif
267
268@@ -598,6 +609,17 @@
269 sizeof(struct vbox_bo));
270 #endif
271
272+#if RTLNX_VER_MIN(5,14,0)
273+ /* Initialization of the following was removed from DRM stack
274+ * in 5.14, so we need to do it manually. */
275+ vboxbo->bo.base.funcs = &vbox_drm_gem_object_funcs;
276+ kref_init(&vboxbo->bo.base.refcount);
277+ vboxbo->bo.base.size = size;
278+ vboxbo->bo.base.dev = dev;
279+ dma_resv_init(&vboxbo->bo.base._resv);
280+ drm_vma_node_reset(&vboxbo->bo.base.vma_node);
281+#endif
282+
283 ret = ttm_bo_init(&vbox->ttm.bdev, &vboxbo->bo, size,
284 ttm_bo_type_device, &vboxbo->placement,
285 #if RTLNX_VER_MAX(4,17,0) && !RTLNX_RHEL_MAJ_PREREQ(7,6) && !RTLNX_SUSE_MAJ_PREREQ(15,1) && !RTLNX_SUSE_MAJ_PREREQ(12,5)
286@@ -613,7 +635,11 @@
287 NULL, vbox_bo_ttm_destroy);
288 #endif
289 if (ret)
290- goto err_free_vboxbo;
291+ {
292+ /* In case of failure, ttm_bo_init() supposed to call
293+ * vbox_bo_ttm_destroy() which in turn will free @vboxbo. */
294+ goto err_exit;
295+ }
296
297 *pvboxbo = vboxbo;
298
299@@ -621,12 +647,15 @@
300
301 err_free_vboxbo:
302 kfree(vboxbo);
303+err_exit:
304 return ret;
305 }
306
307 static inline u64 vbox_bo_gpu_offset(struct vbox_bo *bo)
308 {
309-#if RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3)
310+#if RTLNX_VER_MIN(5,14,0)
311+ return bo->bo.resource->start << PAGE_SHIFT;
312+#elif RTLNX_VER_MIN(5,9,0) || RTLNX_RHEL_MIN(8,4) || RTLNX_SUSE_MAJ_PREREQ(15,3)
313 return bo->bo.mem.start << PAGE_SHIFT;
314 #else
315 return bo->bo.offset;
316@@ -685,7 +714,7 @@
317 struct ttm_operation_ctx ctx = { false, false };
318 # endif
319 #endif
320- int ret;
321+ int ret = 0;
322 #if RTLNX_VER_MAX(5,11,0)
323 int i;
324 #endif
325@@ -765,6 +794,7 @@
326 {
327 struct drm_file *file_priv;
328 struct vbox_private *vbox;
329+ int ret = -EINVAL;
330
331 if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
332 return -EINVAL;
333@@ -772,5 +802,12 @@
334 file_priv = filp->private_data;
335 vbox = file_priv->minor->dev->dev_private;
336
337- return ttm_bo_mmap(filp, vma, &vbox->ttm.bdev);
338+#if RTLNX_VER_MIN(5,14,0)
339+ if (drm_dev_is_unplugged(file_priv->minor->dev))
340+ return -ENODEV;
341+ ret = drm_gem_mmap(filp, vma);
342+#else
343+ ret = ttm_bo_mmap(filp, vma, &vbox->ttm.bdev);
344+#endif
345+ return ret;
346 }
347Index: a/src/VBox/Additions/linux/drm/vbox_fb.c
348===================================================================
349--- a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 89690)
350+++ a/src/VBox/Additions/linux/drm/vbox_fb.c (revision 90498)
351@@ -301,7 +301,9 @@
352 return ret;
353 }
354
355-#if RTLNX_VER_MIN(5,12,0)
356+#if RTLNX_VER_MIN(5,14,0)
357+ ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.resource->num_pages, &bo->kmap);
358+#elif RTLNX_VER_MIN(5,12,0)
359 ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.mem.num_pages, &bo->kmap);
360 #else
361 ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
362@@ -337,8 +339,8 @@
363 * This seems to be done for safety checking that the framebuffer
364 * is not registered twice by different drivers.
365 */
366- info->apertures->ranges[0].base = pci_resource_start(dev->pdev, 0);
367- info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0);
368+ info->apertures->ranges[0].base = pci_resource_start(VBOX_DRM_TO_PCI_DEV(dev), 0);
369+ info->apertures->ranges[0].size = pci_resource_len(VBOX_DRM_TO_PCI_DEV(dev), 0);
370
371 #if RTLNX_VER_MIN(5,2,0) || RTLNX_RHEL_MAJ_PREREQ(8,2)
372 /*
373Index: a/src/VBox/Additions/linux/drm/vbox_drv.c
374===================================================================
375--- a/src/VBox/Additions/linux/drm/vbox_drv.c (revision 89690)
376+++ a/src/VBox/Additions/linux/drm/vbox_drv.c (revision 90498)
377@@ -43,6 +43,10 @@
378 # include <drm/drm_probe_helper.h>
379 #endif
380
381+#if RTLNX_VER_MIN(5,14,0)
382+# include <drm/drm_aperture.h>
383+#endif
384+
385 #include "version-generated.h"
386 #include "revision-generated.h"
387
388@@ -65,12 +69,23 @@
389 struct drm_device *dev = NULL;
390 int ret = 0;
391
392+# if RTLNX_VER_MIN(5,14,0)
393+ ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, "vboxvideofb");
394+ if (ret)
395+ {
396+ printk("unable to remove conflicting framebuffer devices\n");
397+ return ret;
398+ }
399+# endif /* 5.14 */
400+
401 dev = drm_dev_alloc(&driver, &pdev->dev);
402 if (IS_ERR(dev)) {
403 ret = PTR_ERR(dev);
404 goto err_drv_alloc;
405 }
406+#if RTLNX_VER_MAX(5,14,0)
407 dev->pdev = pdev;
408+#endif
409 pci_set_drvdata(pdev, dev);
410
411 ret = vbox_driver_load(dev);
412@@ -125,7 +140,7 @@
413
414 drm_kms_helper_poll_disable(dev);
415
416- pci_save_state(dev->pdev);
417+ pci_save_state(VBOX_DRM_TO_PCI_DEV(dev));
418
419 drm_fb_helper_set_suspend_unlocked(&vbox->fbdev->helper, true);
420
421@@ -147,7 +162,7 @@
422 {
423 int ret;
424
425- if (pci_enable_device(dev->pdev))
426+ if (pci_enable_device(VBOX_DRM_TO_PCI_DEV(dev)))
427 return -EIO;
428
429 ret = vbox_drm_thaw(dev);
430Index: a/src/VBox/Additions/linux/drm/vbox_irq.c
431===================================================================
432--- a/src/VBox/Additions/linux/drm/vbox_irq.c (revision 89690)
433+++ a/src/VBox/Additions/linux/drm/vbox_irq.c (revision 90498)
434@@ -206,7 +206,7 @@
435 INIT_WORK(&vbox->hotplug_work, vbox_hotplug_worker);
436 vbox_update_mode_hints(vbox);
437 #if RTLNX_VER_MIN(3,16,0) || RTLNX_RHEL_MAJ_PREREQ(7,1)
438- return drm_irq_install(vbox->dev, vbox->dev->pdev->irq);
439+ return drm_irq_install(vbox->dev, VBOX_DRM_TO_PCI_DEV(vbox->dev)->irq);
440 #else
441 return drm_irq_install(vbox->dev);
442 #endif
diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch
new file mode 100644
index 0000000000..0d960fa4f5
--- /dev/null
+++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/r90497-regops-5.14-fix.patch
@@ -0,0 +1,118 @@
1Subject: Fix regops build errors with linux 5.14
2
3Upstream-Status: backport
4
5svn-id: r90497
6
7Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
8
9Index: a/src/VBox/Additions/linux/sharedfolders/regops.c
10===================================================================
11--- a/src/VBox/Additions/linux/sharedfolders/regops.c (revision 88716)
12+++ a/src/VBox/Additions/linux/sharedfolders/regops.c (revision 90497)
13@@ -2126,7 +2126,11 @@
14 int rc = 0;
15
16 Assert(iov_iter_count(iter) + pStash->cb > 0);
17+# if RTLNX_VER_MIN(5,14,0)
18+ if (!(iter->iter_type & ITER_KVEC)) {
19+#else
20 if (!(iter->type & ITER_KVEC)) {
21+#endif
22 /*
23 * Do we have a stashed page?
24 */
25@@ -2372,7 +2376,9 @@
26 static size_t vbsf_iter_max_span_of_pages(struct iov_iter *iter)
27 {
28 size_t cPages;
29-# if RTLNX_VER_MIN(3,16,0)
30+#if RTLNX_VER_MIN(5,14,0)
31+ if (iter_is_iovec(iter) || (iter->iter_type & ITER_KVEC)) {
32+#elif RTLNX_VER_MIN(3,16,0)
33 if (iter_is_iovec(iter) || (iter->type & ITER_KVEC)) {
34 #endif
35 const struct iovec *pCurIov = iter->iov;
36@@ -2436,7 +2442,11 @@
37 } else {
38 /* Won't bother with accurate counts for the next two types, just make
39 some rough estimates (does pipes have segments?): */
40+# if RTLNX_VER_MIN(5,14,0)
41+ size_t cSegs = iter->iter_type & ITER_BVEC ? RT_MAX(1, iter->nr_segs) : 1;
42+# else
43 size_t cSegs = iter->type & ITER_BVEC ? RT_MAX(1, iter->nr_segs) : 1;
44+#endif
45 cPages = (iov_iter_count(iter) + (PAGE_SIZE * 2 - 2) * cSegs) >> PAGE_SHIFT;
46 }
47 # endif
48@@ -2588,8 +2598,14 @@
49 struct vbsf_reg_info *sf_r = kio->ki_filp->private_data;
50 struct vbsf_super_info *pSuperInfo = VBSF_GET_SUPER_INFO(inode->i_sb);
51
52+#if RTLNX_VER_MIN(5,14,0)
53 SFLOGFLOW(("vbsf_reg_read_iter: inode=%p file=%p size=%#zx off=%#llx type=%#x\n",
54+ inode, kio->ki_filp, cbToRead, kio->ki_pos, iter->iter_type));
55+#else
56+ SFLOGFLOW(("vbsf_reg_read_iter: inode=%p file=%p size=%#zx off=%#llx type=%#x\n",
57 inode, kio->ki_filp, cbToRead, kio->ki_pos, iter->type));
58+#endif
59+
60 AssertReturn(S_ISREG(inode->i_mode), -EINVAL);
61
62 /*
63@@ -2823,9 +2839,13 @@
64 bool const fAppend = RT_BOOL(kio->ki_filp->f_flags & O_APPEND);
65 # endif
66
67-
68+#if RTLNX_VER_MIN(5,14,0)
69 SFLOGFLOW(("vbsf_reg_write_iter: inode=%p file=%p size=%#zx off=%#llx type=%#x\n",
70+ inode, kio->ki_filp, cbToWrite, offFile, iter->iter_type));
71+#else
72+ SFLOGFLOW(("vbsf_reg_write_iter: inode=%p file=%p size=%#zx off=%#llx type=%#x\n",
73 inode, kio->ki_filp, cbToWrite, offFile, iter->type));
74+#endif
75 AssertReturn(S_ISREG(inode->i_mode), -EINVAL);
76
77 /*
78@@ -3737,7 +3757,27 @@
79 }
80 #endif /* KERNEL_VERSION >= 2.6.24 */
81
82+#if RTLNX_VER_MIN(5,14,0)
83+static int vbsf_write_end(struct file *file, struct address_space *mapping,
84+ loff_t pos, unsigned int len, unsigned int copied,
85+ struct page *page, void *fsdata)
86+{
87+ static uint64_t volatile s_cCalls = 0;
88+ if (s_cCalls++ < 16)
89+ {
90+ printk("vboxsf: Unexpected call to vbsf_write_end(pos=%#llx len=%#x)! Please report.\n",
91+ (unsigned long long)pos, len);
92+ RTLogBackdoorPrintf("vboxsf: Unexpected call to vbsf_write_end(pos=%#llx len=%#x)! Please report.\n",
93+ (unsigned long long)pos, len);
94+# ifdef WARN_ON
95+ WARN_ON(1);
96+# endif
97+ }
98
99+ return -ENOTSUPP;
100+}
101+#endif
102+
103 #if RTLNX_VER_MIN(2,4,10)
104
105 # ifdef VBOX_UEK
106@@ -3791,8 +3831,11 @@
107 #if RTLNX_VER_MIN(2,5,12)
108 .set_page_dirty = __set_page_dirty_buffers,
109 #endif
110-#if RTLNX_VER_MIN(2,6,24)
111+#if RTLNX_VER_MIN(5,14,0)
112 .write_begin = vbsf_write_begin,
113+ .write_end = vbsf_write_end,
114+#elif RTLNX_VER_MIN(2,6,24)
115+ .write_begin = vbsf_write_begin,
116 .write_end = simple_write_end,
117 #elif RTLNX_VER_MIN(2,5,45)
118 .prepare_write = simple_prepare_write,
diff --git a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb
index 689782b7fd..84651ae64a 100644
--- a/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb
+++ b/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.26.bb
@@ -13,13 +13,15 @@ VBOX_NAME = "VirtualBox-${PV}"
13 13
14SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \ 14SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
15 file://Makefile.utils \ 15 file://Makefile.utils \
16 file://r89690-5.14-fixes.patch \
17 file://r90497-regops-5.14-fix.patch \
16" 18"
17 19
18SRC_URI[md5sum] = "fce04bbef244b4df1a50e53d132d3e6f" 20SRC_URI[md5sum] = "fce04bbef244b4df1a50e53d132d3e6f"
19SRC_URI[sha256sum] = "0212602eea878d6c9fd7f4a3e0182da3e4505f31d25f5539fb8f7b1fbe366195" 21SRC_URI[sha256sum] = "0212602eea878d6c9fd7f4a3e0182da3e4505f31d25f5539fb8f7b1fbe366195"
20 22
21S ?= "${WORKDIR}/vbox_module" 23S ?= "${WORKDIR}/vbox_module"
22S_task-patch = "${WORKDIR}/${VBOX_NAME}" 24S:task-patch = "${WORKDIR}/${VBOX_NAME}"
23 25
24export BUILD_TARGET_ARCH="${ARCH}" 26export BUILD_TARGET_ARCH="${ARCH}"
25export BUILD_TARGET_ARCH:x86-64="amd64" 27export BUILD_TARGET_ARCH:x86-64="amd64"