diff options
author | Jan Rękorajski | 2016-06-05 16:08:03 (GMT) |
---|---|---|
committer | Jan Rękorajski | 2016-06-05 16:08:03 (GMT) |
commit | 7b23a0127e64c157a6027e103addf2b39668c725 (patch) | |
tree | 035fb36459158897fec1f2273fb84b9d08b9733a | |
parent | 3f5e7cb8954c054a160a3ba50dd25a6ecc8c58df (diff) | |
download | kernel-7b23a0127e64c157a6027e103addf2b39668c725.zip kernel-7b23a0127e64c157a6027e103addf2b39668c725.tar.gz |
- removed virtio-gl patch (broken for a long time)
- updated to 4.6.1
-rw-r--r-- | kernel-virtio-gl-accel.patch | 373 | ||||
-rw-r--r-- | kernel.spec | 10 |
2 files changed, 2 insertions, 381 deletions
diff --git a/kernel-virtio-gl-accel.patch b/kernel-virtio-gl-accel.patch deleted file mode 100644 index c539b57..0000000 --- a/kernel-virtio-gl-accel.patch +++ /dev/null @@ -1,373 +0,0 @@ -M/ -diff --git a/drivers/gpu/Makefile b/drivers/gpu/Makefile -index 30879df..35699a0 100644 ---- a/drivers/gpu/Makefile -+++ b/drivers/gpu/Makefile -@@ -1 +1 @@ --obj-y += drm/ vga/ -+obj-y += drm/ vga/ misc/ -diff --git a/drivers/gpu/misc/Kconfig b/drivers/gpu/misc/Kconfig -new file mode 100644 -index 0000000..50043d3 ---- /dev/null -+++ b/drivers/gpu/misc/Kconfig -@@ -0,0 +1,8 @@ -+config VIRTIOGL -+ tristate "Virtio userspace memory transport" -+ depends on VIRTIO_PCI -+ default n -+ help -+ A Driver to facilitate transferring data from userspace to a -+ hypervisor (eg. qemu) -+ -diff --git a/drivers/gpu/misc/Makefile b/drivers/gpu/misc/Makefile -new file mode 100644 -index 0000000..d9ab333 ---- /dev/null -+++ b/drivers/gpu/misc/Makefile -@@ -0,0 +1 @@ -+obj-$(CONFIG_VIRTIOGL) += virtio-gl.o -diff --git a/drivers/gpu/misc/virtio-gl.c b/drivers/gpu/misc/virtio-gl.c -new file mode 100644 -index 0000000..8882bda ---- /dev/null -+++ b/drivers/gpu/misc/virtio-gl.c -@@ -0,0 +1,315 @@ -+/* -+ * Copyright (C) 2010 Intel Corporation -+ * -+ * Author: Ian Molton <ian.molton@collabora.co.uk> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ */ -+#include <linux/kernel.h> -+#include <linux/module.h> -+#include <linux/fs.h> -+#include <linux/dma-mapping.h> -+#include <linux/sched.h> -+#include <linux/slab.h> -+#include <linux/miscdevice.h> -+#include <linux/vmalloc.h> -+#include <linux/virtio.h> -+#include <linux/virtio_ids.h> -+#include <linux/virtio_config.h> -+ -+#define DEVICE_NAME "glmem" -+ -+/* Define to use debugging checksums on transfers */ -+#undef DEBUG_GLIO -+ -+struct virtio_gl_data { -+ char *buffer; -+ int pages; -+ unsigned int pid; -+}; -+ -+struct virtio_gl_header { -+ int pid; -+ int buf_size; -+ int r_buf_size; -+#ifdef DEBUG_GLIO -+ int sum; -+#endif -+ char buffer; -+} __packed; -+ -+#define to_virtio_gl_data(a) ((struct virtio_gl_data *)(a)->private_data) -+ -+#ifdef DEBUG_GLIO -+#define SIZE_OUT_HEADER (sizeof(int)*4) -+#define SIZE_IN_HEADER (sizeof(int)*2) -+#else -+#define SIZE_OUT_HEADER (sizeof(int)*3) -+#define SIZE_IN_HEADER sizeof(int) -+#endif -+ -+static struct virtqueue *vq; -+ -+ -+/* This is videobuf_vmalloc_to_sg() from videobuf-dma-sg.c with -+ * some modifications -+ */ -+static struct scatterlist *vmalloc_to_sg(struct scatterlist *sg_list, -+ unsigned char *virt, unsigned int pages) -+{ -+ struct page *pg; -+ -+ /* unaligned */ -+ BUG_ON((ulong)virt & ~PAGE_MASK); -+ -+ /* Fill with elements for the data */ -+ while (pages) { -+ pg = vmalloc_to_page(virt); -+ if (!pg) -+ goto err; -+ -+ sg_set_page(sg_list, pg, PAGE_SIZE, 0); -+ virt += PAGE_SIZE; -+ sg_list++; -+ pages--; -+ } -+ -+ return sg_list; -+ -+err: -+ kfree(sg_list); -+ return NULL; -+} -+ -+static int put_data(struct virtio_gl_data *gldata) -+{ -+ struct scatterlist *sg, *sg_list; -+ unsigned int count, ret, o_page, i_page, sg_entries; -+ struct virtio_gl_header *header = -+ (struct virtio_gl_header *)gldata->buffer; -+ -+ ret = header->buf_size; -+ -+ o_page = (header->buf_size + PAGE_SIZE-1) >> PAGE_SHIFT; -+ i_page = (header->r_buf_size + PAGE_SIZE-1) >> PAGE_SHIFT; -+ -+ header->pid = gldata->pid; -+ -+ if ((o_page && i_page) && -+ (o_page > gldata->pages || i_page > gldata->pages)) { -+ i_page = 0; -+ } -+ -+ if (o_page > gldata->pages) -+ o_page = gldata->pages; -+ -+ if (i_page > gldata->pages) -+ i_page = gldata->pages; -+ -+ if (!o_page) -+ o_page = 1; -+ -+ sg_entries = o_page + i_page; -+ -+ sg_list = kcalloc(sg_entries, sizeof(struct scatterlist), GFP_KERNEL); -+ -+ if (!sg_list) { -+ ret = -EIO; -+ goto out; -+ } -+ -+ sg_init_table(sg_list, sg_entries); -+ -+ sg = vmalloc_to_sg(sg_list, gldata->buffer, o_page); -+ sg = vmalloc_to_sg(sg, gldata->buffer, i_page); -+ -+ if (!sg) { -+ ret = -EIO; -+ goto out_free; -+ } -+ -+ /* Transfer data */ -+ struct scatterlist *sgs[2]; -+ sgs[0] = &sg_list[0]; -+ sgs[1] = &sg_list[1]; -+ if (virtqueue_add_sgs(vq, sgs, o_page, i_page, (void *)1, GFP_ATOMIC) >= 0) { -+ virtqueue_kick(vq); -+ /* Chill out until it's done with the buffer. */ -+ while (!virtqueue_get_buf(vq, &count)) -+ cpu_relax(); -+ } -+ -+out_free: -+ kfree(sg_list); -+out: -+ return ret; -+} -+ -+static void free_buffer(struct virtio_gl_data *gldata) -+{ -+ if (gldata->buffer) { -+ vfree(gldata->buffer); -+ gldata->buffer = NULL; -+ } -+} -+ -+static int glmem_open(struct inode *inode, struct file *file) -+{ -+ struct virtio_gl_data *gldata = kzalloc(sizeof(struct virtio_gl_data), -+ GFP_KERNEL); -+ -+ if (!gldata) -+ return -ENXIO; -+ -+ gldata->pid = pid_nr(task_pid(current)); -+ -+ file->private_data = gldata; -+ -+ return 0; -+} -+ -+static int glmem_mmap(struct file *filp, struct vm_area_struct *vma) -+{ -+ struct virtio_gl_data *gldata = to_virtio_gl_data(filp); -+ int pages = (vma->vm_end - vma->vm_start) / PAGE_SIZE; -+ -+ /* Set a reasonable limit */ -+ if (pages > 16) -+ return -ENOMEM; -+ -+ /* for now, just allow one buffer to be mmap()ed. */ -+ if (gldata->buffer) -+ return -EIO; -+ -+ gldata->buffer = vmalloc_user(pages*PAGE_SIZE); -+ -+ if (!gldata->buffer) -+ return -ENOMEM; -+ -+ gldata->pages = pages; -+ -+ if (remap_vmalloc_range(vma, gldata->buffer, 0) < 0) { -+ vfree(gldata->buffer); -+ return -EIO; -+ } -+ -+ vma->vm_flags |= VM_DONTEXPAND; -+ -+ return 0; -+} -+ -+static int glmem_fsync(struct file *filp, int datasync) -+{ -+ struct virtio_gl_data *gldata = to_virtio_gl_data(filp); -+ -+ put_data(gldata); -+ -+ return 0; -+} -+ -+static int glmem_release(struct inode *inode, struct file *file) -+{ -+ struct virtio_gl_data *gldata = to_virtio_gl_data(file); -+ -+ if (gldata && gldata->buffer) { -+ struct virtio_gl_header *header = -+ (struct virtio_gl_header *)gldata->buffer; -+ -+ /* Make sure the host hears about the process ending / dying */ -+ header->pid = gldata->pid; -+ header->buf_size = SIZE_OUT_HEADER + 2; -+ header->r_buf_size = SIZE_IN_HEADER; -+ *(short *)(&header->buffer) = -1; -+ -+ put_data(gldata); -+ free_buffer(gldata); -+ } -+ -+ kfree(gldata); -+ -+ return 0; -+} -+ -+static const struct file_operations glmem_fops = { -+ .owner = THIS_MODULE, -+ .open = glmem_open, -+ .mmap = glmem_mmap, -+ .fsync = glmem_fsync, -+ .release = glmem_release, -+}; -+ -+static struct miscdevice glmem_dev = { -+ MISC_DYNAMIC_MINOR, -+ DEVICE_NAME, -+ &glmem_fops -+}; -+ -+static int glmem_probe(struct virtio_device *vdev) -+{ -+ int ret; -+ -+ /* We expect a single virtqueue. */ -+ vq = virtio_find_single_vq(vdev, NULL, "output"); -+ if (IS_ERR(vq)) -+ return PTR_ERR(vq); -+ -+ ret = misc_register(&glmem_dev); -+ if (ret) { -+ printk(KERN_ERR "glmem: cannot register glmem_dev as misc"); -+ return -ENODEV; -+ } -+ -+ return 0; -+} -+ -+static void glmem_remove(struct virtio_device *vdev) -+{ -+ vdev->config->reset(vdev); -+ misc_deregister(&glmem_dev); -+ vdev->config->del_vqs(vdev); -+} -+ -+static struct virtio_device_id id_table[] = { -+ { VIRTIO_ID_GL, VIRTIO_DEV_ANY_ID }, -+ { 0 }, -+}; -+ -+static struct virtio_driver virtio_gl_driver = { -+ .driver = { -+ .name = KBUILD_MODNAME, -+ .owner = THIS_MODULE, -+ }, -+ .id_table = id_table, -+ .probe = glmem_probe, -+ .remove = glmem_remove, -+}; -+ -+static int __init glmem_init(void) -+{ -+ return register_virtio_driver(&virtio_gl_driver); -+} -+ -+static void __exit glmem_exit(void) -+{ -+ unregister_virtio_driver(&virtio_gl_driver); -+} -+ -+module_init(glmem_init); -+module_exit(glmem_exit); -+ -+MODULE_DEVICE_TABLE(virtio, id_table); -+MODULE_DESCRIPTION("Virtio gl passthrough driver"); -+MODULE_LICENSE("GPL v2"); -+ -diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig -index 3d94a14..9a9a6cc 100644 ---- a/drivers/video/Kconfig -+++ b/drivers/video/Kconfig -@@ -16,6 +16,7 @@ source "drivers/char/agp/Kconfig" - endmenu - - source "drivers/video/backlight/Kconfig" -+source "drivers/gpu/misc/Kconfig" - - config VGASTATE - tristate ---- linux-3.4/include/uapi/linux/virtio_ids.h~ 2012-05-21 08:42:02.000000000 +0200 -+++ linux-3.4/include/uapi/linux/virtio_ids.h 2012-05-21 09:02:40.065957644 +0200 -@@ -34,6 +34,7 @@ - #define VIRTIO_ID_CONSOLE 3 /* virtio console */ - #define VIRTIO_ID_RNG 4 /* virtio ring */ - #define VIRTIO_ID_BALLOON 5 /* virtio balloon */ -+#define VIRTIO_ID_GL 6 /* virtio usermem */ - #define VIRTIO_ID_RPMSG 7 /* virtio remote processor messaging */ - #define VIRTIO_ID_SCSI 8 /* virtio scsi */ - #define VIRTIO_ID_9P 9 /* 9p virtio console */ - diff --git a/kernel.spec b/kernel.spec index 3522158..8054ed3 100644 --- a/kernel.spec +++ b/kernel.spec @@ -71,7 +71,7 @@ %define rel 0.1 %define basever 4.6 -%define postver .0 +%define postver .1 # define this to '-%{basever}' for longterm branch %define versuffix %{nil} @@ -120,7 +120,7 @@ Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{basever}.tar.xz # Source0-md5: d2927020e24a76da4ab482a8bc3e9ef3 %if "%{postver}" != ".0" Patch0: http://www.kernel.org/pub/linux/kernel/v4.x/patch-%{version}.xz -# Patch0-md5: 137460a1e32335e2eedc61fcfc2643fa +# Patch0-md5: e3479d9c8a0e8757c16eb03a4258587c %endif Source1: kernel.sysconfig @@ -219,9 +219,6 @@ Patch150: http://kerneldedup.org/download/uksm/%{uksm_major_version}/uksm-%{uksm # Show normal colors in menuconfig with ncurses ABI 6 Patch250: kernel-fix_256colors_menuconfig.patch -# https://patchwork.kernel.org/patch/236261/ -Patch400: kernel-virtio-gl-accel.patch - Patch2000: kernel-small_fixes.patch Patch2001: kernel-pwc-uncompress.patch Patch2003: kernel-regressions.patch @@ -723,9 +720,6 @@ cd linux-%{basever} %patch250 -p1 -# virtio-gl -%patch400 -p1 - %endif # vanilla # Small fixes: |