rpms/kernel/devel drm-nouveau.patch, 1.24, 1.25 kernel.spec, 1.1427, 1.1428
Ben Skeggs
bskeggs at fedoraproject.org
Fri Mar 13 07:42:02 UTC 2009
- Previous message (by thread): rpms/perl-Data-Buffer/EL-5 perl-Data-Buffer.spec,1.3,1.4
- Next message (by thread): rpms/xorg-x11-drv-nouveau/devel .cvsignore, 1.16, 1.17 nouveau-fedora.patch, 1.6, 1.7 sources, 1.17, 1.18 xorg-x11-drv-nouveau.spec, 1.22, 1.23
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: bskeggs
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv4013
Modified Files:
drm-nouveau.patch kernel.spec
Log Message:
* Fri Mar 13 2009 Ben Skeggs <bskeggs at redhat.com>
- drm-nouveau.patch: support needed for multiple xservers
drm-nouveau.patch:
Index: drm-nouveau.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/drm-nouveau.patch,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- drm-nouveau.patch 12 Mar 2009 02:11:40 -0000 1.24
+++ drm-nouveau.patch 13 Mar 2009 07:41:58 -0000 1.25
@@ -102,6 +102,89 @@
if (mask & ~fence->type) {
DRM_ERROR("Wait trying to extend fence type"
+diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
+index c1173d8..2e4e667 100644
+--- a/drivers/gpu/drm/drm_gem.c
++++ b/drivers/gpu/drm/drm_gem.c
+@@ -280,48 +280,58 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data,
+ * is freed, the name goes away.
+ */
+ int
+-drm_gem_flink_ioctl(struct drm_device *dev, void *data,
+- struct drm_file *file_priv)
++drm_gem_object_name(struct drm_device *dev, struct drm_gem_object *obj,
++ uint64_t *name)
+ {
+- struct drm_gem_flink *args = data;
+- struct drm_gem_object *obj;
+ int ret;
+
+- if (!(dev->driver->driver_features & DRIVER_GEM))
+- return -ENODEV;
+-
+- obj = drm_gem_object_lookup(dev, file_priv, args->handle);
+- if (obj == NULL)
+- return -EBADF;
+-
+ again:
+- if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0) {
+- ret = -ENOMEM;
+- goto err;
+- }
++ if (idr_pre_get(&dev->object_name_idr, GFP_KERNEL) == 0)
++ return -ENOMEM;
+
+ spin_lock(&dev->object_name_lock);
+ if (!obj->name) {
+ ret = idr_get_new_above(&dev->object_name_idr, obj, 1,
+ &obj->name);
+- args->name = (uint64_t) obj->name;
++ *name = (uint64_t) obj->name;
+ spin_unlock(&dev->object_name_lock);
+
+ if (ret == -EAGAIN)
+ goto again;
+
+ if (ret != 0)
+- goto err;
++ return ret;
+
+ /* Allocate a reference for the name table. */
+ drm_gem_object_reference(obj);
+ } else {
+- args->name = (uint64_t) obj->name;
++ *name = (uint64_t) obj->name;
+ spin_unlock(&dev->object_name_lock);
+- ret = 0;
+ }
+
+-err:
++ return 0;
++}
++EXPORT_SYMBOL(drm_gem_object_name);
++
++int
++drm_gem_flink_ioctl(struct drm_device *dev, void *data,
++ struct drm_file *file_priv)
++{
++ struct drm_gem_flink *args = data;
++ struct drm_gem_object *obj;
++ uint64_t name;
++ int ret;
++
++ if (!(dev->driver->driver_features & DRIVER_GEM))
++ return -ENODEV;
++
++ obj = drm_gem_object_lookup(dev, file_priv, args->handle);
++ if (obj == NULL)
++ return -EBADF;
++
++ ret = drm_gem_object_name(dev, obj, &name);
++ args->name = name;
++
+ mutex_lock(&dev->struct_mutex);
+ drm_gem_object_unreference(obj);
+ mutex_unlock(&dev->struct_mutex);
diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c
index 5d45cbf..e3b0a76 100644
--- a/drivers/gpu/drm/drm_stub.c
@@ -2529,10 +2612,10 @@
+MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
new file mode 100644
-index 0000000..06e3f9e
+index 0000000..c281440
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
-@@ -0,0 +1,741 @@
+@@ -0,0 +1,746 @@
+/*
+ * Copyright 2005 Stephane Marchesin.
+ * All Rights Reserved.
@@ -2903,6 +2986,11 @@
+ struct mutex submit_mutex;
+
+ struct backlight_device *backlight;
++
++ struct drm_gem_object *sfb_gem;
++ struct mem_block *sfb;
++ uint64_t sfbhack_handle;
++ uint64_t sfbhack_size;
+};
+
+#define NOUVEAU_CHECK_INITIALISED_WITH_RETURN do { \
@@ -10321,10 +10409,10 @@
+}
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
new file mode 100644
-index 0000000..756141a
+index 0000000..2988664
--- /dev/null
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
-@@ -0,0 +1,943 @@
+@@ -0,0 +1,1038 @@
+/*
+ * Copyright 2005 Stephane Marchesin
+ * Copyright 2008 Stuart Bennett
@@ -10363,6 +10451,84 @@
+static int nouveau_stub_init(struct drm_device *dev) { return 0; }
+static void nouveau_stub_takedown(struct drm_device *dev) {}
+
++extern int drm_gem_object_name(struct drm_device *, struct drm_gem_object *,
++ uint64_t *);
++static int
++sfbhack_init(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++ uint32_t flags;
++ int ret, size;
++
++ if (dev_priv->sfb_gem || dev_priv->sfb)
++ return 0;
++
++ size = nouveau_mem_fb_amount(dev);
++ if (size > drm_get_resource_len(dev, 1))
++ size = drm_get_resource_len(dev, 1);
++ size >>= 1;
++
++ if (dev_priv->mm_enabled) {
++ flags = NOUVEAU_GEM_DOMAIN_VRAM;
++ if (dev_priv->card_type == NV_50)
++ flags |= NOUVEAU_GEM_DOMAIN_TILE;
++
++ ret = nouveau_gem_new(dev, dev_priv->channel, size, 0,
++ flags, &dev_priv->sfb_gem);
++ if (ret)
++ return ret;
++
++ ret = nouveau_gem_pin(dev_priv->sfb_gem,
++ NOUVEAU_GEM_DOMAIN_VRAM);
++ if (ret)
++ return ret;
++
++ ret = drm_gem_object_name(dev, dev_priv->sfb_gem,
++ &dev_priv->sfbhack_handle);
++ if (ret) {
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(dev_priv->sfb_gem);
++ mutex_unlock(&dev->struct_mutex);
++ dev_priv->sfb_gem = NULL;
++ }
++
++ dev_priv->sfbhack_size = dev_priv->sfb_gem->size;
++ return 0;
++ }
++
++ flags = NOUVEAU_MEM_FB | NOUVEAU_MEM_MAPPED;
++ if (dev_priv->card_type == NV_50)
++ flags |= NOUVEAU_MEM_TILE;
++
++ dev_priv->sfb = nouveau_mem_alloc(dev, 0, size, flags,
++ (struct drm_file *)-2);
++ if (!dev_priv->sfb)
++ return -ENOMEM;
++
++ dev_priv->sfbhack_handle = ((u64)dev_priv->sfb->map_handle << 32 |
++ dev_priv->sfb->start);
++ dev_priv->sfbhack_size = dev_priv->sfb->size;
++ return 0;
++}
++
++static void
++sfbhack_takedown(struct drm_device *dev)
++{
++ struct drm_nouveau_private *dev_priv = dev->dev_private;
++
++ if (dev_priv->sfb_gem) {
++ mutex_lock(&dev->struct_mutex);
++ drm_gem_object_unreference(dev_priv->sfb_gem);
++ mutex_unlock(&dev->struct_mutex);
++ dev_priv->sfb_gem = NULL;
++ }
++
++ if (dev_priv->sfb) {
++ nouveau_mem_free(dev, dev_priv->sfb);
++ dev_priv->sfb = NULL;
++ }
++}
++
+static int nouveau_init_engine_ptrs(struct drm_device *dev)
+{
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
@@ -10936,6 +11102,8 @@
+/* KMS: we need mmio at load time, not when the first drm client opens. */
+void nouveau_lastclose(struct drm_device *dev)
+{
++ sfbhack_takedown(dev);
++
+ if (drm_core_check_feature(dev, DRIVER_MODESET))
+ return;
+
@@ -10970,6 +11138,7 @@
+{
+ struct drm_nouveau_private *dev_priv = dev->dev_private;
+ struct drm_nouveau_getparam *getparam = data;
++ int ret;
+
+ NOUVEAU_CHECK_INITIALISED_WITH_RETURN;
+
@@ -11018,6 +11187,20 @@
+ case NOUVEAU_GETPARAM_VM_VRAM_BASE:
+ getparam->value = dev_priv->vm_vram_base;
+ break;
++ case 0xdeadcafe00000001: /* NOUVEAU_GETPARAM_SHAREDFB_HANDLE */
++ ret = sfbhack_init(dev);
++ if (ret)
++ return ret;
++
++ getparam->value = dev_priv->sfbhack_handle;
++ break;
++ case 0xdeadcafe00000002: /* NOUVEAU_GETPARAM_SHAREDFB_SIZE */
++ ret = sfbhack_init(dev);
++ if (ret)
++ return ret;
++
++ getparam->value = dev_priv->sfbhack_size;
++ break;
+ default:
+ DRM_ERROR("unknown parameter %lld\n", getparam->param);
+ return -EINVAL;
@@ -42765,7 +42948,7 @@
unifdef-y += via_drm.h
+unifdef-y += nouveau_drm.h
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index 99e348d..e57c98f 100644
+index b61b0c6..5b7ce2d 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1267,6 +1267,8 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data);
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1427
retrieving revision 1.1428
diff -u -r1.1427 -r1.1428
--- kernel.spec 13 Mar 2009 05:15:01 -0000 1.1427
+++ kernel.spec 13 Mar 2009 07:41:59 -0000 1.1428
@@ -1811,6 +1811,9 @@
# and build.
%changelog
+* Fri Mar 13 2009 Ben Skeggs <bskeggs at redhat.com>
+- drm-nouveau.patch: support needed for multiple xservers
+
* Fri Mar 13 2009 Kyle McMartin <kyle at redhat.com> 2.6.29-0.247.rc8
- Linux 2.6.29-rc8
- squashfs-fix-page-aligned-data.patch: upstream-ish
- Previous message (by thread): rpms/perl-Data-Buffer/EL-5 perl-Data-Buffer.spec,1.3,1.4
- Next message (by thread): rpms/xorg-x11-drv-nouveau/devel .cvsignore, 1.16, 1.17 nouveau-fedora.patch, 1.6, 1.7 sources, 1.17, 1.18 xorg-x11-drv-nouveau.spec, 1.22, 1.23
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list