rpms/kernel/devel drm-modesetting-intel-mm-private.patch, NONE, 1.1 kernel.spec, 1.966, 1.967
Kristian Høgsberg
krh at fedoraproject.org
Mon Sep 22 20:47:26 UTC 2008
Author: krh
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv8390
Modified Files:
kernel.spec
Added Files:
drm-modesetting-intel-mm-private.patch
Log Message:
* Mon Sep 22 2008 Kristian Høgsberg <krh at redhat.com>
- Add patch to allow userspace to get a handle for the buffer object
backing the drm fbdev buffer.
- Update intel modesetting for the buffer object change.
drm-modesetting-intel-mm-private.patch:
--- NEW FILE drm-modesetting-intel-mm-private.patch ---
>From 63901e2b76b591fd7e5b86c09228c953a28f992d Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Kristian=20H=C3=B8gsberg?= <krh at redhat.com>
Date: Mon, 22 Sep 2008 16:43:04 -0400
Subject: [PATCH] Update intel modesetting to use mm_private instead of mm_handle.
---
drivers/gpu/drm/i915/intel_display.c | 57 ++++++++++++++++++++++------------
drivers/gpu/drm/i915/intel_drv.h | 8 ++--
drivers/gpu/drm/i915/intel_fb.c | 6 +--
3 files changed, 43 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d7e02a2..10d120a 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -370,6 +370,7 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y)
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
struct intel_framebuffer *intel_fb;
struct drm_i915_gem_object *obj_priv;
+ struct drm_gem_object *obj;
int pipe = intel_crtc->pipe;
unsigned long Start, Offset;
int dspbase = (pipe == 0 ? DSPAADDR : DSPBADDR);
@@ -386,7 +387,8 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y)
intel_fb = to_intel_framebuffer(crtc->fb);
- obj_priv = intel_fb->obj->driver_private;
+ obj = intel_fb->base.mm_private;
+ obj_priv = obj->driver_private;
Start = obj_priv->gtt_offset;
Offset = y * crtc->fb->pitch + x * (crtc->fb->bits_per_pixel / 8);
@@ -1464,21 +1466,34 @@ static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
struct drm_device *dev = fb->dev;
+
if (fb->fbdev)
intelfb_remove(dev, fb);
drm_framebuffer_cleanup(fb);
+ drm_gem_object_unreference(fb->mm_private);
kfree(intel_fb);
}
+
+static int intel_user_framebuffer_create_handle(struct drm_framebuffer *fb,
+ struct drm_file *file_priv,
+ unsigned int *handle)
+{
+ struct drm_gem_object *object = fb->mm_private;
+
+ return drm_gem_handle_create(file_priv, object, handle);
+}
static const struct drm_framebuffer_funcs intel_fb_funcs = {
.destroy = intel_user_framebuffer_destroy,
+ .create_handle = intel_user_framebuffer_create_handle,
};
-struct drm_framebuffer *intel_user_framebuffer_create(struct drm_device *dev,
- struct drm_file *filp,
- struct drm_mode_fb_cmd *mode_cmd)
+struct drm_framebuffer *
+intel_framebuffer_create(struct drm_device *dev,
+ struct drm_mode_fb_cmd *mode_cmd,
+ void *mm_private)
{
struct intel_framebuffer *intel_fb;
@@ -1489,20 +1504,26 @@ struct drm_framebuffer *intel_user_framebuffer_create(struct drm_device *dev,
if (!drm_framebuffer_init(dev, &intel_fb->base, &intel_fb_funcs))
return NULL;
- drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd);
+ drm_helper_mode_fill_fb_struct(&intel_fb->base, mode_cmd, mm_private);
- if (filp) {
- intel_fb->obj = drm_gem_object_lookup(dev, filp,
- mode_cmd->handle);
- if (!intel_fb->obj) {
- kfree(intel_fb);
- return NULL;
- }
- }
- drm_gem_object_unreference(intel_fb->obj);
return &intel_fb->base;
}
+
+static struct drm_framebuffer *
+intel_user_framebuffer_create(struct drm_device *dev,
+ struct drm_file *filp,
+ struct drm_mode_fb_cmd *mode_cmd)
+{
+ struct drm_gem_object *obj;
+
+ obj = drm_gem_object_lookup(dev, filp, mode_cmd->handle);
+ if (!obj)
+ return NULL;
+
+ return intel_framebuffer_create(dev, mode_cmd, obj);
+}
+
static int intel_insert_new_fb(struct drm_device *dev, struct drm_file *file_priv,
struct drm_framebuffer *fb, struct drm_mode_fb_cmd *mode_cmd)
{
@@ -1519,14 +1540,10 @@ static int intel_insert_new_fb(struct drm_device *dev, struct drm_file *file_pri
mutex_unlock(&dev->struct_mutex);
return -EINVAL;
}
- drm_helper_mode_fill_fb_struct(fb, mode_cmd);
-
- drm_gem_object_unreference(intel_fb->obj);
- drm_gem_object_unreference(obj);
+ drm_gem_object_unreference(intel_fb->base.mm_private);
+ drm_helper_mode_fill_fb_struct(fb, mode_cmd, obj);
mutex_unlock(&dev->struct_mutex);
- intel_fb->obj = obj;
-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
if (crtc->fb == fb) {
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index bffbeef..256deac 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -50,7 +50,6 @@ struct intel_i2c_chan {
struct intel_framebuffer {
struct drm_framebuffer base;
- struct drm_gem_object *obj;
};
@@ -119,7 +118,8 @@ extern int intelfb_resize(struct drm_device *dev, struct drm_crtc *crtc);
extern void intel_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
u16 blue, int regno);
-extern struct drm_framebuffer *intel_user_framebuffer_create(struct drm_device *dev,
- struct drm_file *file_priv,
- struct drm_mode_fb_cmd *mode_cmd);
+extern struct drm_framebuffer *
+intel_framebuffer_create(struct drm_device *dev,
+ struct drm_mode_fb_cmd *mode_cmd,
+ void *mm_private);
#endif /* __INTEL_DRV_H__ */
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index fea083b..8ec8e73 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -488,7 +488,7 @@ int intelfb_create(struct drm_device *dev, uint32_t fb_width, uint32_t fb_height
i915_gem_clflush_object(fbo);
- fb = intel_user_framebuffer_create(dev, NULL, &mode_cmd);
+ fb = intel_framebuffer_create(dev, &mode_cmd, fbo);
if (!fb) {
DRM_ERROR("failed to allocate fb.\n");
ret = -ENOMEM;
@@ -500,8 +500,6 @@ int intelfb_create(struct drm_device *dev, uint32_t fb_width, uint32_t fb_height
intel_fb = to_intel_framebuffer(fb);
*intel_fb_p = intel_fb;
- intel_fb->obj = fbo;
-
info = framebuffer_alloc(sizeof(struct intelfb_par), device);
if (!info) {
ret = -ENOMEM;
@@ -897,7 +895,7 @@ int intelfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
unregister_framebuffer(info);
iounmap(info->screen_base);
mutex_lock(&dev->struct_mutex);
- drm_gem_object_unreference(intel_fb->obj);
+ drm_gem_object_unreference(intel_fb->base.mm_private);
mutex_unlock(&dev->struct_mutex);
framebuffer_release(info);
}
--
1.5.6.GIT
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.966
retrieving revision 1.967
diff -u -r1.966 -r1.967
--- kernel.spec 22 Sep 2008 20:10:55 -0000 1.966
+++ kernel.spec 22 Sep 2008 20:46:55 -0000 1.967
@@ -610,6 +610,7 @@
Patch1812: drm-modesetting-i915.patch
Patch1813: drm-nouveau.patch
Patch1814: drm-create-handle-for-fb.patch
+Patch1815: drm-modesetting-intel-mm-private.patch
# kludge to make ich9 e1000 work
Patch2000: linux-2.6-e1000-ich9.patch
@@ -1169,6 +1170,7 @@
ApplyPatch drm-modesetting-i915.patch
ApplyPatch drm-nouveau.patch
ApplyPatch drm-create-handle-for-fb.patch
+ApplyPatch drm-modesetting-intel-mm-private.patch
# linux1394 git patches
ApplyPatch linux-2.6-firewire-git-update.patch
@@ -1772,6 +1774,7 @@
* Mon Sep 22 2008 Kristian Høgsberg <krh at redhat.com>
- Add patch to allow userspace to get a handle for the buffer object
backing the drm fbdev buffer.
+- Update intel modesetting for the buffer object change.
* Mon Sep 22 2008 Kyle McMartin <kyle at redhat.com>
- Linux 2.6.27-rc7
More information about the fedora-extras-commits
mailing list