* [PATCH 00/21] drm_event cleanup
@ 2016-01-08 20:36 Daniel Vetter
2016-01-08 20:36 ` [PATCH 01/21] drm: kerneldoc for drm_fops.c Daniel Vetter
` (23 more replies)
0 siblings, 24 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
Hi all,
This patch series is inspired by a WIP patch from Rob Clark to consolidate the
drm_event handling a bit. I've went a bit further and also moved the pending
event handling and unlinking into the core, which allows us to nuke a bunch of
code from drivers who all copypasted this themselves. Plus fix up all the others
who failed to handle this correctly.
Net -500 lines of code, plus kerneldoc for drm_fops.c and all the new functions
as bonus.
Comments and review highly welcome as usual.
Cheers, Daniel
Daniel Vetter (21):
drm: kerneldoc for drm_fops.c
drm: Add functions to setup/tear down drm_events.
drm/exynos: Use the new event init/free functions
drm/vmwgfx: Use the new event init/free functions
drm: Create drm_send_event helpers
drm/fsl: Remove preclose hook
drm/armada: Remove NULL open/pre/postclose hooks
drm/gma500: Remove empty preclose hook
drm: Clean up pending events in the core
drm/i915: Nuke intel_modeset_preclose
drm/atmel: Nuke preclose
drm/exynos: Remove event cancelling from postclose
drm/imx: Unconfuse preclose logic
drm/msm: Nuke preclose hooks
drm/omap: Nuke close hooks
drm/rcar: Nuke preclose hook
drm/shmob: Nuke preclose hook
drm/tegra: Stop cancelling page flip events
drm/tilcdc: Nuke preclose hook
drm/vc4: Nuke preclose hook
drm/vmwgfx: Nuke preclose hook
Documentation/DocBook/gpu.tmpl | 48 +----
drivers/gpu/drm/armada/armada_drv.c | 3 -
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 18 --
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 10 -
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 3 -
drivers/gpu/drm/drm_atomic.c | 44 ++---
drivers/gpu/drm/drm_crtc.c | 36 +---
drivers/gpu/drm/drm_fops.c | 259 ++++++++++++++++++++++---
drivers/gpu/drm/drm_irq.c | 7 +-
drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 --
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 36 +---
drivers/gpu/drm/exynos/exynos_drm_ipp.c | 28 +--
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 5 -
drivers/gpu/drm/gma500/psb_drv.c | 9 -
drivers/gpu/drm/i915/i915_dma.c | 2 -
drivers/gpu/drm/i915/intel_display.c | 21 --
drivers/gpu/drm/i915/intel_drv.h | 1 -
drivers/gpu/drm/imx/imx-drm-core.c | 13 --
drivers/gpu/drm/imx/ipuv3-crtc.c | 4 -
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 7 -
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 11 --
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 11 --
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 1 -
drivers/gpu/drm/omapdrm/omap_drv.c | 29 ---
drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --
drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 -
drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 -
drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --
drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 -
drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 -
drivers/gpu/drm/tegra/dc.c | 17 --
drivers/gpu/drm/tegra/drm.c | 3 -
drivers/gpu/drm/tegra/drm.h | 1 -
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 -
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
drivers/gpu/drm/vc4/vc4_crtc.c | 20 --
drivers/gpu/drm/vc4/vc4_drv.c | 10 -
drivers/gpu/drm/vc4/vc4_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 -
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 73 +------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 -
include/drm/drmP.h | 26 ++-
45 files changed, 299 insertions(+), 582 deletions(-)
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 01/21] drm: kerneldoc for drm_fops.c
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 02/21] drm: Add functions to setup/tear down drm_events Daniel Vetter
` (22 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Just prep work before I throw more drm_event refactorings on top.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
Documentation/DocBook/gpu.tmpl | 48 +--------------
drivers/gpu/drm/drm_fops.c | 129 ++++++++++++++++++++++++++++++++++-------
include/drm/drmP.h | 17 +++---
3 files changed, 117 insertions(+), 77 deletions(-)
diff --git a/Documentation/DocBook/gpu.tmpl b/Documentation/DocBook/gpu.tmpl
index 03535a7712eb..c434501c6868 100644
--- a/Documentation/DocBook/gpu.tmpl
+++ b/Documentation/DocBook/gpu.tmpl
@@ -2886,52 +2886,8 @@ void (*postclose) (struct drm_device *, struct drm_file *);</synopsis>
</sect2>
<sect2>
<title>File Operations</title>
- <synopsis>const struct file_operations *fops</synopsis>
- <abstract>File operations for the DRM device node.</abstract>
- <para>
- Drivers must define the file operations structure that forms the DRM
- userspace API entry point, even though most of those operations are
- implemented in the DRM core. The <methodname>open</methodname>,
- <methodname>release</methodname> and <methodname>ioctl</methodname>
- operations are handled by
- <programlisting>
- .owner = THIS_MODULE,
- .open = drm_open,
- .release = drm_release,
- .unlocked_ioctl = drm_ioctl,
- #ifdef CONFIG_COMPAT
- .compat_ioctl = drm_compat_ioctl,
- #endif
- </programlisting>
- </para>
- <para>
- Drivers that implement private ioctls that requires 32/64bit
- compatibility support must provide their own
- <methodname>compat_ioctl</methodname> handler that processes private
- ioctls and calls <function>drm_compat_ioctl</function> for core ioctls.
- </para>
- <para>
- The <methodname>read</methodname> and <methodname>poll</methodname>
- operations provide support for reading DRM events and polling them. They
- are implemented by
- <programlisting>
- .poll = drm_poll,
- .read = drm_read,
- .llseek = no_llseek,
- </programlisting>
- </para>
- <para>
- The memory mapping implementation varies depending on how the driver
- manages memory. Pre-GEM drivers will use <function>drm_mmap</function>,
- while GEM-aware drivers will use <function>drm_gem_mmap</function>. See
- <xref linkend="drm-gem"/>.
- <programlisting>
- .mmap = drm_gem_mmap,
- </programlisting>
- </para>
- <para>
- No other file operation is supported by the DRM API.
- </para>
+!Pdrivers/gpu/drm/drm_fops.c file operations
+!Edrivers/gpu/drm/drm_fops.c
</sect2>
<sect2>
<title>IOCTLs</title>
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 359ec13cdf9d..73075a1fa380 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -1,4 +1,4 @@
-/**
+/*
* \file drm_fops.c
* File operations for DRM
*
@@ -44,6 +44,46 @@
/* from BKL pushdown */
DEFINE_MUTEX(drm_global_mutex);
+/**
+ * DOC: file operations
+ *
+ * Drivers must define the file operations structure that forms the DRM
+ * userspace API entry point, even though most of those operations are
+ * implemented in the DRM core. The mandatory functions are drm_open(),
+ * drm_read(), drm_ioctl() and drm_compat_ioctl if CONFIG_COMPAT is enabled.
+ * Drivers which implement private ioctls that require 32/64 bit compatibility
+ * support must provided their onw .compat_ioctl() handler that processes
+ * private ioctls and calls drm_compat_ioctl() for core ioctls.
+ *
+ * In addition drm_read() and drm_poll() provide support for DRM events. DRM
+ * events are a generic and extensible means to send asynchronous events to
+ * userspace through the file descriptor. They are used to send vblank event and
+ * page flip completions by the KMS API. But drivers can also use it for their
+ * own needs, e.g. to signal completion of rendering.
+ *
+ * The memory mapping implementation will vary depending on how the driver
+ * manages memory. Legacy drivers will use the deprecated drm_legacy_mmap()
+ * function, modern drivers should use one of the provided memory-manager
+ * specific implementations. For GEM-based drivers this is drm_gem_mmap().
+ *
+ * No other file operations are supported by the DRM userspace API. Overall the
+ * following is an example #file_operations structure:
+ *
+ * static const example_drm_fops = {
+ * .owner = THIS_MODULE,
+ * .open = drm_open,
+ * .release = drm_release,
+ * .unlocked_ioctl = drm_ioctl,
+ * #ifdef CONFIG_COMPAT
+ * .compat_ioctl = drm_compat_ioctl,
+ * #endif
+ * .poll = drm_poll,
+ * .read = drm_read,
+ * .llseek = no_llseek,
+ * .mmap = drm_gem_mmap,
+ * };
+ */
+
static int drm_open_helper(struct file *filp, struct drm_minor *minor);
static int drm_setup(struct drm_device * dev)
@@ -67,15 +107,17 @@ static int drm_setup(struct drm_device * dev)
}
/**
- * Open file.
+ * drm_open - open method for DRM file
+ * @inode: device inode
+ * @filp: file pointer.
*
- * \param inode device inode
- * \param filp file pointer.
- * \return zero on success or a negative number on failure.
+ * This function must be used by drivers as their .open() #file_operations
+ * method. It looks up the correct DRM device and instantiates all the per-file
+ * resources for it.
+ *
+ * RETURNS:
*
- * Searches the DRM device with the same minor number, calls open_helper(), and
- * increments the device open count. If the open count was previous at zero,
- * i.e., it's the first that the device is open, then calls setup().
+ * 0 on success or negative errno value on falure.
*/
int drm_open(struct inode *inode, struct file *filp)
{
@@ -112,7 +154,7 @@ err_undo:
}
EXPORT_SYMBOL(drm_open);
-/**
+/*
* Check whether DRI will run on this CPU.
*
* \return non-zero if the DRI will run on this CPU, or zero otherwise.
@@ -125,7 +167,7 @@ static int drm_cpu_valid(void)
return 1;
}
-/**
+/*
* drm_new_set_master - Allocate a new master object and become master for the
* associated master realm.
*
@@ -179,7 +221,7 @@ out_err:
return ret;
}
-/**
+/*
* Called whenever a process opens /dev/drm.
*
* \param filp file pointer.
@@ -333,7 +375,7 @@ static void drm_events_release(struct drm_file *file_priv)
spin_unlock_irqrestore(&dev->event_lock, flags);
}
-/**
+/*
* drm_legacy_dev_reinit
*
* Reinitializes a legacy/ums drm device in it's lastclose function.
@@ -362,7 +404,7 @@ static void drm_legacy_dev_reinit(struct drm_device *dev)
DRM_DEBUG("lastclose completed\n");
}
-/**
+/*
* Take down the DRM device.
*
* \param dev DRM device structure.
@@ -384,16 +426,17 @@ void drm_lastclose(struct drm_device * dev)
}
/**
- * Release file.
+ * drm_release - release method for DRM file
+ * @inode: device inode
+ * @filp: file pointer.
*
- * \param inode device inode
- * \param file_priv DRM file private.
- * \return zero on success or a negative number on failure.
+ * This function must be used by drivers as their .release() #file_operations
+ * method. It frees any resources associated with the open file, and if this is
+ * the last open file for the DRM device also proceeds to call drm_lastclose().
*
- * If the hardware lock is held then free it, and take it again for the kernel
- * context since it's necessary to reclaim buffers. Unlink the file private
- * data from its list and free it. Decreases the open count and if it reaches
- * zero calls drm_lastclose().
+ * RETURNS:
+ *
+ * Always succeeds and returns 0.
*/
int drm_release(struct inode *inode, struct file *filp)
{
@@ -447,7 +490,7 @@ int drm_release(struct inode *inode, struct file *filp)
if (file_priv->is_master) {
struct drm_master *master = file_priv->master;
- /**
+ /*
* Since the master is disappearing, so is the
* possibility to lock.
*/
@@ -504,6 +547,32 @@ int drm_release(struct inode *inode, struct file *filp)
}
EXPORT_SYMBOL(drm_release);
+/**
+ * drm_read - read method for DRM file
+ * @filp: file pointer
+ * @buffer: userspace destination pointer for the read
+ * @count: count in bytes to read
+ * @offset: offset to read
+ *
+ * This function must be used by drivers as their .read() #file_operations
+ * method iff they use DRM events for asynchronous signalling to userspace.
+ * Since events are used by the KMS API for vblank and page flip completion this
+ * means all modern display drivers must use it.
+ *
+ * @offset is ignore, DRM events are read like a pipe. Therefore drivers also
+ * must set the .llseek() #file_operation to no_llseek(). Polling support is
+ * provided by drm_poll().
+ *
+ * This function will only ever read a full event. Therefore userspace must
+ * supply a big enough buffer to fit any event to ensure forward progress. Since
+ * the maximum event space is currently 4K it's recommended to just use that for
+ * safety.
+ *
+ * RETURNS:
+ *
+ * Number of bytes read (always aligned to full events, and can be 0) or a
+ * negative error code on failure.
+ */
ssize_t drm_read(struct file *filp, char __user *buffer,
size_t count, loff_t *offset)
{
@@ -574,6 +643,22 @@ put_back_event:
}
EXPORT_SYMBOL(drm_read);
+/**
+ * drm_poll - poll method for DRM file
+ * @filp: file pointer
+ * @wait: poll waiter table
+ *
+ * This function must be used by drivers as their .read() #file_operations
+ * method iff they use DRM events for asynchronous signalling to userspace.
+ * Since events are used by the KMS API for vblank and page flip completion this
+ * means all modern display drivers must use it.
+ *
+ * See also drm_read().
+ *
+ * RETURNS:
+ *
+ * Mask of POLL flags indicating the current status of the file.
+ */
unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
{
struct drm_file *file_priv = filp->private_data;
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index c2d253e9b6f7..fc9b9ad5b089 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -919,15 +919,14 @@ extern long drm_compat_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg);
extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
- /* Device support (drm_fops.h) */
-extern int drm_open(struct inode *inode, struct file *filp);
-extern ssize_t drm_read(struct file *filp, char __user *buffer,
- size_t count, loff_t *offset);
-extern int drm_release(struct inode *inode, struct file *filp);
-extern int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
-
- /* Mapping support (drm_vm.h) */
-extern unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
+/* File Operations (drm_fops.c) */
+int drm_open(struct inode *inode, struct file *filp);
+ssize_t drm_read(struct file *filp, char __user *buffer,
+ size_t count, loff_t *offset);
+int drm_release(struct inode *inode, struct file *filp);
+int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
+
+unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
/* Misc. IOCTL support (drm_ioctl.c) */
int drm_noop(struct drm_device *dev, void *data,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 02/21] drm: Add functions to setup/tear down drm_events.
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
2016-01-08 20:36 ` [PATCH 01/21] drm: kerneldoc for drm_fops.c Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 21:10 ` Alex Deucher
2016-01-09 13:27 ` [PATCH] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 03/21] drm/exynos: Use the new event init/free functions Daniel Vetter
` (21 subsequent siblings)
23 siblings, 2 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
An attempt at not spreading out the file_priv->event_space stuff out
quite so far and wide. And I think fixes something in ipp_get_event()
that is broken (or if they are doing something more weird/subtle, then
breaks it in a fun way).
Based upon a patch from Rob Clark, rebased and polished.
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_atomic.c | 44 ++++++++---------------------
drivers/gpu/drm/drm_crtc.c | 36 +++++++-----------------
drivers/gpu/drm/drm_fops.c | 67 ++++++++++++++++++++++++++++++++++++++++++++
include/drm/drmP.h | 7 ++++-
4 files changed, 94 insertions(+), 60 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 3f74193885f1..8fb469c4e4b8 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1347,44 +1347,23 @@ static struct drm_pending_vblank_event *create_vblank_event(
struct drm_device *dev, struct drm_file *file_priv, uint64_t user_data)
{
struct drm_pending_vblank_event *e = NULL;
- unsigned long flags;
-
- spin_lock_irqsave(&dev->event_lock, flags);
- if (file_priv->event_space < sizeof e->event) {
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
- file_priv->event_space -= sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
+ int ret;
e = kzalloc(sizeof *e, GFP_KERNEL);
- if (e == NULL) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
+ if (!e)
+ return NULL;
e->event.base.type = DRM_EVENT_FLIP_COMPLETE;
- e->event.base.length = sizeof e->event;
+ e->event.base.length = sizeof(e->event);
e->event.user_data = user_data;
- e->base.event = &e->event.base;
- e->base.file_priv = file_priv;
- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
-
-out:
- return e;
-}
-static void destroy_vblank_event(struct drm_device *dev,
- struct drm_file *file_priv, struct drm_pending_vblank_event *e)
-{
- unsigned long flags;
+ ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ return NULL;
+ }
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
- kfree(e);
+ return e;
}
static int atomic_set_prop(struct drm_atomic_state *state,
@@ -1646,8 +1625,7 @@ out:
if (!crtc_state->event)
continue;
- destroy_vblank_event(dev, file_priv,
- crtc_state->event);
+ drm_event_cancel_free(dev, &crtc_state->event->base);
}
}
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 1e75a145834a..60a4184d41b7 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -5264,7 +5264,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
struct drm_crtc *crtc;
struct drm_framebuffer *fb = NULL;
struct drm_pending_vblank_event *e = NULL;
- unsigned long flags;
int ret = -EINVAL;
if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS ||
@@ -5315,41 +5314,26 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
}
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
- ret = -ENOMEM;
- spin_lock_irqsave(&dev->event_lock, flags);
- if (file_priv->event_space < sizeof(e->event)) {
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
- file_priv->event_space -= sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
-
- e = kzalloc(sizeof(*e), GFP_KERNEL);
- if (e == NULL) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
+ e = kzalloc(sizeof *e, GFP_KERNEL);
+ if (!e) {
+ ret = -ENOMEM;
goto out;
}
-
e->event.base.type = DRM_EVENT_FLIP_COMPLETE;
e->event.base.length = sizeof(e->event);
e->event.user_data = page_flip->user_data;
- e->base.event = &e->event.base;
- e->base.file_priv = file_priv;
- e->base.destroy =
- (void (*) (struct drm_pending_event *)) kfree;
+ ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ goto out;
+ }
}
crtc->primary->old_fb = crtc->primary->fb;
ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags);
if (ret) {
- if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
- kfree(e);
- }
+ if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT)
+ drm_event_cancel_free(dev, &e->base);
/* Keep the old fb, don't unref it. */
crtc->primary->old_fb = NULL;
} else {
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 73075a1fa380..d6542864bd95 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -672,3 +672,70 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
return mask;
}
EXPORT_SYMBOL(drm_poll);
+
+/**
+ * drm_event_reserve_init - init a DRM event and reserve space for it
+ * @dev: DRM device
+ * @file_priv: DRM file private data
+ * @p: tracking structure for the pending event
+ * @e: actual event data to deliver to userspace
+ *
+ * This function prepares the passed in even for eventual deliver. If the event
+ * doesn't get delivered (because the IOCTL fails later on, before queuing up
+ * anything) then the even must be cancelled and freed using
+ * drm_event_cancel_free().
+ *
+ * If callers embedded @p into a larger structure it must be allocated with
+ * kmalloc and @p must be the first member element.
+ *
+ * RETURNS:
+ *
+ * 0 on success or a negative error code on failure.
+ */
+int drm_event_reserve_init(struct drm_device *dev,
+ struct drm_file *file_priv,
+ struct drm_pending_event *p,
+ struct drm_event *e)
+{
+ unsigned long flags;
+ int ret = 0;
+
+ spin_lock_irqsave(&dev->event_lock, flags);
+
+ if (file_priv->event_space < e->length) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ file_priv->event_space -= e->length;
+
+ p->event = e;
+ p->file_priv = file_priv;
+
+ /* we *could* pass this in as arg, but everyone uses kfree: */
+ p->destroy = (void (*) (struct drm_pending_event *)) kfree;
+
+out:
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+ return ret;
+}
+EXPORT_SYMBOL(drm_event_reserve_init);
+
+/**
+ * drm_event_cancel_free - free a DRM event and release it's space
+ * @dev: DRM device
+ * @p: tracking structure for the pending event
+ *
+ * This function frees the event @p initialized with drm_event_reserve_init()
+ * and releases any allocated space.
+ */
+void drm_event_cancel_free(struct drm_device *dev,
+ struct drm_pending_event *p)
+{
+ unsigned long flags;
+ spin_lock_irqsave(&dev->event_lock, flags);
+ p->file_priv->event_space += p->event->length;
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+ p->destroy(p);
+}
+EXPORT_SYMBOL(drm_event_cancel_free);
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index fc9b9ad5b089..ad4d0a31294d 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -925,8 +925,13 @@ ssize_t drm_read(struct file *filp, char __user *buffer,
size_t count, loff_t *offset);
int drm_release(struct inode *inode, struct file *filp);
int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
-
unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
+int drm_event_reserve_init(struct drm_device *dev,
+ struct drm_file *file_priv,
+ struct drm_pending_event *p,
+ struct drm_event *e);
+void drm_event_cancel_free(struct drm_device *dev,
+ struct drm_pending_event *p);
/* Misc. IOCTL support (drm_ioctl.c) */
int drm_noop(struct drm_device *dev, void *data,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH 02/21] drm: Add functions to setup/tear down drm_events.
2016-01-08 20:36 ` [PATCH 02/21] drm: Add functions to setup/tear down drm_events Daniel Vetter
@ 2016-01-08 21:10 ` Alex Deucher
2016-01-09 13:27 ` [PATCH] " Daniel Vetter
1 sibling, 0 replies; 123+ messages in thread
From: Alex Deucher @ 2016-01-08 21:10 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On Fri, Jan 8, 2016 at 3:36 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> An attempt at not spreading out the file_priv->event_space stuff out
> quite so far and wide. And I think fixes something in ipp_get_event()
> that is broken (or if they are doing something more weird/subtle, then
> breaks it in a fun way).
>
> Based upon a patch from Rob Clark, rebased and polished.
>
> Cc: Rob Clark <robdclark@gmail.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/drm_atomic.c | 44 ++++++++---------------------
> drivers/gpu/drm/drm_crtc.c | 36 +++++++-----------------
> drivers/gpu/drm/drm_fops.c | 67 ++++++++++++++++++++++++++++++++++++++++++++
> include/drm/drmP.h | 7 ++++-
> 4 files changed, 94 insertions(+), 60 deletions(-)
>
<snip>
> +
> +/**
> + * drm_event_reserve_init - init a DRM event and reserve space for it
> + * @dev: DRM device
> + * @file_priv: DRM file private data
> + * @p: tracking structure for the pending event
> + * @e: actual event data to deliver to userspace
> + *
> + * This function prepares the passed in even for eventual deliver. If the event
Typo even -> event, deliver -> delivery
Alex
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm: Add functions to setup/tear down drm_events.
2016-01-08 20:36 ` [PATCH 02/21] drm: Add functions to setup/tear down drm_events Daniel Vetter
2016-01-08 21:10 ` Alex Deucher
@ 2016-01-09 13:27 ` Daniel Vetter
1 sibling, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-09 13:27 UTC (permalink / raw)
To: DRI Development
Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development,
Daniel Vetter
An attempt at not spreading out the file_priv->event_space stuff out
quite so far and wide. And I think fixes something in ipp_get_event()
that is broken (or if they are doing something more weird/subtle, then
breaks it in a fun way).
Based upon a patch from Rob Clark, rebased and polished.
v2: Spelling fixes (Alex).
Cc: Alex Deucher <alexdeucher@gmail.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_atomic.c | 44 ++++++++---------------------
drivers/gpu/drm/drm_crtc.c | 36 +++++++-----------------
drivers/gpu/drm/drm_fops.c | 67 ++++++++++++++++++++++++++++++++++++++++++++
include/drm/drmP.h | 7 ++++-
4 files changed, 94 insertions(+), 60 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 3f74193885f1..8fb469c4e4b8 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1347,44 +1347,23 @@ static struct drm_pending_vblank_event *create_vblank_event(
struct drm_device *dev, struct drm_file *file_priv, uint64_t user_data)
{
struct drm_pending_vblank_event *e = NULL;
- unsigned long flags;
-
- spin_lock_irqsave(&dev->event_lock, flags);
- if (file_priv->event_space < sizeof e->event) {
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
- file_priv->event_space -= sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
+ int ret;
e = kzalloc(sizeof *e, GFP_KERNEL);
- if (e == NULL) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
+ if (!e)
+ return NULL;
e->event.base.type = DRM_EVENT_FLIP_COMPLETE;
- e->event.base.length = sizeof e->event;
+ e->event.base.length = sizeof(e->event);
e->event.user_data = user_data;
- e->base.event = &e->event.base;
- e->base.file_priv = file_priv;
- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
-
-out:
- return e;
-}
-static void destroy_vblank_event(struct drm_device *dev,
- struct drm_file *file_priv, struct drm_pending_vblank_event *e)
-{
- unsigned long flags;
+ ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ return NULL;
+ }
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof e->event;
- spin_unlock_irqrestore(&dev->event_lock, flags);
- kfree(e);
+ return e;
}
static int atomic_set_prop(struct drm_atomic_state *state,
@@ -1646,8 +1625,7 @@ out:
if (!crtc_state->event)
continue;
- destroy_vblank_event(dev, file_priv,
- crtc_state->event);
+ drm_event_cancel_free(dev, &crtc_state->event->base);
}
}
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 1e75a145834a..60a4184d41b7 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -5264,7 +5264,6 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
struct drm_crtc *crtc;
struct drm_framebuffer *fb = NULL;
struct drm_pending_vblank_event *e = NULL;
- unsigned long flags;
int ret = -EINVAL;
if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS ||
@@ -5315,41 +5314,26 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
}
if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
- ret = -ENOMEM;
- spin_lock_irqsave(&dev->event_lock, flags);
- if (file_priv->event_space < sizeof(e->event)) {
- spin_unlock_irqrestore(&dev->event_lock, flags);
- goto out;
- }
- file_priv->event_space -= sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
-
- e = kzalloc(sizeof(*e), GFP_KERNEL);
- if (e == NULL) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
+ e = kzalloc(sizeof *e, GFP_KERNEL);
+ if (!e) {
+ ret = -ENOMEM;
goto out;
}
-
e->event.base.type = DRM_EVENT_FLIP_COMPLETE;
e->event.base.length = sizeof(e->event);
e->event.user_data = page_flip->user_data;
- e->base.event = &e->event.base;
- e->base.file_priv = file_priv;
- e->base.destroy =
- (void (*) (struct drm_pending_event *)) kfree;
+ ret = drm_event_reserve_init(dev, file_priv, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ goto out;
+ }
}
crtc->primary->old_fb = crtc->primary->fb;
ret = crtc->funcs->page_flip(crtc, fb, e, page_flip->flags);
if (ret) {
- if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT) {
- spin_lock_irqsave(&dev->event_lock, flags);
- file_priv->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&dev->event_lock, flags);
- kfree(e);
- }
+ if (page_flip->flags & DRM_MODE_PAGE_FLIP_EVENT)
+ drm_event_cancel_free(dev, &e->base);
/* Keep the old fb, don't unref it. */
crtc->primary->old_fb = NULL;
} else {
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 73075a1fa380..476408b638e3 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -672,3 +672,70 @@ unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait)
return mask;
}
EXPORT_SYMBOL(drm_poll);
+
+/**
+ * drm_event_reserve_init - init a DRM event and reserve space for it
+ * @dev: DRM device
+ * @file_priv: DRM file private data
+ * @p: tracking structure for the pending event
+ * @e: actual event data to deliver to userspace
+ *
+ * This function prepares the passed in event for eventual delivery. If the event
+ * doesn't get delivered (because the IOCTL fails later on, before queuing up
+ * anything) then the even must be cancelled and freed using
+ * drm_event_cancel_free().
+ *
+ * If callers embedded @p into a larger structure it must be allocated with
+ * kmalloc and @p must be the first member element.
+ *
+ * RETURNS:
+ *
+ * 0 on success or a negative error code on failure.
+ */
+int drm_event_reserve_init(struct drm_device *dev,
+ struct drm_file *file_priv,
+ struct drm_pending_event *p,
+ struct drm_event *e)
+{
+ unsigned long flags;
+ int ret = 0;
+
+ spin_lock_irqsave(&dev->event_lock, flags);
+
+ if (file_priv->event_space < e->length) {
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ file_priv->event_space -= e->length;
+
+ p->event = e;
+ p->file_priv = file_priv;
+
+ /* we *could* pass this in as arg, but everyone uses kfree: */
+ p->destroy = (void (*) (struct drm_pending_event *)) kfree;
+
+out:
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+ return ret;
+}
+EXPORT_SYMBOL(drm_event_reserve_init);
+
+/**
+ * drm_event_cancel_free - free a DRM event and release it's space
+ * @dev: DRM device
+ * @p: tracking structure for the pending event
+ *
+ * This function frees the event @p initialized with drm_event_reserve_init()
+ * and releases any allocated space.
+ */
+void drm_event_cancel_free(struct drm_device *dev,
+ struct drm_pending_event *p)
+{
+ unsigned long flags;
+ spin_lock_irqsave(&dev->event_lock, flags);
+ p->file_priv->event_space += p->event->length;
+ spin_unlock_irqrestore(&dev->event_lock, flags);
+ p->destroy(p);
+}
+EXPORT_SYMBOL(drm_event_cancel_free);
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index fc9b9ad5b089..ad4d0a31294d 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -925,8 +925,13 @@ ssize_t drm_read(struct file *filp, char __user *buffer,
size_t count, loff_t *offset);
int drm_release(struct inode *inode, struct file *filp);
int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv);
-
unsigned int drm_poll(struct file *filp, struct poll_table_struct *wait);
+int drm_event_reserve_init(struct drm_device *dev,
+ struct drm_file *file_priv,
+ struct drm_pending_event *p,
+ struct drm_event *e);
+void drm_event_cancel_free(struct drm_device *dev,
+ struct drm_pending_event *p);
/* Misc. IOCTL support (drm_ioctl.c) */
int drm_noop(struct drm_device *dev, void *data,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 03/21] drm/exynos: Use the new event init/free functions
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
2016-01-08 20:36 ` [PATCH 01/21] drm: kerneldoc for drm_fops.c Daniel Vetter
2016-01-08 20:36 ` [PATCH 02/21] drm: Add functions to setup/tear down drm_events Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 04/21] drm/vmwgfx: " Daniel Vetter
` (20 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
Also fixes a bug in IPP with not correctly checking/allocating for
space in the event space. Not a too serious bug since it's not a
real ringbuffer, just a limit to avoid too much kernel allocations.
Cc: Rob Clark <robdclark@gmail.com>
Cc: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 31 ++++++++-----------------------
drivers/gpu/drm/exynos/exynos_drm_ipp.c | 23 +++++++++--------------
2 files changed, 17 insertions(+), 37 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index c17efdb238a6..82e7f95dfed9 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -1072,7 +1072,6 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
struct drm_exynos_pending_g2d_event *e;
struct g2d_cmdlist_node *node;
struct g2d_cmdlist *cmdlist;
- unsigned long flags;
int size;
int ret;
@@ -1094,21 +1093,8 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
node->event = NULL;
if (req->event_type != G2D_EVENT_NOT) {
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- if (file->event_space < sizeof(e->event)) {
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
- ret = -ENOMEM;
- goto err;
- }
- file->event_space -= sizeof(e->event);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
-
e = kzalloc(sizeof(*node->event), GFP_KERNEL);
if (!e) {
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- file->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
-
ret = -ENOMEM;
goto err;
}
@@ -1116,9 +1102,12 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
e->event.base.type = DRM_EXYNOS_G2D_EVENT;
e->event.base.length = sizeof(e->event);
e->event.user_data = req->user_data;
- e->base.event = &e->event.base;
- e->base.file_priv = file;
- e->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
+
+ ret = drm_event_reserve_init(drm_dev, file, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ goto err;
+ }
node->event = e;
}
@@ -1219,12 +1208,8 @@ int exynos_g2d_set_cmdlist_ioctl(struct drm_device *drm_dev, void *data,
err_unmap:
g2d_unmap_cmdlist_gem(g2d, node, file);
err_free_event:
- if (node->event) {
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- file->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
- kfree(node->event);
- }
+ if (node->event)
+ drm_event_cancel_free(drm_dev, &node->event->base);
err:
g2d_put_cmdlist(g2d, node);
return ret;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index 67d24236e745..c8819c05e2dd 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -618,27 +618,18 @@ static void ipp_clean_mem_nodes(struct drm_device *drm_dev,
mutex_unlock(&c_node->mem_lock);
}
-static void ipp_free_event(struct drm_pending_event *event)
-{
- kfree(event);
-}
-
static int ipp_get_event(struct drm_device *drm_dev,
struct drm_exynos_ipp_cmd_node *c_node,
struct drm_exynos_ipp_queue_buf *qbuf)
{
struct drm_exynos_ipp_send_event *e;
- unsigned long flags;
+ int ret;
DRM_DEBUG_KMS("ops_id[%d]buf_id[%d]\n", qbuf->ops_id, qbuf->buf_id);
e = kzalloc(sizeof(*e), GFP_KERNEL);
- if (!e) {
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- c_node->filp->event_space += sizeof(e->event);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
+ if (!e)
return -ENOMEM;
- }
/* make event */
e->event.base.type = DRM_EXYNOS_IPP_EVENT;
@@ -646,9 +637,13 @@ static int ipp_get_event(struct drm_device *drm_dev,
e->event.user_data = qbuf->user_data;
e->event.prop_id = qbuf->prop_id;
e->event.buf_id[EXYNOS_DRM_OPS_DST] = qbuf->buf_id;
- e->base.event = &e->event.base;
- e->base.file_priv = c_node->filp;
- e->base.destroy = ipp_free_event;
+
+ ret = drm_event_reserve_init(drm_dev, c_node->filp, &e->base, &e->event.base);
+ if (ret) {
+ kfree(e);
+ return ret;
+ }
+
mutex_lock(&c_node->event_lock);
list_add_tail(&e->base.link, &c_node->event_list);
mutex_unlock(&c_node->event_lock);
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 04/21] drm/vmwgfx: Use the new event init/free functions
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (2 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 03/21] drm/exynos: Use the new event init/free functions Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 05/21] drm: Create drm_send_event helpers Daniel Vetter
` (19 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Thomas Hellstrom
Cc: Rob Clark <robdclark@gmail.com
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 32 ++++++++------------------------
1 file changed, 8 insertions(+), 24 deletions(-)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index 8e689b439890..eda93bf52a6e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -1025,38 +1025,26 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
struct vmw_event_fence_pending *event;
struct vmw_fence_manager *fman = fman_from_fence(fence);
struct drm_device *dev = fman->dev_priv->dev;
- unsigned long irq_flags;
int ret;
- spin_lock_irqsave(&dev->event_lock, irq_flags);
-
- ret = (file_priv->event_space < sizeof(event->event)) ? -EBUSY : 0;
- if (likely(ret == 0))
- file_priv->event_space -= sizeof(event->event);
-
- spin_unlock_irqrestore(&dev->event_lock, irq_flags);
-
- if (unlikely(ret != 0)) {
- DRM_ERROR("Failed to allocate event space for this file.\n");
- goto out_no_space;
- }
-
-
event = kzalloc(sizeof(*event), GFP_KERNEL);
if (unlikely(event == NULL)) {
DRM_ERROR("Failed to allocate an event.\n");
ret = -ENOMEM;
- goto out_no_event;
+ goto out_no_space;
}
event->event.base.type = DRM_VMW_EVENT_FENCE_SIGNALED;
event->event.base.length = sizeof(*event);
event->event.user_data = user_data;
- event->base.event = &event->event.base;
- event->base.file_priv = file_priv;
- event->base.destroy = (void (*) (struct drm_pending_event *)) kfree;
+ ret = drm_event_reserve_init(dev, file_priv, &event->base, &event->event.base);
+ if (unlikely(ret != 0)) {
+ DRM_ERROR("Failed to allocate event space for this file.\n");
+ kfree(event);
+ goto out_no_space;
+ }
if (flags & DRM_VMW_FE_FLAG_REQ_TIME)
ret = vmw_event_fence_action_queue(file_priv, fence,
@@ -1076,11 +1064,7 @@ static int vmw_event_fence_action_create(struct drm_file *file_priv,
return 0;
out_no_queue:
- event->base.destroy(&event->base);
-out_no_event:
- spin_lock_irqsave(&dev->event_lock, irq_flags);
- file_priv->event_space += sizeof(*event);
- spin_unlock_irqrestore(&dev->event_lock, irq_flags);
+ drm_event_cancel_free(dev, &event->base);
out_no_space:
return ret;
}
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 05/21] drm: Create drm_send_event helpers
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (3 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 04/21] drm/vmwgfx: " Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-09 13:28 ` [PATCH] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 06/21] drm/fsl: Remove preclose hook Daniel Vetter
` (18 subsequent siblings)
23 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Inki Dae, Daniel Vetter, Intel Graphics Development,
Thomas Hellstrom
Use them in the core vblank code and exynos/vmwgfx drivers.
Note that the difference between wake_up_all and _interruptible in
vmwgfx doesn't matter since the only waiter is the core code in
drm_fops.c. And that is interruptible.
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/drm_fops.c | 38 +++++++++++++++++++++++++++++++++
drivers/gpu/drm/drm_irq.c | 7 ++----
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 5 +----
drivers/gpu/drm/exynos/exynos_drm_ipp.c | 5 +----
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 3 +--
include/drm/drmP.h | 2 ++
6 files changed, 45 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index d6542864bd95..3d338075113c 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -739,3 +739,41 @@ void drm_event_cancel_free(struct drm_device *dev,
p->destroy(p);
}
EXPORT_SYMBOL(drm_event_cancel_free);
+
+/**
+ * drm_send_event_locked - send DRM event to file descriptor
+ * @dev: DRM device
+ * @e: DRM event to deliver
+ *
+ * This function sends the event @e, initialized with drm_event_reserve_init(),
+ * to its associated userspace DRM file. Callers must already hold
+ * dev->event_lock, see drm_send_event() for the unlocked version.
+ */
+void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e)
+{
+ assert_spin_locked(&dev->event_lock);
+
+ list_add_tail(&e->link,
+ &e->file_priv->event_list);
+ wake_up_interruptible(&e->file_priv->event_wait);
+}
+EXPORT_SYMBOL(drm_send_event_locked);
+
+/**
+ * drm_send_event - send DRM event to file descriptor
+ * @dev: DRM device
+ * @e: DRM event to deliver
+ *
+ * This function sends the event @e, initialized with drm_event_reserve_init(),
+ * to its associated userspace DRM file. This function acquires dev->event_lock,
+ * see drm_send_event_locked() for callers which already hold this lock.
+ */
+void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
+{
+ unsigned long irqflags;
+
+ spin_lock_irqsave(&dev->event_lock, irqflags);
+ drm_send_event_locked(dev, e);
+ spin_unlock_irqrestore(&dev->event_lock, irqflags);
+}
+EXPORT_SYMBOL(drm_send_event);
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index a70b29909974..3fe8dbff6058 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -983,15 +983,12 @@ static void send_vblank_event(struct drm_device *dev,
struct drm_pending_vblank_event *e,
unsigned long seq, struct timeval *now)
{
- assert_spin_locked(&dev->event_lock);
-
e->event.sequence = seq;
e->event.tv_sec = now->tv_sec;
e->event.tv_usec = now->tv_usec;
- list_add_tail(&e->base.link,
- &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
+ drm_send_event_locked(dev, &e->base);
+
trace_drm_vblank_event_delivered(e->base.pid, e->pipe,
e->event.sequence);
}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 82e7f95dfed9..db56c8259f18 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -893,10 +893,7 @@ static void g2d_finish_event(struct g2d_data *g2d, u32 cmdlist_no)
e->event.tv_usec = now.tv_usec;
e->event.cmdlist_no = cmdlist_no;
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- list_move_tail(&e->base.link, &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
+ drm_send_event(dev, &e->base);
}
static irqreturn_t g2d_irq_handler(int irq, void *dev_id)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index c8819c05e2dd..1f6a6c1881d6 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -1520,10 +1520,7 @@ static int ipp_send_event(struct exynos_drm_ippdrv *ippdrv,
for_each_ipp_ops(i)
e->event.buf_id[i] = tbuf_id[i];
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- list_move_tail(&e->base.link, &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
+ drm_send_event(dev, &e->base);
mutex_unlock(&c_node->event_lock);
DRM_DEBUG_KMS("done cmd[%d]prop_id[%d]buf_id[%d]\n",
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index eda93bf52a6e..e0edf149d9d5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -880,9 +880,8 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
}
list_del_init(&eaction->fpriv_head);
- list_add_tail(&eaction->event->link, &file_priv->event_list);
eaction->event = NULL;
- wake_up_all(&file_priv->event_wait);
+ drm_send_event_locked(dev, eaction->event);
spin_unlock_irqrestore(&dev->event_lock, irq_flags);
}
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ad4d0a31294d..ae73abf5c2cf 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -932,6 +932,8 @@ int drm_event_reserve_init(struct drm_device *dev,
struct drm_event *e);
void drm_event_cancel_free(struct drm_device *dev,
struct drm_pending_event *p);
+void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
+void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
/* Misc. IOCTL support (drm_ioctl.c) */
int drm_noop(struct drm_device *dev, void *data,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm: Create drm_send_event helpers
2016-01-08 20:36 ` [PATCH 05/21] drm: Create drm_send_event helpers Daniel Vetter
@ 2016-01-09 13:28 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-09 13:28 UTC (permalink / raw)
To: DRI Development
Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development,
Thomas Hellstrom
Use them in the core vblank code and exynos/vmwgfx drivers.
Note that the difference between wake_up_all and _interruptible in
vmwgfx doesn't matter since the only waiter is the core code in
drm_fops.c. And that is interruptible.
v2: Adjust existing kerneldoc too.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com> (v1)
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/drm_fops.c | 42 ++++++++++++++++++++++++++++++++-
drivers/gpu/drm/drm_irq.c | 7 ++----
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 5 +---
drivers/gpu/drm/exynos/exynos_drm_ipp.c | 5 +---
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 3 +--
include/drm/drmP.h | 2 ++
6 files changed, 48 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 476408b638e3..d85af1b2a238 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -683,7 +683,9 @@ EXPORT_SYMBOL(drm_poll);
* This function prepares the passed in event for eventual delivery. If the event
* doesn't get delivered (because the IOCTL fails later on, before queuing up
* anything) then the even must be cancelled and freed using
- * drm_event_cancel_free().
+ * drm_event_cancel_free(). Successfully initialized events should be sent out
+ * using drm_send_event() or drm_send_event_locked() to signal completion of the
+ * asynchronous event to userspace.
*
* If callers embedded @p into a larger structure it must be allocated with
* kmalloc and @p must be the first member element.
@@ -739,3 +741,41 @@ void drm_event_cancel_free(struct drm_device *dev,
p->destroy(p);
}
EXPORT_SYMBOL(drm_event_cancel_free);
+
+/**
+ * drm_send_event_locked - send DRM event to file descriptor
+ * @dev: DRM device
+ * @e: DRM event to deliver
+ *
+ * This function sends the event @e, initialized with drm_event_reserve_init(),
+ * to its associated userspace DRM file. Callers must already hold
+ * dev->event_lock, see drm_send_event() for the unlocked version.
+ */
+void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e)
+{
+ assert_spin_locked(&dev->event_lock);
+
+ list_add_tail(&e->link,
+ &e->file_priv->event_list);
+ wake_up_interruptible(&e->file_priv->event_wait);
+}
+EXPORT_SYMBOL(drm_send_event_locked);
+
+/**
+ * drm_send_event - send DRM event to file descriptor
+ * @dev: DRM device
+ * @e: DRM event to deliver
+ *
+ * This function sends the event @e, initialized with drm_event_reserve_init(),
+ * to its associated userspace DRM file. This function acquires dev->event_lock,
+ * see drm_send_event_locked() for callers which already hold this lock.
+ */
+void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
+{
+ unsigned long irqflags;
+
+ spin_lock_irqsave(&dev->event_lock, irqflags);
+ drm_send_event_locked(dev, e);
+ spin_unlock_irqrestore(&dev->event_lock, irqflags);
+}
+EXPORT_SYMBOL(drm_send_event);
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index a70b29909974..3fe8dbff6058 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -983,15 +983,12 @@ static void send_vblank_event(struct drm_device *dev,
struct drm_pending_vblank_event *e,
unsigned long seq, struct timeval *now)
{
- assert_spin_locked(&dev->event_lock);
-
e->event.sequence = seq;
e->event.tv_sec = now->tv_sec;
e->event.tv_usec = now->tv_usec;
- list_add_tail(&e->base.link,
- &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
+ drm_send_event_locked(dev, &e->base);
+
trace_drm_vblank_event_delivered(e->base.pid, e->pipe,
e->event.sequence);
}
diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
index 82e7f95dfed9..db56c8259f18 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
@@ -893,10 +893,7 @@ static void g2d_finish_event(struct g2d_data *g2d, u32 cmdlist_no)
e->event.tv_usec = now.tv_usec;
e->event.cmdlist_no = cmdlist_no;
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- list_move_tail(&e->base.link, &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
+ drm_send_event(dev, &e->base);
}
static irqreturn_t g2d_irq_handler(int irq, void *dev_id)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index c8819c05e2dd..1f6a6c1881d6 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -1520,10 +1520,7 @@ static int ipp_send_event(struct exynos_drm_ippdrv *ippdrv,
for_each_ipp_ops(i)
e->event.buf_id[i] = tbuf_id[i];
- spin_lock_irqsave(&drm_dev->event_lock, flags);
- list_move_tail(&e->base.link, &e->base.file_priv->event_list);
- wake_up_interruptible(&e->base.file_priv->event_wait);
- spin_unlock_irqrestore(&drm_dev->event_lock, flags);
+ drm_send_event(dev, &e->base);
mutex_unlock(&c_node->event_lock);
DRM_DEBUG_KMS("done cmd[%d]prop_id[%d]buf_id[%d]\n",
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index eda93bf52a6e..e0edf149d9d5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -880,9 +880,8 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
}
list_del_init(&eaction->fpriv_head);
- list_add_tail(&eaction->event->link, &file_priv->event_list);
eaction->event = NULL;
- wake_up_all(&file_priv->event_wait);
+ drm_send_event_locked(dev, eaction->event);
spin_unlock_irqrestore(&dev->event_lock, irq_flags);
}
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ad4d0a31294d..ae73abf5c2cf 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -932,6 +932,8 @@ int drm_event_reserve_init(struct drm_device *dev,
struct drm_event *e);
void drm_event_cancel_free(struct drm_device *dev,
struct drm_pending_event *p);
+void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e);
+void drm_send_event(struct drm_device *dev, struct drm_pending_event *e);
/* Misc. IOCTL support (drm_ioctl.c) */
int drm_noop(struct drm_device *dev, void *data,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 06/21] drm/fsl: Remove preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (4 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 05/21] drm: Create drm_send_event helpers Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 07/21] drm/armada: Remove NULL open/pre/postclose hooks Daniel Vetter
` (17 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Jianwei Wang, Daniel Vetter, Intel Graphics Development,
Daniel Vetter
Doesn't do anything, but annoys when auditing them all.
Cc: Jianwei Wang <jianwei.wang.chn@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
index fca97d3fc846..9648b7f9a31c 100644
--- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
+++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
@@ -112,10 +112,6 @@ static int fsl_dcu_unload(struct drm_device *dev)
return 0;
}
-static void fsl_dcu_drm_preclose(struct drm_device *dev, struct drm_file *file)
-{
-}
-
static irqreturn_t fsl_dcu_drm_irq(int irq, void *arg)
{
struct drm_device *dev = arg;
@@ -191,7 +187,6 @@ static struct drm_driver fsl_dcu_drm_driver = {
| DRIVER_PRIME | DRIVER_ATOMIC,
.load = fsl_dcu_load,
.unload = fsl_dcu_unload,
- .preclose = fsl_dcu_drm_preclose,
.irq_handler = fsl_dcu_drm_irq,
.get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = fsl_dcu_drm_enable_vblank,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 07/21] drm/armada: Remove NULL open/pre/postclose hooks
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (5 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 06/21] drm/fsl: Remove preclose hook Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 08/21] drm/gma500: Remove empty preclose hook Daniel Vetter
` (16 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Daniel Vetter, Intel Graphics Development,
Russell King
The compiler will do this, but the void hits when grepping all the
hooks for a subsystem wide audit are slightly annoying. So remove them
for next time around.
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/armada/armada_drv.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/gpu/drm/armada/armada_drv.c b/drivers/gpu/drm/armada/armada_drv.c
index 3bd7e1cde99e..82043c204b76 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -188,9 +188,6 @@ static const struct file_operations armada_drm_fops = {
static struct drm_driver armada_drm_driver = {
.load = armada_drm_load,
- .open = NULL,
- .preclose = NULL,
- .postclose = NULL,
.lastclose = armada_drm_lastclose,
.unload = armada_drm_unload,
.set_busid = drm_platform_set_busid,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 08/21] drm/gma500: Remove empty preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (6 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 07/21] drm/armada: Remove NULL open/pre/postclose hooks Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 09/21] drm: Clean up pending events in the core Daniel Vetter
` (15 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
I'm auditing them all, empty ones just confuse ...
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/gma500/psb_drv.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index 92e7e5795398..4e1c6850520e 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -442,14 +442,6 @@ static long psb_unlocked_ioctl(struct file *filp, unsigned int cmd,
/* FIXME: do we need to wrap the other side of this */
}
-/*
- * When a client dies:
- * - Check for and clean up flipped page state
- */
-static void psb_driver_preclose(struct drm_device *dev, struct drm_file *priv)
-{
-}
-
static int psb_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
return drm_get_pci_dev(pdev, ent, &driver);
@@ -495,7 +487,6 @@ static struct drm_driver driver = {
.load = psb_driver_load,
.unload = psb_driver_unload,
.lastclose = psb_driver_lastclose,
- .preclose = psb_driver_preclose,
.set_busid = drm_pci_set_busid,
.num_ioctls = ARRAY_SIZE(psb_ioctls),
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 09/21] drm: Clean up pending events in the core
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (7 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 08/21] drm/gma500: Remove empty preclose hook Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-09 13:28 ` [PATCH] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 10/21] drm/i915: Nuke intel_modeset_preclose Daniel Vetter
` (14 subsequent siblings)
23 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
There's really no reason to not do so, instead of replicating this
for every use-case and every driver. Now we can't just nuke the events,
since that would still mean that all drm_event users would need to know
when that has happened, since calling e.g. drm_send_event isn't allowed
any more. Instead just unlink them from the file, and detect this case
and handle it appropriately in all functions.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/drm_fops.c | 27 ++++++++++++++++++---------
include/drm/drmP.h | 2 ++
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index 3d338075113c..e831537dc931 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -264,6 +264,7 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor)
INIT_LIST_HEAD(&priv->fbs);
mutex_init(&priv->fbs_lock);
INIT_LIST_HEAD(&priv->blobs);
+ INIT_LIST_HEAD(&priv->pending_event_list);
INIT_LIST_HEAD(&priv->event_list);
init_waitqueue_head(&priv->event_wait);
priv->event_space = 4096; /* set aside 4k for event buffer */
@@ -353,18 +354,16 @@ static void drm_events_release(struct drm_file *file_priv)
{
struct drm_device *dev = file_priv->minor->dev;
struct drm_pending_event *e, *et;
- struct drm_pending_vblank_event *v, *vt;
unsigned long flags;
spin_lock_irqsave(&dev->event_lock, flags);
- /* Remove pending flips */
- list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link)
- if (v->base.file_priv == file_priv) {
- list_del(&v->base.link);
- drm_vblank_put(dev, v->pipe);
- v->base.destroy(&v->base);
- }
+ /* Unlink pending events */
+ list_for_each_entry_safe(e, et, &file_priv->pending_event_list,
+ pending_link) {
+ list_del(&e->pending_link);
+ e->file_priv = NULL;
+ }
/* Remove unconsumed events */
list_for_each_entry_safe(e, et, &file_priv->event_list, link) {
@@ -710,6 +709,7 @@ int drm_event_reserve_init(struct drm_device *dev,
file_priv->event_space -= e->length;
p->event = e;
+ list_add(&p->pending_link, &file_priv->pending_event_list);
p->file_priv = file_priv;
/* we *could* pass this in as arg, but everyone uses kfree: */
@@ -734,7 +734,10 @@ void drm_event_cancel_free(struct drm_device *dev,
{
unsigned long flags;
spin_lock_irqsave(&dev->event_lock, flags);
- p->file_priv->event_space += p->event->length;
+ if (p->file_priv) {
+ p->file_priv->event_space += p->event->length;
+ list_del(&p->pending_link);
+ }
spin_unlock_irqrestore(&dev->event_lock, flags);
p->destroy(p);
}
@@ -753,6 +756,12 @@ void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e)
{
assert_spin_locked(&dev->event_lock);
+ if (!e->file_priv) {
+ e->destroy(e);
+ return;
+ }
+
+ list_del(&e->pending_link);
list_add_tail(&e->link,
&e->file_priv->event_list);
wake_up_interruptible(&e->file_priv->event_wait);
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ae73abf5c2cf..3d78a7406d54 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -283,6 +283,7 @@ struct drm_ioctl_desc {
struct drm_pending_event {
struct drm_event *event;
struct list_head link;
+ struct list_head pending_link;
struct drm_file *file_priv;
pid_t pid; /* pid of requester, no guarantee it's valid by the time
we deliver the event, for tracing only */
@@ -346,6 +347,7 @@ struct drm_file {
struct list_head blobs;
wait_queue_head_t event_wait;
+ struct list_head pending_event_list;
struct list_head event_list;
int event_space;
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm: Clean up pending events in the core
2016-01-08 20:36 ` [PATCH 09/21] drm: Clean up pending events in the core Daniel Vetter
@ 2016-01-09 13:28 ` Daniel Vetter
2016-01-10 23:48 ` Laurent Pinchart
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-09 13:28 UTC (permalink / raw)
To: DRI Development; +Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development
There's really no reason to not do so, instead of replicating this
for every use-case and every driver. Now we can't just nuke the events,
since that would still mean that all drm_event users would need to know
when that has happened, since calling e.g. drm_send_event isn't allowed
any more. Instead just unlink them from the file, and detect this case
and handle it appropriately in all functions.
v2: Adjust existing kerneldoc too.
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/drm_fops.c | 35 ++++++++++++++++++++++++++---------
include/drm/drmP.h | 2 ++
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index d85af1b2a238..d32b24c74e08 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -264,6 +264,7 @@ static int drm_open_helper(struct file *filp, struct drm_minor *minor)
INIT_LIST_HEAD(&priv->fbs);
mutex_init(&priv->fbs_lock);
INIT_LIST_HEAD(&priv->blobs);
+ INIT_LIST_HEAD(&priv->pending_event_list);
INIT_LIST_HEAD(&priv->event_list);
init_waitqueue_head(&priv->event_wait);
priv->event_space = 4096; /* set aside 4k for event buffer */
@@ -353,18 +354,16 @@ static void drm_events_release(struct drm_file *file_priv)
{
struct drm_device *dev = file_priv->minor->dev;
struct drm_pending_event *e, *et;
- struct drm_pending_vblank_event *v, *vt;
unsigned long flags;
spin_lock_irqsave(&dev->event_lock, flags);
- /* Remove pending flips */
- list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link)
- if (v->base.file_priv == file_priv) {
- list_del(&v->base.link);
- drm_vblank_put(dev, v->pipe);
- v->base.destroy(&v->base);
- }
+ /* Unlink pending events */
+ list_for_each_entry_safe(e, et, &file_priv->pending_event_list,
+ pending_link) {
+ list_del(&e->pending_link);
+ e->file_priv = NULL;
+ }
/* Remove unconsumed events */
list_for_each_entry_safe(e, et, &file_priv->event_list, link) {
@@ -712,6 +711,7 @@ int drm_event_reserve_init(struct drm_device *dev,
file_priv->event_space -= e->length;
p->event = e;
+ list_add(&p->pending_link, &file_priv->pending_event_list);
p->file_priv = file_priv;
/* we *could* pass this in as arg, but everyone uses kfree: */
@@ -736,7 +736,10 @@ void drm_event_cancel_free(struct drm_device *dev,
{
unsigned long flags;
spin_lock_irqsave(&dev->event_lock, flags);
- p->file_priv->event_space += p->event->length;
+ if (p->file_priv) {
+ p->file_priv->event_space += p->event->length;
+ list_del(&p->pending_link);
+ }
spin_unlock_irqrestore(&dev->event_lock, flags);
p->destroy(p);
}
@@ -750,11 +753,21 @@ EXPORT_SYMBOL(drm_event_cancel_free);
* This function sends the event @e, initialized with drm_event_reserve_init(),
* to its associated userspace DRM file. Callers must already hold
* dev->event_lock, see drm_send_event() for the unlocked version.
+ *
+ * Note that the core will take care of unlinking and disarming events when the
+ * corresponding DRM file is closed. Drivers need to worry about that and can
+ * call this function upon completion of the asynchrnous work unconditionally.
*/
void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event *e)
{
assert_spin_locked(&dev->event_lock);
+ if (!e->file_priv) {
+ e->destroy(e);
+ return;
+ }
+
+ list_del(&e->pending_link);
list_add_tail(&e->link,
&e->file_priv->event_list);
wake_up_interruptible(&e->file_priv->event_wait);
@@ -769,6 +782,10 @@ EXPORT_SYMBOL(drm_send_event_locked);
* This function sends the event @e, initialized with drm_event_reserve_init(),
* to its associated userspace DRM file. This function acquires dev->event_lock,
* see drm_send_event_locked() for callers which already hold this lock.
+ *
+ * Note that the core will take care of unlinking and disarming events when the
+ * corresponding DRM file is closed. Drivers need to worry about that and can
+ * call this function upon completion of the asynchrnous work unconditionally.
*/
void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
{
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index ae73abf5c2cf..3d78a7406d54 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -283,6 +283,7 @@ struct drm_ioctl_desc {
struct drm_pending_event {
struct drm_event *event;
struct list_head link;
+ struct list_head pending_link;
struct drm_file *file_priv;
pid_t pid; /* pid of requester, no guarantee it's valid by the time
we deliver the event, for tracing only */
@@ -346,6 +347,7 @@ struct drm_file {
struct list_head blobs;
wait_queue_head_t event_wait;
+ struct list_head pending_event_list;
struct list_head event_list;
int event_space;
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH] drm: Clean up pending events in the core
2016-01-09 13:28 ` [PATCH] " Daniel Vetter
@ 2016-01-10 23:48 ` Laurent Pinchart
2016-01-11 14:51 ` [Intel-gfx] " Daniel Stone
0 siblings, 1 reply; 123+ messages in thread
From: Laurent Pinchart @ 2016-01-10 23:48 UTC (permalink / raw)
To: dri-devel; +Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development
Hi Daniel,
Thank you for the patch.
On Saturday 09 January 2016 14:28:46 Daniel Vetter wrote:
> There's really no reason to not do so, instead of replicating this
> for every use-case and every driver. Now we can't just nuke the events,
> since that would still mean that all drm_event users would need to know
> when that has happened, since calling e.g. drm_send_event isn't allowed
> any more. Instead just unlink them from the file, and detect this case
> and handle it appropriately in all functions.
>
> v2: Adjust existing kerneldoc too.
>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
> drivers/gpu/drm/drm_fops.c | 35 ++++++++++++++++++++++++++---------
> include/drm/drmP.h | 2 ++
> 2 files changed, 28 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
> index d85af1b2a238..d32b24c74e08 100644
> --- a/drivers/gpu/drm/drm_fops.c
> +++ b/drivers/gpu/drm/drm_fops.c
> @@ -264,6 +264,7 @@ static int drm_open_helper(struct file *filp, struct
> drm_minor *minor) INIT_LIST_HEAD(&priv->fbs);
> mutex_init(&priv->fbs_lock);
> INIT_LIST_HEAD(&priv->blobs);
> + INIT_LIST_HEAD(&priv->pending_event_list);
> INIT_LIST_HEAD(&priv->event_list);
> init_waitqueue_head(&priv->event_wait);
> priv->event_space = 4096; /* set aside 4k for event buffer */
> @@ -353,18 +354,16 @@ static void drm_events_release(struct drm_file
> *file_priv) {
> struct drm_device *dev = file_priv->minor->dev;
> struct drm_pending_event *e, *et;
> - struct drm_pending_vblank_event *v, *vt;
> unsigned long flags;
>
> spin_lock_irqsave(&dev->event_lock, flags);
>
> - /* Remove pending flips */
> - list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link)
> - if (v->base.file_priv == file_priv) {
> - list_del(&v->base.link);
> - drm_vblank_put(dev, v->pipe);
> - v->base.destroy(&v->base);
> - }
Where does this code go ?
> + /* Unlink pending events */
> + list_for_each_entry_safe(e, et, &file_priv->pending_event_list,
> + pending_link) {
> + list_del(&e->pending_link);
> + e->file_priv = NULL;
> + }
>
> /* Remove unconsumed events */
> list_for_each_entry_safe(e, et, &file_priv->event_list, link) {
> @@ -712,6 +711,7 @@ int drm_event_reserve_init(struct drm_device *dev,
> file_priv->event_space -= e->length;
>
> p->event = e;
> + list_add(&p->pending_link, &file_priv->pending_event_list);
> p->file_priv = file_priv;
>
> /* we *could* pass this in as arg, but everyone uses kfree: */
> @@ -736,7 +736,10 @@ void drm_event_cancel_free(struct drm_device *dev,
> {
> unsigned long flags;
> spin_lock_irqsave(&dev->event_lock, flags);
> - p->file_priv->event_space += p->event->length;
> + if (p->file_priv) {
> + p->file_priv->event_space += p->event->length;
> + list_del(&p->pending_link);
> + }
> spin_unlock_irqrestore(&dev->event_lock, flags);
> p->destroy(p);
> }
> @@ -750,11 +753,21 @@ EXPORT_SYMBOL(drm_event_cancel_free);
> * This function sends the event @e, initialized with
> drm_event_reserve_init(),
> * to its associated userspace DRM file. Callers must already hold
> * dev->event_lock, see drm_send_event() for the unlocked version.
> + *
> + * Note that the core will take care of unlinking and disarming events when
> the
> + * corresponding DRM file is closed. Drivers need to worry about that and
s/need to/need not/ ?
> can
> + * call this function upon completion of the asynchrnous work
s/asynchrnous/asynchronous/
> unconditionally. */
> void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event
> *e) {
> assert_spin_locked(&dev->event_lock);
>
> + if (!e->file_priv) {
I don't think this could happen before this patch as e->file_priv is
dereferenced below, and I don't see anything in this patch that makes the
condition possible.
> + e->destroy(e);
> + return;
> + }
> +
> + list_del(&e->pending_link);
> list_add_tail(&e->link,
> &e->file_priv->event_list);
> wake_up_interruptible(&e->file_priv->event_wait);
> @@ -769,6 +782,10 @@ EXPORT_SYMBOL(drm_send_event_locked);
> * This function sends the event @e, initialized with
> drm_event_reserve_init(),
> * to its associated userspace DRM file. This function acquires
> dev->event_lock,
> * see drm_send_event_locked() for callers which already hold this lock.
> + *
> + * Note that the core will take care of unlinking and disarming events when
> the
> + * corresponding DRM file is closed. Drivers need to worry about that and
s/need to/need not/ ?
> can
> + * call this function upon completion of the asynchrnous work
s/asynchrnous/asynchronous/
> unconditionally. */
> void drm_send_event(struct drm_device *dev, struct drm_pending_event *e)
> {
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index ae73abf5c2cf..3d78a7406d54 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -283,6 +283,7 @@ struct drm_ioctl_desc {
> struct drm_pending_event {
> struct drm_event *event;
> struct list_head link;
> + struct list_head pending_link;
> struct drm_file *file_priv;
> pid_t pid; /* pid of requester, no guarantee it's valid by the time
> we deliver the event, for tracing only */
> @@ -346,6 +347,7 @@ struct drm_file {
> struct list_head blobs;
>
> wait_queue_head_t event_wait;
> + struct list_head pending_event_list;
> struct list_head event_list;
> int event_space;
--
Regards,
Laurent Pinchart
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [Intel-gfx] [PATCH] drm: Clean up pending events in the core
2016-01-10 23:48 ` Laurent Pinchart
@ 2016-01-11 14:51 ` Daniel Stone
2016-01-14 18:49 ` Laurent Pinchart
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Stone @ 2016-01-11 14:51 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development,
dri-devel
Hi,
On 10 January 2016 at 23:48, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> On Saturday 09 January 2016 14:28:46 Daniel Vetter wrote:
>> @@ -353,18 +354,16 @@ static void drm_events_release(struct drm_file
>> *file_priv) {
>> struct drm_device *dev = file_priv->minor->dev;
>> struct drm_pending_event *e, *et;
>> - struct drm_pending_vblank_event *v, *vt;
>> unsigned long flags;
>>
>> spin_lock_irqsave(&dev->event_lock, flags);
>>
>> - /* Remove pending flips */
>> - list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link)
>> - if (v->base.file_priv == file_priv) {
>> - list_del(&v->base.link);
>> - drm_vblank_put(dev, v->pipe);
>> - v->base.destroy(&v->base);
>> - }
>
> Where does this code go ?
It doesn't: instead of deleting the events, the helpers to either
cancel or send the event just notice that file_priv is NULL and bail
out early.
>> + /* Unlink pending events */
>> + list_for_each_entry_safe(e, et, &file_priv->pending_event_list,
>> + pending_link) {
>> + list_del(&e->pending_link);
>> + e->file_priv = NULL;
>> + }
file_priv gets reset here ...
>> @@ -736,7 +736,10 @@ void drm_event_cancel_free(struct drm_device *dev,
>> {
>> unsigned long flags;
>> spin_lock_irqsave(&dev->event_lock, flags);
>> - p->file_priv->event_space += p->event->length;
>> + if (p->file_priv) {
>> + p->file_priv->event_space += p->event->length;
>> + list_del(&p->pending_link);
>> + }
>> spin_unlock_irqrestore(&dev->event_lock, flags);
>> p->destroy(p);
Allowing us to DTRT here ...
>> void drm_send_event_locked(struct drm_device *dev, struct drm_pending_event
>> *e) {
>> assert_spin_locked(&dev->event_lock);
>>
>> + if (!e->file_priv) {
>
> I don't think this could happen before this patch as e->file_priv is
> dereferenced below, and I don't see anything in this patch that makes the
> condition possible.
>
>> + e->destroy(e);
>> + return;
>> + }
... and now here.
This looks good to me, and a good sight better than doing it in every
driver. Still drowning in stuff after three weeks off though, so the
best I can offer for the series right now is:
Acked-by: Daniel Stone <daniels@collabora.com>
Cheers,
Daniel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH] drm: Clean up pending events in the core
2016-01-11 14:51 ` [Intel-gfx] " Daniel Stone
@ 2016-01-14 18:49 ` Laurent Pinchart
0 siblings, 0 replies; 123+ messages in thread
From: Laurent Pinchart @ 2016-01-14 18:49 UTC (permalink / raw)
To: Daniel Stone
Cc: Alex Deucher, Daniel Vetter, Intel Graphics Development,
dri-devel
Hi Daniel,
On Monday 11 January 2016 14:51:46 Daniel Stone wrote:
> On 10 January 2016 at 23:48, Laurent Pinchart wrote:
> > On Saturday 09 January 2016 14:28:46 Daniel Vetter wrote:
> >> @@ -353,18 +354,16 @@ static void drm_events_release(struct drm_file
> >> *file_priv) {
> >>
> >> struct drm_device *dev = file_priv->minor->dev;
> >> struct drm_pending_event *e, *et;
> >>
> >> - struct drm_pending_vblank_event *v, *vt;
> >>
> >> unsigned long flags;
> >>
> >> spin_lock_irqsave(&dev->event_lock, flags);
> >>
> >> - /* Remove pending flips */
> >> - list_for_each_entry_safe(v, vt, &dev->vblank_event_list, base.link)
> >> - if (v->base.file_priv == file_priv) {
> >> - list_del(&v->base.link);
> >> - drm_vblank_put(dev, v->pipe);
> >> - v->base.destroy(&v->base);
> >> - }
> >
> > Where does this code go ?
>
> It doesn't: instead of deleting the events, the helpers to either
> cancel or send the event just notice that file_priv is NULL and bail
> out early.
Thank you for the explanation. What bothered me was that the drm_vblank_put()
call got dropped. With v2 of this patch series that splits that change to a
separate patch it's easier to understand.
> >> + /* Unlink pending events */
> >> + list_for_each_entry_safe(e, et, &file_priv->pending_event_list,
> >> + pending_link) {
> >> + list_del(&e->pending_link);
> >> + e->file_priv = NULL;
> >> + }
>
> file_priv gets reset here ...
>
> >> @@ -736,7 +736,10 @@ void drm_event_cancel_free(struct drm_device *dev,
> >>
> >> {
> >>
> >> unsigned long flags;
> >> spin_lock_irqsave(&dev->event_lock, flags);
> >>
> >> - p->file_priv->event_space += p->event->length;
> >> + if (p->file_priv) {
> >> + p->file_priv->event_space += p->event->length;
> >> + list_del(&p->pending_link);
> >> + }
> >>
> >> spin_unlock_irqrestore(&dev->event_lock, flags);
> >> p->destroy(p);
>
> Allowing us to DTRT here ...
>
> >> void drm_send_event_locked(struct drm_device *dev, struct
> >> drm_pending_event
> >>
> >> *e) {
> >>
> >> assert_spin_locked(&dev->event_lock);
> >>
> >> + if (!e->file_priv) {
> >
> > I don't think this could happen before this patch as e->file_priv is
> > dereferenced below, and I don't see anything in this patch that makes the
> > condition possible.
> >
> >> + e->destroy(e);
> >> + return;
> >> + }
>
> ... and now here.
>
> This looks good to me, and a good sight better than doing it in every
> driver. Still drowning in stuff after three weeks off though, so the
> best I can offer for the series right now is:
> Acked-by: Daniel Stone <daniels@collabora.com>
--
Regards,
Laurent Pinchart
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 10/21] drm/i915: Nuke intel_modeset_preclose
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (8 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 09/21] drm: Clean up pending events in the core Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 11/21] drm/atmel: Nuke preclose Daniel Vetter
` (13 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Now that the drm core unlinks/disarms events there's no need to do so
ourselves anymore. Nuke the code.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 2 --
drivers/gpu/drm/i915/intel_display.c | 21 ---------------------
drivers/gpu/drm/i915/intel_drv.h | 1 -
3 files changed, 24 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index a0f5659032fc..4bfa72e5a217 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1262,8 +1262,6 @@ void i915_driver_preclose(struct drm_device *dev, struct drm_file *file)
i915_gem_context_close(dev, file);
i915_gem_release(dev, file);
mutex_unlock(&dev->struct_mutex);
-
- intel_modeset_preclose(dev, file);
}
void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b0928b1413e2..aa7e9c04a923 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -16355,24 +16355,3 @@ intel_display_print_error_state(struct drm_i915_error_state_buf *m,
err_printf(m, " VSYNC: %08x\n", error->transcoder[i].vsync);
}
}
-
-void intel_modeset_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct intel_crtc *crtc;
-
- for_each_intel_crtc(dev, crtc) {
- struct intel_unpin_work *work;
-
- spin_lock_irq(&dev->event_lock);
-
- work = crtc->unpin_work;
-
- if (work && work->event &&
- work->event->base.file_priv == file) {
- kfree(work->event);
- work->event = NULL;
- }
-
- spin_unlock_irq(&dev->event_lock);
- }
-}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index e88050aee0c1..5e7422085162 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1235,7 +1235,6 @@ enum intel_display_power_domain
intel_display_port_aux_power_domain(struct intel_encoder *intel_encoder);
void intel_mode_from_pipe_config(struct drm_display_mode *mode,
struct intel_crtc_state *pipe_config);
-void intel_modeset_preclose(struct drm_device *dev, struct drm_file *file);
int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state);
int skl_max_scale(struct intel_crtc *crtc, struct intel_crtc_state *crtc_state);
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 11/21] drm/atmel: Nuke preclose
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (9 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 10/21] drm/i915: Nuke intel_modeset_preclose Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 12/21] drm/exynos: Remove event cancelling from postclose Daniel Vetter
` (12 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Daniel Vetter, Intel Graphics Development
The only thing this did was cancle pending flip events, and the core
takes care of that now.
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 18 ------------------
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 10 ----------
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 3 ---
3 files changed, 31 deletions(-)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index 468a14f266a7..9863291a9a54 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -280,24 +280,6 @@ static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c)
kfree(crtc);
}
-void atmel_hlcdc_crtc_cancel_page_flip(struct drm_crtc *c,
- struct drm_file *file)
-{
- struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = c->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&dev->event_lock, flags);
- event = crtc->event;
- if (event && event->base.file_priv == file) {
- event->base.destroy(&event->base);
- drm_vblank_put(dev, crtc->id);
- crtc->event = NULL;
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
static void atmel_hlcdc_crtc_finish_page_flip(struct atmel_hlcdc_crtc *crtc)
{
struct drm_device *dev = crtc->base.dev;
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index a45b32ba029e..3d8d16402d07 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -619,15 +619,6 @@ static void atmel_hlcdc_dc_connector_unplug_all(struct drm_device *dev)
mutex_unlock(&dev->mode_config.mutex);
}
-static void atmel_hlcdc_dc_preclose(struct drm_device *dev,
- struct drm_file *file)
-{
- struct drm_crtc *crtc;
-
- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
- atmel_hlcdc_crtc_cancel_page_flip(crtc, file);
-}
-
static void atmel_hlcdc_dc_lastclose(struct drm_device *dev)
{
struct atmel_hlcdc_dc *dc = dev->dev_private;
@@ -698,7 +689,6 @@ static struct drm_driver atmel_hlcdc_dc_driver = {
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
DRIVER_MODESET | DRIVER_PRIME |
DRIVER_ATOMIC,
- .preclose = atmel_hlcdc_dc_preclose,
.lastclose = atmel_hlcdc_dc_lastclose,
.irq_handler = atmel_hlcdc_dc_irq_handler,
.irq_preinstall = atmel_hlcdc_dc_irq_uninstall,
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
index cf6b375bc38d..fed517f297da 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
@@ -152,9 +152,6 @@ int atmel_hlcdc_plane_prepare_disc_area(struct drm_crtc_state *c_state);
void atmel_hlcdc_crtc_irq(struct drm_crtc *c);
-void atmel_hlcdc_crtc_cancel_page_flip(struct drm_crtc *crtc,
- struct drm_file *file);
-
void atmel_hlcdc_crtc_suspend(struct drm_crtc *crtc);
void atmel_hlcdc_crtc_resume(struct drm_crtc *crtc);
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 12/21] drm/exynos: Remove event cancelling from postclose
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (10 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 11/21] drm/atmel: Nuke preclose Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 13/21] drm/imx: Unconfuse preclose logic Daniel Vetter
` (11 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
The core takes care of this now. And since kfree(NULL) is ok we can
simplify the function even further now.
Cc: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 9756797a15a5..868ab9f54f17 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -335,20 +335,6 @@ static void exynos_drm_preclose(struct drm_device *dev,
static void exynos_drm_postclose(struct drm_device *dev, struct drm_file *file)
{
- struct drm_pending_event *e, *et;
- unsigned long flags;
-
- if (!file->driver_priv)
- return;
-
- spin_lock_irqsave(&dev->event_lock, flags);
- /* Release all events handled by page flip handler but not freed. */
- list_for_each_entry_safe(e, et, &file->event_list, link) {
- list_del(&e->link);
- e->destroy(e);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-
kfree(file->driver_priv);
file->driver_priv = NULL;
}
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 13/21] drm/imx: Unconfuse preclose logic
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (11 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 12/21] drm/exynos: Remove event cancelling from postclose Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 14/21] drm/msm: Nuke preclose hooks Daniel Vetter
` (10 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
So this one is special, since it tries to prevent races when userspace
crashes simply by disabling the vblank machinery. Well except that imx
always has vblanks enabled, and the disable_vblank hook actually just
tries to cancel a pending pageflip. Without any locking whatsoever. Of
course this is wrong, since it'll result in the hw not actually
displaying what drm thinks is the current frontbuffer.
Well since the core takes care of the disappearing DRM fd now. So we
can nuke all this confused code without ill side-effects.
Someone else needs to audit the locking for ->newfb and
->page_flip_event and fix it up. Common approach is to reuse
dev->event_lock for this.
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/imx/imx-drm-core.c | 13 -------------
drivers/gpu/drm/imx/ipuv3-crtc.c | 4 ----
2 files changed, 17 deletions(-)
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c
index 7be7ac808304..ff94ca4a2c1e 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -171,18 +171,6 @@ static void imx_drm_disable_vblank(struct drm_device *drm, unsigned int pipe)
imx_drm_crtc->imx_drm_helper_funcs.disable_vblank(imx_drm_crtc->crtc);
}
-static void imx_drm_driver_preclose(struct drm_device *drm,
- struct drm_file *file)
-{
- int i;
-
- if (!file->is_master)
- return;
-
- for (i = 0; i < MAX_CRTC; i++)
- imx_drm_disable_vblank(drm, i);
-}
-
static const struct file_operations imx_drm_driver_fops = {
.owner = THIS_MODULE,
.open = drm_open,
@@ -462,7 +450,6 @@ static struct drm_driver imx_drm_driver = {
.load = imx_drm_driver_load,
.unload = imx_drm_driver_unload,
.lastclose = imx_drm_driver_lastclose,
- .preclose = imx_drm_driver_preclose,
.set_busid = drm_platform_set_busid,
.gem_free_object = drm_gem_cma_free_object,
.gem_vm_ops = &drm_gem_cma_vm_ops,
diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
index 30a57185bdb4..846b5f558897 100644
--- a/drivers/gpu/drm/imx/ipuv3-crtc.c
+++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
@@ -285,10 +285,6 @@ static int ipu_enable_vblank(struct drm_crtc *crtc)
static void ipu_disable_vblank(struct drm_crtc *crtc)
{
- struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
-
- ipu_crtc->page_flip_event = NULL;
- ipu_crtc->newfb = NULL;
}
static int ipu_set_interface_pix_fmt(struct drm_crtc *crtc,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 14/21] drm/msm: Nuke preclose hooks
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (12 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 13/21] drm/imx: Unconfuse preclose logic Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 15/21] drm/omap: Nuke close hooks Daniel Vetter
` (9 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
They only complete the page flip events to avoid oops when the drm
file closes. The core takes care of that now and we can remove this
code.
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 7 -------
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 11 -----------
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 ------
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 11 -----------
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 1 -
6 files changed, 37 deletions(-)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
index 28df397c3b04..909d74250de7 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
@@ -575,13 +575,6 @@ uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc)
return mdp4_crtc->vblank.irqmask;
}
-void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
- DBG("%s: cancel: %p", mdp4_crtc->name, file);
- complete_flip(crtc, file);
-}
-
/* set dma config, ie. the format the encoder wants. */
void mdp4_crtc_set_config(struct drm_crtc *crtc, uint32_t config)
{
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
index 5a8e3d6bcbff..1c8e330f8d98 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
@@ -179,16 +179,6 @@ static long mdp4_round_pixclk(struct msm_kms *kms, unsigned long rate,
}
}
-static void mdp4_preclose(struct msm_kms *kms, struct drm_file *file)
-{
- struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
- struct msm_drm_private *priv = mdp4_kms->dev->dev_private;
- unsigned i;
-
- for (i = 0; i < priv->num_crtcs; i++)
- mdp4_crtc_cancel_pending_flip(priv->crtcs[i], file);
-}
-
static void mdp4_destroy(struct msm_kms *kms)
{
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
@@ -213,7 +203,6 @@ static const struct mdp_kms_funcs kms_funcs = {
.wait_for_crtc_commit_done = mdp4_wait_for_crtc_commit_done,
.get_format = mdp_get_format,
.round_pixclk = mdp4_round_pixclk,
- .preclose = mdp4_preclose,
.destroy = mdp4_destroy,
},
.set_irqmask = mdp4_set_irqmask,
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
index d2c96ef431f4..9ec53b464662 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
@@ -199,7 +199,6 @@ struct drm_plane *mdp4_plane_init(struct drm_device *dev,
enum mdp4_pipe pipe_id, bool private_plane);
uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc);
-void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file);
void mdp4_crtc_set_config(struct drm_crtc *crtc, uint32_t config);
void mdp4_crtc_set_intf(struct drm_crtc *crtc, enum mdp4_intf intf, int mixer);
void mdp4_crtc_wait_for_commit_done(struct drm_crtc *crtc);
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
index 20cee5ce4071..46682aa8870c 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
@@ -721,12 +721,6 @@ uint32_t mdp5_crtc_vblank(struct drm_crtc *crtc)
return mdp5_crtc->vblank.irqmask;
}
-void mdp5_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- DBG("cancel: %p", file);
- complete_flip(crtc, file);
-}
-
void mdp5_crtc_set_pipeline(struct drm_crtc *crtc,
struct mdp5_interface *intf, struct mdp5_ctl *ctl)
{
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
index e115318402bd..5e4d16b399c7 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
@@ -117,16 +117,6 @@ static int mdp5_set_split_display(struct msm_kms *kms,
return mdp5_encoder_set_split_display(encoder, slave_encoder);
}
-static void mdp5_preclose(struct msm_kms *kms, struct drm_file *file)
-{
- struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
- struct msm_drm_private *priv = mdp5_kms->dev->dev_private;
- unsigned i;
-
- for (i = 0; i < priv->num_crtcs; i++)
- mdp5_crtc_cancel_pending_flip(priv->crtcs[i], file);
-}
-
static void mdp5_destroy(struct msm_kms *kms)
{
struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
@@ -164,7 +154,6 @@ static const struct mdp_kms_funcs kms_funcs = {
.get_format = mdp_get_format,
.round_pixclk = mdp5_round_pixclk,
.set_split_display = mdp5_set_split_display,
- .preclose = mdp5_preclose,
.destroy = mdp5_destroy,
},
.set_irqmask = mdp5_set_irqmask,
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
index 00730ba08a60..9a25898239d3 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
@@ -211,7 +211,6 @@ struct drm_plane *mdp5_plane_init(struct drm_device *dev,
uint32_t mdp5_crtc_vblank(struct drm_crtc *crtc);
int mdp5_crtc_get_lm(struct drm_crtc *crtc);
-void mdp5_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file);
void mdp5_crtc_set_pipeline(struct drm_crtc *crtc,
struct mdp5_interface *intf, struct mdp5_ctl *ctl);
void mdp5_crtc_wait_for_commit_done(struct drm_crtc *crtc);
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 15/21] drm/omap: Nuke close hooks
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (13 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 14/21] drm/msm: Nuke preclose hooks Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-11 0:03 ` Laurent Pinchart
2016-01-08 20:36 ` [PATCH 16/21] drm/rcar: Nuke preclose hook Daniel Vetter
` (8 subsequent siblings)
23 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
Laurent Pinchart, Daniel Vetter
Again since the core takes care of this we can remove them. While at
it also remove the postclose hook, it's empty.
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/omapdrm/omap_drv.c | 29 -----------------------------
1 file changed, 29 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index dfafdb602ad2..e8b5080f6e2d 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -787,33 +787,6 @@ static void dev_lastclose(struct drm_device *dev)
}
}
-static void dev_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct omap_drm_private *priv = dev->dev_private;
- struct drm_pending_event *event;
- unsigned long flags;
-
- DBG("preclose: dev=%p", dev);
-
- /*
- * Unlink all pending CRTC events to make sure they won't be queued up
- * by a pending asynchronous commit.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- list_for_each_entry(event, &priv->commit.events, link) {
- if (event->file_priv == file) {
- file->event_space += event->event->length;
- event->file_priv = NULL;
- }
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
-static void dev_postclose(struct drm_device *dev, struct drm_file *file)
-{
- DBG("postclose: dev=%p, file=%p", dev, file);
-}
-
static const struct vm_operations_struct omap_gem_vm_ops = {
.fault = omap_gem_fault,
.open = drm_gem_vm_open,
@@ -838,8 +811,6 @@ static struct drm_driver omap_drm_driver = {
.unload = dev_unload,
.open = dev_open,
.lastclose = dev_lastclose,
- .preclose = dev_preclose,
- .postclose = dev_postclose,
.set_busid = drm_platform_set_busid,
.get_vblank_counter = drm_vblank_no_hw_counter,
.enable_vblank = omap_irq_enable_vblank,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH 15/21] drm/omap: Nuke close hooks
2016-01-08 20:36 ` [PATCH 15/21] drm/omap: Nuke close hooks Daniel Vetter
@ 2016-01-11 0:03 ` Laurent Pinchart
2016-01-11 7:10 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Laurent Pinchart @ 2016-01-11 0:03 UTC (permalink / raw)
To: Daniel Vetter
Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
DRI Development
Hi Daniel,
Thank you for the patch.
On Friday 08 January 2016 21:36:47 Daniel Vetter wrote:
> Again since the core takes care of this we can remove them. While at
> it also remove the postclose hook, it's empty.
>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/omapdrm/omap_drv.c | 29 -----------------------------
> 1 file changed, 29 deletions(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c
> b/drivers/gpu/drm/omapdrm/omap_drv.c index dfafdb602ad2..e8b5080f6e2d
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> @@ -787,33 +787,6 @@ static void dev_lastclose(struct drm_device *dev)
> }
> }
>
> -static void dev_preclose(struct drm_device *dev, struct drm_file *file)
> -{
> - struct omap_drm_private *priv = dev->dev_private;
> - struct drm_pending_event *event;
> - unsigned long flags;
> -
> - DBG("preclose: dev=%p", dev);
> -
> - /*
> - * Unlink all pending CRTC events to make sure they won't be queued up
> - * by a pending asynchronous commit.
> - */
> - spin_lock_irqsave(&dev->event_lock, flags);
> - list_for_each_entry(event, &priv->commit.events, link) {
> - if (event->file_priv == file) {
> - file->event_space += event->event->length;
> - event->file_priv = NULL;
> - }
> - }
> - spin_unlock_irqrestore(&dev->event_lock, flags);
> -}
> -
> -static void dev_postclose(struct drm_device *dev, struct drm_file *file)
> -{
> - DBG("postclose: dev=%p, file=%p", dev, file);
> -}
> -
You can also nuke the following code from omap_atomic_commit():
/* Keep track of all CRTC events to unlink them in preclose(). */
spin_lock_irqsave(&dev->event_lock, flags);
for (i = 0; i < dev->mode_config.num_crtc; ++i) {
struct drm_crtc_state *cstate = state->crtc_states[i];
if (cstate && cstate->event)
list_add_tail(&cstate->event->base.link,
&priv->commit.events);
}
spin_unlock_irqrestore(&dev->event_lock, flags);
and the priv->commit.events field in omap_drv.h (don't forget the structure
kerneldoc).
> static const struct vm_operations_struct omap_gem_vm_ops = {
> .fault = omap_gem_fault,
> .open = drm_gem_vm_open,
> @@ -838,8 +811,6 @@ static struct drm_driver omap_drm_driver = {
> .unload = dev_unload,
> .open = dev_open,
> .lastclose = dev_lastclose,
> - .preclose = dev_preclose,
> - .postclose = dev_postclose,
> .set_busid = drm_platform_set_busid,
> .get_vblank_counter = drm_vblank_no_hw_counter,
> .enable_vblank = omap_irq_enable_vblank,
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 15/21] drm/omap: Nuke close hooks
2016-01-11 0:03 ` Laurent Pinchart
@ 2016-01-11 7:10 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-11 7:10 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
DRI Development, Daniel Vetter
On Mon, Jan 11, 2016 at 02:03:34AM +0200, Laurent Pinchart wrote:
> Hi Daniel,
>
> Thank you for the patch.
>
> On Friday 08 January 2016 21:36:47 Daniel Vetter wrote:
> > Again since the core takes care of this we can remove them. While at
> > it also remove the postclose hook, it's empty.
> >
> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > ---
> > drivers/gpu/drm/omapdrm/omap_drv.c | 29 -----------------------------
> > 1 file changed, 29 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c
> > b/drivers/gpu/drm/omapdrm/omap_drv.c index dfafdb602ad2..e8b5080f6e2d
> > 100644
> > --- a/drivers/gpu/drm/omapdrm/omap_drv.c
> > +++ b/drivers/gpu/drm/omapdrm/omap_drv.c
> > @@ -787,33 +787,6 @@ static void dev_lastclose(struct drm_device *dev)
> > }
> > }
> >
> > -static void dev_preclose(struct drm_device *dev, struct drm_file *file)
> > -{
> > - struct omap_drm_private *priv = dev->dev_private;
> > - struct drm_pending_event *event;
> > - unsigned long flags;
> > -
> > - DBG("preclose: dev=%p", dev);
> > -
> > - /*
> > - * Unlink all pending CRTC events to make sure they won't be queued up
> > - * by a pending asynchronous commit.
> > - */
> > - spin_lock_irqsave(&dev->event_lock, flags);
> > - list_for_each_entry(event, &priv->commit.events, link) {
> > - if (event->file_priv == file) {
> > - file->event_space += event->event->length;
> > - event->file_priv = NULL;
> > - }
> > - }
> > - spin_unlock_irqrestore(&dev->event_lock, flags);
> > -}
> > -
> > -static void dev_postclose(struct drm_device *dev, struct drm_file *file)
> > -{
> > - DBG("postclose: dev=%p, file=%p", dev, file);
> > -}
> > -
>
> You can also nuke the following code from omap_atomic_commit():
>
> /* Keep track of all CRTC events to unlink them in preclose(). */
> spin_lock_irqsave(&dev->event_lock, flags);
> for (i = 0; i < dev->mode_config.num_crtc; ++i) {
> struct drm_crtc_state *cstate = state->crtc_states[i];
>
> if (cstate && cstate->event)
> list_add_tail(&cstate->event->base.link,
> &priv->commit.events);
> }
> spin_unlock_irqrestore(&dev->event_lock, flags);
>
> and the priv->commit.events field in omap_drv.h (don't forget the structure
> kerneldoc).
Oh this is really good, since hunting for related code I noticed that omap
doesn't send out the vblank event when the fpriv disappeared. So found
even more code to remove. I didn't find any kerneldoc though.
-Daniel
>
> > static const struct vm_operations_struct omap_gem_vm_ops = {
> > .fault = omap_gem_fault,
> > .open = drm_gem_vm_open,
> > @@ -838,8 +811,6 @@ static struct drm_driver omap_drm_driver = {
> > .unload = dev_unload,
> > .open = dev_open,
> > .lastclose = dev_lastclose,
> > - .preclose = dev_preclose,
> > - .postclose = dev_postclose,
> > .set_busid = drm_platform_set_busid,
> > .get_vblank_counter = drm_vblank_no_hw_counter,
> > .enable_vblank = omap_irq_enable_vblank,
>
> --
> Regards,
>
> Laurent Pinchart
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 16/21] drm/rcar: Nuke preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (14 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 15/21] drm/omap: Nuke close hooks Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-11 0:01 ` Laurent Pinchart
2016-01-08 20:36 ` [PATCH 17/21] drm/shmob: " Daniel Vetter
` (7 subsequent siblings)
23 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --------------------
drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 --
drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 ----------
3 files changed, 32 deletions(-)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 88a4b706be16..4ec80ae1fa99 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -282,26 +282,6 @@ static void rcar_du_crtc_update_planes(struct rcar_du_crtc *rcrtc)
* Page Flip
*/
-void rcar_du_crtc_cancel_page_flip(struct rcar_du_crtc *rcrtc,
- struct drm_file *file)
-{
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = rcrtc->crtc.dev;
- unsigned long flags;
-
- /* Destroy the pending vertical blanking event associated with the
- * pending page flip, if any, and disable vertical blanking interrupts.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- event = rcrtc->event;
- if (event && event->base.file_priv == file) {
- rcrtc->event = NULL;
- event->base.destroy(&event->base);
- drm_crtc_vblank_put(&rcrtc->crtc);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
static void rcar_du_crtc_finish_page_flip(struct rcar_du_crtc *rcrtc)
{
struct drm_pending_vblank_event *event;
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
index 4b95d9d08c49..2bbe3f5aab65 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
@@ -67,8 +67,6 @@ enum rcar_du_output {
int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int index);
void rcar_du_crtc_enable_vblank(struct rcar_du_crtc *rcrtc, bool enable);
-void rcar_du_crtc_cancel_page_flip(struct rcar_du_crtc *rcrtc,
- struct drm_file *file);
void rcar_du_crtc_suspend(struct rcar_du_crtc *rcrtc);
void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index 40422f6b645e..0bb2b31555bf 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -220,15 +220,6 @@ done:
return ret;
}
-static void rcar_du_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct rcar_du_device *rcdu = dev->dev_private;
- unsigned int i;
-
- for (i = 0; i < rcdu->num_crtcs; ++i)
- rcar_du_crtc_cancel_page_flip(&rcdu->crtcs[i], file);
-}
-
static void rcar_du_lastclose(struct drm_device *dev)
{
struct rcar_du_device *rcdu = dev->dev_private;
@@ -271,7 +262,6 @@ static struct drm_driver rcar_du_driver = {
| DRIVER_ATOMIC,
.load = rcar_du_load,
.unload = rcar_du_unload,
- .preclose = rcar_du_preclose,
.lastclose = rcar_du_lastclose,
.set_busid = drm_platform_set_busid,
.get_vblank_counter = drm_vblank_no_hw_counter,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH 16/21] drm/rcar: Nuke preclose hook
2016-01-08 20:36 ` [PATCH 16/21] drm/rcar: Nuke preclose hook Daniel Vetter
@ 2016-01-11 0:01 ` Laurent Pinchart
0 siblings, 0 replies; 123+ messages in thread
From: Laurent Pinchart @ 2016-01-11 0:01 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development
Hi Daniel,
Thank you for the patch.
On Friday 08 January 2016 21:36:48 Daniel Vetter wrote:
> Again since the drm core takes care of event unlinking/disarming this
> is now just needless code.
This looks good to me assuming that the mechanism works in the core, which
looks like magic to me at the moment :-) After closing the "[PATCH] drm: Clean
up pending events in the core" discussion (and assuming the conclusion is that
is works),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --------------------
> drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 --
> drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 ----------
> 3 files changed, 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c index 88a4b706be16..4ec80ae1fa99
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> @@ -282,26 +282,6 @@ static void rcar_du_crtc_update_planes(struct
> rcar_du_crtc *rcrtc) * Page Flip
> */
>
> -void rcar_du_crtc_cancel_page_flip(struct rcar_du_crtc *rcrtc,
> - struct drm_file *file)
> -{
> - struct drm_pending_vblank_event *event;
> - struct drm_device *dev = rcrtc->crtc.dev;
> - unsigned long flags;
> -
> - /* Destroy the pending vertical blanking event associated with the
> - * pending page flip, if any, and disable vertical blanking interrupts.
> - */
> - spin_lock_irqsave(&dev->event_lock, flags);
> - event = rcrtc->event;
> - if (event && event->base.file_priv == file) {
> - rcrtc->event = NULL;
> - event->base.destroy(&event->base);
> - drm_crtc_vblank_put(&rcrtc->crtc);
> - }
> - spin_unlock_irqrestore(&dev->event_lock, flags);
> -}
> -
> static void rcar_du_crtc_finish_page_flip(struct rcar_du_crtc *rcrtc)
> {
> struct drm_pending_vblank_event *event;
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
> b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h index 4b95d9d08c49..2bbe3f5aab65
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.h
> @@ -67,8 +67,6 @@ enum rcar_du_output {
>
> int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int index);
> void rcar_du_crtc_enable_vblank(struct rcar_du_crtc *rcrtc, bool enable);
> -void rcar_du_crtc_cancel_page_flip(struct rcar_du_crtc *rcrtc,
> - struct drm_file *file);
> void rcar_du_crtc_suspend(struct rcar_du_crtc *rcrtc);
> void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc);
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> b/drivers/gpu/drm/rcar-du/rcar_du_drv.c index 40422f6b645e..0bb2b31555bf
> 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
> @@ -220,15 +220,6 @@ done:
> return ret;
> }
>
> -static void rcar_du_preclose(struct drm_device *dev, struct drm_file *file)
> -{
> - struct rcar_du_device *rcdu = dev->dev_private;
> - unsigned int i;
> -
> - for (i = 0; i < rcdu->num_crtcs; ++i)
> - rcar_du_crtc_cancel_page_flip(&rcdu->crtcs[i], file);
> -}
> -
> static void rcar_du_lastclose(struct drm_device *dev)
> {
> struct rcar_du_device *rcdu = dev->dev_private;
> @@ -271,7 +262,6 @@ static struct drm_driver rcar_du_driver = {
>
> | DRIVER_ATOMIC,
>
> .load = rcar_du_load,
> .unload = rcar_du_unload,
> - .preclose = rcar_du_preclose,
> .lastclose = rcar_du_lastclose,
> .set_busid = drm_platform_set_busid,
> .get_vblank_counter = drm_vblank_no_hw_counter,
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 17/21] drm/shmob: Nuke preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (15 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 16/21] drm/rcar: Nuke preclose hook Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 18/21] drm/tegra: Stop cancelling page flip events Daniel Vetter
` (6 subsequent siblings)
23 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --------------------
drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 --------
2 files changed, 28 deletions(-)
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
index b80802f55143..de7959a60774 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
@@ -438,26 +438,6 @@ static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
.mode_set_base = shmob_drm_crtc_mode_set_base,
};
-void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc *scrtc,
- struct drm_file *file)
-{
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = scrtc->crtc.dev;
- unsigned long flags;
-
- /* Destroy the pending vertical blanking event associated with the
- * pending page flip, if any, and disable vertical blanking interrupts.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- event = scrtc->event;
- if (event && event->base.file_priv == file) {
- scrtc->event = NULL;
- event->base.destroy(&event->base);
- drm_vblank_put(dev, 0);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
{
struct drm_pending_vblank_event *event;
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index 04e66e3751b4..7700ff172079 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -200,13 +200,6 @@ done:
return ret;
}
-static void shmob_drm_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct shmob_drm_device *sdev = dev->dev_private;
-
- shmob_drm_crtc_cancel_page_flip(&sdev->crtc, file);
-}
-
static irqreturn_t shmob_drm_irq(int irq, void *arg)
{
struct drm_device *dev = arg;
@@ -266,7 +259,6 @@ static struct drm_driver shmob_drm_driver = {
| DRIVER_PRIME,
.load = shmob_drm_load,
.unload = shmob_drm_unload,
- .preclose = shmob_drm_preclose,
.set_busid = drm_platform_set_busid,
.irq_handler = shmob_drm_irq,
.get_vblank_counter = drm_vblank_no_hw_counter,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 1/5] drm/shmob: Nuke preclose hook
2016-01-08 20:36 ` [PATCH 17/21] drm/shmob: " Daniel Vetter
@ 2016-01-10 22:26 ` Daniel Vetter
2016-01-10 22:26 ` [PATCH 2/5] drm/tegra: Stop cancelling page flip events Daniel Vetter
` (4 more replies)
0 siblings, 5 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:26 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
v2: Fixup misplaced hunk.
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --------------------
drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 --
drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 --------
3 files changed, 30 deletions(-)
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
index b80802f55143..de7959a60774 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
@@ -438,26 +438,6 @@ static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
.mode_set_base = shmob_drm_crtc_mode_set_base,
};
-void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc *scrtc,
- struct drm_file *file)
-{
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = scrtc->crtc.dev;
- unsigned long flags;
-
- /* Destroy the pending vertical blanking event associated with the
- * pending page flip, if any, and disable vertical blanking interrupts.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- event = scrtc->event;
- if (event && event->base.file_priv == file) {
- scrtc->event = NULL;
- event->base.destroy(&event->base);
- drm_vblank_put(dev, 0);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
{
struct drm_pending_vblank_event *event;
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
index eddad6dcc88a..38ed4ff8aaf2 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
@@ -47,8 +47,6 @@ struct shmob_drm_connector {
int shmob_drm_crtc_create(struct shmob_drm_device *sdev);
void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev, bool enable);
-void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc *scrtc,
- struct drm_file *file);
void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_suspend(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc);
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
index 04e66e3751b4..7700ff172079 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
+++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
@@ -200,13 +200,6 @@ done:
return ret;
}
-static void shmob_drm_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct shmob_drm_device *sdev = dev->dev_private;
-
- shmob_drm_crtc_cancel_page_flip(&sdev->crtc, file);
-}
-
static irqreturn_t shmob_drm_irq(int irq, void *arg)
{
struct drm_device *dev = arg;
@@ -266,7 +259,6 @@ static struct drm_driver shmob_drm_driver = {
| DRIVER_PRIME,
.load = shmob_drm_load,
.unload = shmob_drm_unload,
- .preclose = shmob_drm_preclose,
.set_busid = drm_platform_set_busid,
.irq_handler = shmob_drm_irq,
.get_vblank_counter = drm_vblank_no_hw_counter,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 2/5] drm/tegra: Stop cancelling page flip events
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
@ 2016-01-10 22:26 ` Daniel Vetter
2016-01-10 22:26 ` [PATCH 3/5] drm/tilcdc: Nuke preclose hook Daniel Vetter
` (3 subsequent siblings)
4 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:26 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Thierry Reding,
Terje Bergström, Daniel Vetter
The core takes care of that now.
v2: Fixup misplaced hunk.
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Terje Bergström <tbergstrom@nvidia.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/tegra/dc.c | 17 -----------------
drivers/gpu/drm/tegra/drm.c | 3 ---
drivers/gpu/drm/tegra/drm.h | 1 -
3 files changed, 21 deletions(-)
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index dde6f208c347..fb2b4b0271a2 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -988,23 +988,6 @@ static void tegra_dc_finish_page_flip(struct tegra_dc *dc)
spin_unlock_irqrestore(&drm->event_lock, flags);
}
-void tegra_dc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct tegra_dc *dc = to_tegra_dc(crtc);
- struct drm_device *drm = crtc->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&drm->event_lock, flags);
-
- if (dc->event && dc->event->base.file_priv == file) {
- dc->event->base.destroy(&dc->event->base);
- drm_crtc_vblank_put(crtc);
- dc->event = NULL;
- }
-
- spin_unlock_irqrestore(&drm->event_lock, flags);
-}
-
static void tegra_dc_destroy(struct drm_crtc *crtc)
{
drm_crtc_cleanup(crtc);
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index c5c856a0879d..021d0e1398fb 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -860,9 +860,6 @@ static void tegra_drm_preclose(struct drm_device *drm, struct drm_file *file)
struct tegra_drm_context *context, *tmp;
struct drm_crtc *crtc;
- list_for_each_entry(crtc, &drm->mode_config.crtc_list, head)
- tegra_dc_cancel_page_flip(crtc, file);
-
list_for_each_entry_safe(context, tmp, &fpriv->contexts, list)
tegra_drm_context_free(context);
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index c088f2f67eda..8a10f5b7d9dc 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -195,7 +195,6 @@ struct tegra_dc_window {
u32 tegra_dc_get_vblank_counter(struct tegra_dc *dc);
void tegra_dc_enable_vblank(struct tegra_dc *dc);
void tegra_dc_disable_vblank(struct tegra_dc *dc);
-void tegra_dc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
void tegra_dc_commit(struct tegra_dc *dc);
int tegra_dc_state_setup_clock(struct tegra_dc *dc,
struct drm_crtc_state *crtc_state,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 3/5] drm/tilcdc: Nuke preclose hook
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
2016-01-10 22:26 ` [PATCH 2/5] drm/tegra: Stop cancelling page flip events Daniel Vetter
@ 2016-01-10 22:26 ` Daniel Vetter
2016-01-10 22:26 ` [PATCH 4/5] drm/vc4: " Daniel Vetter
` (2 subsequent siblings)
4 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:26 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
v2: Fixup misplaced hunks.
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --------------------
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 --------
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
3 files changed, 29 deletions(-)
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 7d07733bdc86..4802da8e6d6f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -662,26 +662,6 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
return IRQ_HANDLED;
}
-void tilcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = crtc->dev;
- unsigned long flags;
-
- /* Destroy the pending vertical blanking event associated with the
- * pending page flip, if any, and disable vertical blanking interrupts.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- event = tilcdc_crtc->event;
- if (event && event->base.file_priv == file) {
- tilcdc_crtc->event = NULL;
- event->base.destroy(&event->base);
- drm_vblank_put(dev, 0);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev)
{
struct tilcdc_crtc *tilcdc_crtc;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 4ddb21e7f52f..b39ba213e303 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -349,13 +349,6 @@ fail_free_priv:
return ret;
}
-static void tilcdc_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct tilcdc_drm_private *priv = dev->dev_private;
-
- tilcdc_crtc_cancel_page_flip(priv->crtc, file);
-}
-
static void tilcdc_lastclose(struct drm_device *dev)
{
struct tilcdc_drm_private *priv = dev->dev_private;
@@ -556,7 +549,6 @@ static struct drm_driver tilcdc_driver = {
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET,
.load = tilcdc_load,
.unload = tilcdc_unload,
- .preclose = tilcdc_preclose,
.lastclose = tilcdc_lastclose,
.set_busid = drm_platform_set_busid,
.irq_handler = tilcdc_irq,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index e863ad0d26fe..66105d8dc620 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -163,7 +163,6 @@ struct tilcdc_panel_info {
#define DBG(fmt, ...) DRM_DEBUG(fmt"\n", ##__VA_ARGS__)
struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev);
-void tilcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc);
void tilcdc_crtc_update_clk(struct drm_crtc *crtc);
void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 4/5] drm/vc4: Nuke preclose hook
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
2016-01-10 22:26 ` [PATCH 2/5] drm/tegra: Stop cancelling page flip events Daniel Vetter
2016-01-10 22:26 ` [PATCH 3/5] drm/tilcdc: Nuke preclose hook Daniel Vetter
@ 2016-01-10 22:26 ` Daniel Vetter
2016-01-10 22:26 ` [PATCH 5/5] drm/vmwgfx: " Daniel Vetter
2016-01-11 0:00 ` [PATCH 1/5] drm/shmob: " Laurent Pinchart
4 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:26 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Daniel Vetter, Intel Graphics Development,
Eric Anholt
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
v2: Fixup misplaced hunk.
Cc: Eric Anholt <eric@anholt.net>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/vc4/vc4_crtc.c | 20 --------------------
drivers/gpu/drm/vc4/vc4_drv.c | 10 ----------
drivers/gpu/drm/vc4/vc4_drv.h | 1 -
3 files changed, 31 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 018145e0b87d..937409792b97 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -593,26 +593,6 @@ static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
.atomic_flush = vc4_crtc_atomic_flush,
};
-/* Frees the page flip event when the DRM device is closed with the
- * event still outstanding.
- */
-void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
- struct drm_device *dev = crtc->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&dev->event_lock, flags);
-
- if (vc4_crtc->event && vc4_crtc->event->base.file_priv == file) {
- vc4_crtc->event->base.destroy(&vc4_crtc->event->base);
- drm_crtc_vblank_put(crtc);
- vc4_crtc->event = NULL;
- }
-
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
static const struct vc4_crtc_data pv0_data = {
.hvs_channel = 0,
.encoder0_type = VC4_ENCODER_TYPE_DSI0,
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index f1655fff8425..b7d2ff0e6e1f 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -43,14 +43,6 @@ void __iomem *vc4_ioremap_regs(struct platform_device *dev, int index)
return map;
}
-static void vc4_drm_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct drm_crtc *crtc;
-
- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
- vc4_cancel_page_flip(crtc, file);
-}
-
static void vc4_lastclose(struct drm_device *dev)
{
struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -91,8 +83,6 @@ static struct drm_driver vc4_drm_driver = {
DRIVER_HAVE_IRQ |
DRIVER_PRIME),
.lastclose = vc4_lastclose,
- .preclose = vc4_drm_preclose,
-
.irq_handler = vc4_irq,
.irq_preinstall = vc4_irq_preinstall,
.irq_postinstall = vc4_irq_postinstall,
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 080865ec2bae..4c734d087d7f 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
extern struct platform_driver vc4_crtc_driver;
int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
-void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
/* vc4_debugfs.c */
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 5/5] drm/vmwgfx: Nuke preclose hook
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
` (2 preceding siblings ...)
2016-01-10 22:26 ` [PATCH 4/5] drm/vc4: " Daniel Vetter
@ 2016-01-10 22:26 ` Daniel Vetter
2016-01-11 10:20 ` Thomas Hellstrom
2016-01-11 0:00 ` [PATCH 1/5] drm/shmob: " Laurent Pinchart
4 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:26 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Thomas Hellström,
Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
v2: I've completely missed eaction->fpriv_head and all the related
code. We need to nuke that too to avoid accidentally deferencing the
freed-up vmwgfx-private fpriv.
v3: Also remove vmw_fpriv->fence_events and unused variables I missed.
Cc: Thomas Hellström <thellstrom@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 --------
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 52 -----------------------------------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
4 files changed, 66 deletions(-)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index c49812b80dd0..c96a2d2d5107 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
return 0;
}
-static void vmw_preclose(struct drm_device *dev,
- struct drm_file *file_priv)
-{
- struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
- struct vmw_private *dev_priv = vmw_priv(dev);
-
- vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
-}
-
static void vmw_postclose(struct drm_device *dev,
struct drm_file *file_priv)
{
@@ -1010,7 +1001,6 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
if (unlikely(vmw_fp == NULL))
return ret;
- INIT_LIST_HEAD(&vmw_fp->fence_events);
vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev, 10);
if (unlikely(vmw_fp->tfile == NULL))
goto out_no_tfile;
@@ -1500,7 +1490,6 @@ static struct drm_driver driver = {
.master_set = vmw_master_set,
.master_drop = vmw_master_drop,
.open = vmw_driver_open,
- .preclose = vmw_preclose,
.postclose = vmw_postclose,
.set_busid = drm_pci_set_busid,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
index 469cdd520615..5cb1b1687cd4 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
@@ -80,7 +80,6 @@
struct vmw_fpriv {
struct drm_master *locked_master;
struct ttm_object_file *tfile;
- struct list_head fence_events;
bool gb_aware;
};
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index e0edf149d9d5..ac477863fc07 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -71,7 +71,6 @@ struct vmw_user_fence {
*/
struct vmw_event_fence_action {
struct vmw_fence_action action;
- struct list_head fpriv_head;
struct drm_pending_event *event;
struct vmw_fence_obj *fence;
@@ -808,44 +807,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
}
/**
- * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
- *
- * @fman: Pointer to a struct vmw_fence_manager
- * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
- * with pointers to a struct drm_file object about to be closed.
- *
- * This function removes all pending fence events with references to a
- * specific struct drm_file object about to be closed. The caller is required
- * to pass a list of all struct vmw_event_fence_action objects with such
- * events attached. This function is typically called before the
- * struct drm_file object's event management is taken down.
- */
-void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list)
-{
- struct vmw_event_fence_action *eaction;
- struct drm_pending_event *event;
- unsigned long irq_flags;
-
- while (1) {
- spin_lock_irqsave(&fman->lock, irq_flags);
- if (list_empty(event_list))
- goto out_unlock;
- eaction = list_first_entry(event_list,
- struct vmw_event_fence_action,
- fpriv_head);
- list_del_init(&eaction->fpriv_head);
- event = eaction->event;
- eaction->event = NULL;
- spin_unlock_irqrestore(&fman->lock, irq_flags);
- event->destroy(event);
- }
-out_unlock:
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-}
-
-
-/**
* vmw_event_fence_action_seq_passed
*
* @action: The struct vmw_fence_action embedded in a struct
@@ -879,7 +840,6 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
*eaction->tv_usec = tv.tv_usec;
}
- list_del_init(&eaction->fpriv_head);
eaction->event = NULL;
drm_send_event_locked(dev, eaction->event);
spin_unlock_irqrestore(&dev->event_lock, irq_flags);
@@ -898,12 +858,6 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
{
struct vmw_event_fence_action *eaction =
container_of(action, struct vmw_event_fence_action, action);
- struct vmw_fence_manager *fman = fman_from_fence(eaction->fence);
- unsigned long irq_flags;
-
- spin_lock_irqsave(&fman->lock, irq_flags);
- list_del(&eaction->fpriv_head);
- spin_unlock_irqrestore(&fman->lock, irq_flags);
vmw_fence_obj_unreference(&eaction->fence);
kfree(eaction);
@@ -983,8 +937,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
{
struct vmw_event_fence_action *eaction;
struct vmw_fence_manager *fman = fman_from_fence(fence);
- struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
- unsigned long irq_flags;
eaction = kzalloc(sizeof(*eaction), GFP_KERNEL);
if (unlikely(eaction == NULL))
@@ -1001,10 +953,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
eaction->tv_sec = tv_sec;
eaction->tv_usec = tv_usec;
- spin_lock_irqsave(&fman->lock, irq_flags);
- list_add_tail(&eaction->fpriv_head, &vmw_fp->fence_events);
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-
vmw_fence_obj_add_action(fence, &eaction->action);
return 0;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
index 8be6c29f5eb5..83ae301ee141 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
@@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
-extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list);
extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
struct vmw_fence_obj *fence,
struct drm_pending_event *event,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH 5/5] drm/vmwgfx: Nuke preclose hook
2016-01-10 22:26 ` [PATCH 5/5] drm/vmwgfx: " Daniel Vetter
@ 2016-01-11 10:20 ` Thomas Hellstrom
0 siblings, 0 replies; 123+ messages in thread
From: Thomas Hellstrom @ 2016-01-11 10:20 UTC (permalink / raw)
To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
LGTM.
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
On 01/10/2016 11:26 PM, Daniel Vetter wrote:
> Again since the drm core takes care of event unlinking/disarming this
> is now just needless code.
>
> v2: I've completely missed eaction->fpriv_head and all the related
> code. We need to nuke that too to avoid accidentally deferencing the
> freed-up vmwgfx-private fpriv.
>
> v3: Also remove vmw_fpriv->fence_events and unused variables I missed.
>
> Cc: Thomas Hellström <thellstrom@vmware.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 --------
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 -
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 52 -----------------------------------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
> 4 files changed, 66 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index c49812b80dd0..c96a2d2d5107 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
> return 0;
> }
>
> -static void vmw_preclose(struct drm_device *dev,
> - struct drm_file *file_priv)
> -{
> - struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
> - struct vmw_private *dev_priv = vmw_priv(dev);
> -
> - vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
> -}
> -
> static void vmw_postclose(struct drm_device *dev,
> struct drm_file *file_priv)
> {
> @@ -1010,7 +1001,6 @@ static int vmw_driver_open(struct drm_device *dev, struct drm_file *file_priv)
> if (unlikely(vmw_fp == NULL))
> return ret;
>
> - INIT_LIST_HEAD(&vmw_fp->fence_events);
> vmw_fp->tfile = ttm_object_file_init(dev_priv->tdev, 10);
> if (unlikely(vmw_fp->tfile == NULL))
> goto out_no_tfile;
> @@ -1500,7 +1490,6 @@ static struct drm_driver driver = {
> .master_set = vmw_master_set,
> .master_drop = vmw_master_drop,
> .open = vmw_driver_open,
> - .preclose = vmw_preclose,
> .postclose = vmw_postclose,
> .set_busid = drm_pci_set_busid,
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> index 469cdd520615..5cb1b1687cd4 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
> @@ -80,7 +80,6 @@
> struct vmw_fpriv {
> struct drm_master *locked_master;
> struct ttm_object_file *tfile;
> - struct list_head fence_events;
> bool gb_aware;
> };
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> index e0edf149d9d5..ac477863fc07 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> @@ -71,7 +71,6 @@ struct vmw_user_fence {
> */
> struct vmw_event_fence_action {
> struct vmw_fence_action action;
> - struct list_head fpriv_head;
>
> struct drm_pending_event *event;
> struct vmw_fence_obj *fence;
> @@ -808,44 +807,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> }
>
> /**
> - * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
> - *
> - * @fman: Pointer to a struct vmw_fence_manager
> - * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
> - * with pointers to a struct drm_file object about to be closed.
> - *
> - * This function removes all pending fence events with references to a
> - * specific struct drm_file object about to be closed. The caller is required
> - * to pass a list of all struct vmw_event_fence_action objects with such
> - * events attached. This function is typically called before the
> - * struct drm_file object's event management is taken down.
> - */
> -void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list)
> -{
> - struct vmw_event_fence_action *eaction;
> - struct drm_pending_event *event;
> - unsigned long irq_flags;
> -
> - while (1) {
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - if (list_empty(event_list))
> - goto out_unlock;
> - eaction = list_first_entry(event_list,
> - struct vmw_event_fence_action,
> - fpriv_head);
> - list_del_init(&eaction->fpriv_head);
> - event = eaction->event;
> - eaction->event = NULL;
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> - event->destroy(event);
> - }
> -out_unlock:
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -}
> -
> -
> -/**
> * vmw_event_fence_action_seq_passed
> *
> * @action: The struct vmw_fence_action embedded in a struct
> @@ -879,7 +840,6 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
> *eaction->tv_usec = tv.tv_usec;
> }
>
> - list_del_init(&eaction->fpriv_head);
> eaction->event = NULL;
> drm_send_event_locked(dev, eaction->event);
> spin_unlock_irqrestore(&dev->event_lock, irq_flags);
> @@ -898,12 +858,6 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
> {
> struct vmw_event_fence_action *eaction =
> container_of(action, struct vmw_event_fence_action, action);
> - struct vmw_fence_manager *fman = fman_from_fence(eaction->fence);
> - unsigned long irq_flags;
> -
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - list_del(&eaction->fpriv_head);
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
>
> vmw_fence_obj_unreference(&eaction->fence);
> kfree(eaction);
> @@ -983,8 +937,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
> {
> struct vmw_event_fence_action *eaction;
> struct vmw_fence_manager *fman = fman_from_fence(fence);
> - struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
> - unsigned long irq_flags;
>
> eaction = kzalloc(sizeof(*eaction), GFP_KERNEL);
> if (unlikely(eaction == NULL))
> @@ -1001,10 +953,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
> eaction->tv_sec = tv_sec;
> eaction->tv_usec = tv_usec;
>
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - list_add_tail(&eaction->fpriv_head, &vmw_fp->fence_events);
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -
> vmw_fence_obj_add_action(fence, &eaction->action);
>
> return 0;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> index 8be6c29f5eb5..83ae301ee141 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> @@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> -extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list);
> extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
> struct vmw_fence_obj *fence,
> struct drm_pending_event *event,
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 1/5] drm/shmob: Nuke preclose hook
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
` (3 preceding siblings ...)
2016-01-10 22:26 ` [PATCH 5/5] drm/vmwgfx: " Daniel Vetter
@ 2016-01-11 0:00 ` Laurent Pinchart
4 siblings, 0 replies; 123+ messages in thread
From: Laurent Pinchart @ 2016-01-11 0:00 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development
Hi Daniel,
Thank you for the patch.
On Sunday 10 January 2016 23:26:06 Daniel Vetter wrote:
> Again since the drm core takes care of event unlinking/disarming this
> is now just needless code.
>
> v2: Fixup misplaced hunk.
>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
This looks good to me assuming that the mechanism works in the core, which
looks like magic to me at the moment :-) After closing the "[PATCH] drm: Clean
up pending events in the core" discussion (and assuming the conclusion is that
is works),
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --------------------
> drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 --
> drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 --------
> 3 files changed, 30 deletions(-)
>
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index
> b80802f55143..de7959a60774 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c
> @@ -438,26 +438,6 @@ static const struct drm_crtc_helper_funcs
> crtc_helper_funcs = { .mode_set_base = shmob_drm_crtc_mode_set_base,
> };
>
> -void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc *scrtc,
> - struct drm_file *file)
> -{
> - struct drm_pending_vblank_event *event;
> - struct drm_device *dev = scrtc->crtc.dev;
> - unsigned long flags;
> -
> - /* Destroy the pending vertical blanking event associated with the
> - * pending page flip, if any, and disable vertical blanking interrupts.
> - */
> - spin_lock_irqsave(&dev->event_lock, flags);
> - event = scrtc->event;
> - if (event && event->base.file_priv == file) {
> - scrtc->event = NULL;
> - event->base.destroy(&event->base);
> - drm_vblank_put(dev, 0);
> - }
> - spin_unlock_irqrestore(&dev->event_lock, flags);
> -}
> -
> void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc)
> {
> struct drm_pending_vblank_event *event;
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
> b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h index
> eddad6dcc88a..38ed4ff8aaf2 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
> @@ -47,8 +47,6 @@ struct shmob_drm_connector {
>
> int shmob_drm_crtc_create(struct shmob_drm_device *sdev);
> void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev, bool
> enable); -void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc
> *scrtc, - struct drm_file *file);
> void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc);
> void shmob_drm_crtc_suspend(struct shmob_drm_crtc *scrtc);
> void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc);
> diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> b/drivers/gpu/drm/shmobile/shmob_drm_drv.c index 04e66e3751b4..7700ff172079
> 100644
> --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c
> @@ -200,13 +200,6 @@ done:
> return ret;
> }
>
> -static void shmob_drm_preclose(struct drm_device *dev, struct drm_file
> *file) -{
> - struct shmob_drm_device *sdev = dev->dev_private;
> -
> - shmob_drm_crtc_cancel_page_flip(&sdev->crtc, file);
> -}
> -
> static irqreturn_t shmob_drm_irq(int irq, void *arg)
> {
> struct drm_device *dev = arg;
> @@ -266,7 +259,6 @@ static struct drm_driver shmob_drm_driver = {
>
> | DRIVER_PRIME,
>
> .load = shmob_drm_load,
> .unload = shmob_drm_unload,
> - .preclose = shmob_drm_preclose,
> .set_busid = drm_platform_set_busid,
> .irq_handler = shmob_drm_irq,
> .get_vblank_counter = drm_vblank_no_hw_counter,
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 18/21] drm/tegra: Stop cancelling page flip events
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (16 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 17/21] drm/shmob: " Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 19/21] drm/tilcdc: Nuke preclose hook Daniel Vetter
` (5 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Thierry Reding,
Terje Bergström, Daniel Vetter
The core takes care of that now.
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Terje Bergström <tbergstrom@nvidia.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/tegra/dc.c | 17 -----------------
drivers/gpu/drm/tegra/drm.c | 3 ---
2 files changed, 20 deletions(-)
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index dde6f208c347..fb2b4b0271a2 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -988,23 +988,6 @@ static void tegra_dc_finish_page_flip(struct tegra_dc *dc)
spin_unlock_irqrestore(&drm->event_lock, flags);
}
-void tegra_dc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct tegra_dc *dc = to_tegra_dc(crtc);
- struct drm_device *drm = crtc->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&drm->event_lock, flags);
-
- if (dc->event && dc->event->base.file_priv == file) {
- dc->event->base.destroy(&dc->event->base);
- drm_crtc_vblank_put(crtc);
- dc->event = NULL;
- }
-
- spin_unlock_irqrestore(&drm->event_lock, flags);
-}
-
static void tegra_dc_destroy(struct drm_crtc *crtc)
{
drm_crtc_cleanup(crtc);
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index c5c856a0879d..021d0e1398fb 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -860,9 +860,6 @@ static void tegra_drm_preclose(struct drm_device *drm, struct drm_file *file)
struct tegra_drm_context *context, *tmp;
struct drm_crtc *crtc;
- list_for_each_entry(crtc, &drm->mode_config.crtc_list, head)
- tegra_dc_cancel_page_flip(crtc, file);
-
list_for_each_entry_safe(context, tmp, &fpriv->contexts, list)
tegra_drm_context_free(context);
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 19/21] drm/tilcdc: Nuke preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (17 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 18/21] drm/tegra: Stop cancelling page flip events Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 20/21] drm/vc4: " Daniel Vetter
` (4 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
Cc: Rob Clark <robdclark@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 --
drivers/gpu/drm/tegra/drm.h | 1 -
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --------------------
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 --------
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
5 files changed, 32 deletions(-)
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
index eddad6dcc88a..38ed4ff8aaf2 100644
--- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
+++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h
@@ -47,8 +47,6 @@ struct shmob_drm_connector {
int shmob_drm_crtc_create(struct shmob_drm_device *sdev);
void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev, bool enable);
-void shmob_drm_crtc_cancel_page_flip(struct shmob_drm_crtc *scrtc,
- struct drm_file *file);
void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_suspend(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc);
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index c088f2f67eda..8a10f5b7d9dc 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -195,7 +195,6 @@ struct tegra_dc_window {
u32 tegra_dc_get_vblank_counter(struct tegra_dc *dc);
void tegra_dc_enable_vblank(struct tegra_dc *dc);
void tegra_dc_disable_vblank(struct tegra_dc *dc);
-void tegra_dc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
void tegra_dc_commit(struct tegra_dc *dc);
int tegra_dc_state_setup_clock(struct tegra_dc *dc,
struct drm_crtc_state *crtc_state,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
index 7d07733bdc86..4802da8e6d6f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
@@ -662,26 +662,6 @@ irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc)
return IRQ_HANDLED;
}
-void tilcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
- struct drm_pending_vblank_event *event;
- struct drm_device *dev = crtc->dev;
- unsigned long flags;
-
- /* Destroy the pending vertical blanking event associated with the
- * pending page flip, if any, and disable vertical blanking interrupts.
- */
- spin_lock_irqsave(&dev->event_lock, flags);
- event = tilcdc_crtc->event;
- if (event && event->base.file_priv == file) {
- tilcdc_crtc->event = NULL;
- event->base.destroy(&event->base);
- drm_vblank_put(dev, 0);
- }
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev)
{
struct tilcdc_crtc *tilcdc_crtc;
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 4ddb21e7f52f..b39ba213e303 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -349,13 +349,6 @@ fail_free_priv:
return ret;
}
-static void tilcdc_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct tilcdc_drm_private *priv = dev->dev_private;
-
- tilcdc_crtc_cancel_page_flip(priv->crtc, file);
-}
-
static void tilcdc_lastclose(struct drm_device *dev)
{
struct tilcdc_drm_private *priv = dev->dev_private;
@@ -556,7 +549,6 @@ static struct drm_driver tilcdc_driver = {
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET,
.load = tilcdc_load,
.unload = tilcdc_unload,
- .preclose = tilcdc_preclose,
.lastclose = tilcdc_lastclose,
.set_busid = drm_platform_set_busid,
.irq_handler = tilcdc_irq,
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.h b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
index e863ad0d26fe..66105d8dc620 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.h
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.h
@@ -163,7 +163,6 @@ struct tilcdc_panel_info {
#define DBG(fmt, ...) DRM_DEBUG(fmt"\n", ##__VA_ARGS__)
struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev);
-void tilcdc_crtc_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc);
void tilcdc_crtc_update_clk(struct drm_crtc *crtc);
void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 20/21] drm/vc4: Nuke preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (18 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 19/21] drm/tilcdc: Nuke preclose hook Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 21/21] drm/vmwgfx: " Daniel Vetter
` (3 subsequent siblings)
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter enter the commit message for your changes . Lines starting,
Daniel Vetter, Intel Graphics Development
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
Cc: Eric Anholt <eric@anholt.net>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>enter the commit message for your changes. Lines starting
---
drivers/gpu/drm/vc4/vc4_crtc.c | 20 --------------------
drivers/gpu/drm/vc4/vc4_drv.c | 10 ----------
2 files changed, 30 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 018145e0b87d..937409792b97 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -593,26 +593,6 @@ static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
.atomic_flush = vc4_crtc_atomic_flush,
};
-/* Frees the page flip event when the DRM device is closed with the
- * event still outstanding.
- */
-void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file)
-{
- struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
- struct drm_device *dev = crtc->dev;
- unsigned long flags;
-
- spin_lock_irqsave(&dev->event_lock, flags);
-
- if (vc4_crtc->event && vc4_crtc->event->base.file_priv == file) {
- vc4_crtc->event->base.destroy(&vc4_crtc->event->base);
- drm_crtc_vblank_put(crtc);
- vc4_crtc->event = NULL;
- }
-
- spin_unlock_irqrestore(&dev->event_lock, flags);
-}
-
static const struct vc4_crtc_data pv0_data = {
.hvs_channel = 0,
.encoder0_type = VC4_ENCODER_TYPE_DSI0,
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index f1655fff8425..b7d2ff0e6e1f 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -43,14 +43,6 @@ void __iomem *vc4_ioremap_regs(struct platform_device *dev, int index)
return map;
}
-static void vc4_drm_preclose(struct drm_device *dev, struct drm_file *file)
-{
- struct drm_crtc *crtc;
-
- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head)
- vc4_cancel_page_flip(crtc, file);
-}
-
static void vc4_lastclose(struct drm_device *dev)
{
struct vc4_dev *vc4 = to_vc4_dev(dev);
@@ -91,8 +83,6 @@ static struct drm_driver vc4_drm_driver = {
DRIVER_HAVE_IRQ |
DRIVER_PRIME),
.lastclose = vc4_lastclose,
- .preclose = vc4_drm_preclose,
-
.irq_handler = vc4_irq,
.irq_preinstall = vc4_irq_preinstall,
.irq_postinstall = vc4_irq_postinstall,
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 21/21] drm/vmwgfx: Nuke preclose hook
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (19 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 20/21] drm/vc4: " Daniel Vetter
@ 2016-01-08 20:36 ` Daniel Vetter
2016-01-08 20:53 ` Thomas Hellstrom
2016-01-10 22:02 ` [PATCH] " Daniel Vetter
2016-01-08 21:47 ` [PATCH 00/21] drm_event cleanup Alex Deucher
` (2 subsequent siblings)
23 siblings, 2 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-08 20:36 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Thomas Hellström,
Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
Cc: Thomas Hellström <thellstrom@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/vc4/vc4_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 ---------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 38 -----------------------------------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
4 files changed, 51 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 080865ec2bae..4c734d087d7f 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
extern struct platform_driver vc4_crtc_driver;
int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
-void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
/* vc4_debugfs.c */
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index c49812b80dd0..c04c4d1e2f3e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
return 0;
}
-static void vmw_preclose(struct drm_device *dev,
- struct drm_file *file_priv)
-{
- struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
- struct vmw_private *dev_priv = vmw_priv(dev);
-
- vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
-}
-
static void vmw_postclose(struct drm_device *dev,
struct drm_file *file_priv)
{
@@ -1500,7 +1491,6 @@ static struct drm_driver driver = {
.master_set = vmw_master_set,
.master_drop = vmw_master_drop,
.open = vmw_driver_open,
- .preclose = vmw_preclose,
.postclose = vmw_postclose,
.set_busid = drm_pci_set_busid,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index e0edf149d9d5..55dc3e4754df 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -808,44 +808,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
}
/**
- * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
- *
- * @fman: Pointer to a struct vmw_fence_manager
- * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
- * with pointers to a struct drm_file object about to be closed.
- *
- * This function removes all pending fence events with references to a
- * specific struct drm_file object about to be closed. The caller is required
- * to pass a list of all struct vmw_event_fence_action objects with such
- * events attached. This function is typically called before the
- * struct drm_file object's event management is taken down.
- */
-void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list)
-{
- struct vmw_event_fence_action *eaction;
- struct drm_pending_event *event;
- unsigned long irq_flags;
-
- while (1) {
- spin_lock_irqsave(&fman->lock, irq_flags);
- if (list_empty(event_list))
- goto out_unlock;
- eaction = list_first_entry(event_list,
- struct vmw_event_fence_action,
- fpriv_head);
- list_del_init(&eaction->fpriv_head);
- event = eaction->event;
- eaction->event = NULL;
- spin_unlock_irqrestore(&fman->lock, irq_flags);
- event->destroy(event);
- }
-out_unlock:
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-}
-
-
-/**
* vmw_event_fence_action_seq_passed
*
* @action: The struct vmw_fence_action embedded in a struct
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
index 8be6c29f5eb5..83ae301ee141 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
@@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
-extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list);
extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
struct vmw_fence_obj *fence,
struct drm_pending_event *event,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH 21/21] drm/vmwgfx: Nuke preclose hook
2016-01-08 20:36 ` [PATCH 21/21] drm/vmwgfx: " Daniel Vetter
@ 2016-01-08 20:53 ` Thomas Hellstrom
2016-01-09 10:43 ` Daniel Vetter
2016-01-10 22:02 ` [PATCH] " Daniel Vetter
1 sibling, 1 reply; 123+ messages in thread
From: Thomas Hellstrom @ 2016-01-08 20:53 UTC (permalink / raw)
To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
On 01/08/2016 09:36 PM, Daniel Vetter wrote:
> Again since the drm core takes care of event unlinking/disarming this
> is now just needless code.
>
> Cc: Thomas Hellström <thellstrom@vmware.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Hmm,
IIRC this is actually a list of events that core drm is not aware of
yet. They sit on this list waiting for a fence to pass and are then
transferred to core drm....
/Thomas
> ---
> drivers/gpu/drm/vc4/vc4_drv.h | 1 -
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 ---------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 38 -----------------------------------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
> 4 files changed, 51 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
> index 080865ec2bae..4c734d087d7f 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.h
> +++ b/drivers/gpu/drm/vc4/vc4_drv.h
> @@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
> extern struct platform_driver vc4_crtc_driver;
> int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
> void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
> -void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
> int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
>
> /* vc4_debugfs.c */
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index c49812b80dd0..c04c4d1e2f3e 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
> return 0;
> }
>
> -static void vmw_preclose(struct drm_device *dev,
> - struct drm_file *file_priv)
> -{
> - struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
> - struct vmw_private *dev_priv = vmw_priv(dev);
> -
> - vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
> -}
> -
> static void vmw_postclose(struct drm_device *dev,
> struct drm_file *file_priv)
> {
> @@ -1500,7 +1491,6 @@ static struct drm_driver driver = {
> .master_set = vmw_master_set,
> .master_drop = vmw_master_drop,
> .open = vmw_driver_open,
> - .preclose = vmw_preclose,
> .postclose = vmw_postclose,
> .set_busid = drm_pci_set_busid,
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> index e0edf149d9d5..55dc3e4754df 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> @@ -808,44 +808,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> }
>
> /**
> - * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
> - *
> - * @fman: Pointer to a struct vmw_fence_manager
> - * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
> - * with pointers to a struct drm_file object about to be closed.
> - *
> - * This function removes all pending fence events with references to a
> - * specific struct drm_file object about to be closed. The caller is required
> - * to pass a list of all struct vmw_event_fence_action objects with such
> - * events attached. This function is typically called before the
> - * struct drm_file object's event management is taken down.
> - */
> -void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list)
> -{
> - struct vmw_event_fence_action *eaction;
> - struct drm_pending_event *event;
> - unsigned long irq_flags;
> -
> - while (1) {
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - if (list_empty(event_list))
> - goto out_unlock;
> - eaction = list_first_entry(event_list,
> - struct vmw_event_fence_action,
> - fpriv_head);
> - list_del_init(&eaction->fpriv_head);
> - event = eaction->event;
> - eaction->event = NULL;
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> - event->destroy(event);
> - }
> -out_unlock:
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -}
> -
> -
> -/**
> * vmw_event_fence_action_seq_passed
> *
> * @action: The struct vmw_fence_action embedded in a struct
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> index 8be6c29f5eb5..83ae301ee141 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> @@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> -extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list);
> extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
> struct vmw_fence_obj *fence,
> struct drm_pending_event *event,
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 21/21] drm/vmwgfx: Nuke preclose hook
2016-01-08 20:53 ` Thomas Hellstrom
@ 2016-01-09 10:43 ` Daniel Vetter
2016-01-10 20:52 ` Thomas Hellstrom
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-09 10:43 UTC (permalink / raw)
To: Thomas Hellstrom
Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On Fri, Jan 8, 2016 at 9:53 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
> On 01/08/2016 09:36 PM, Daniel Vetter wrote:
>> Again since the drm core takes care of event unlinking/disarming this
>> is now just needless code.
>>
>> Cc: Thomas Hellström <thellstrom@vmware.com>
>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Hmm,
>
> IIRC this is actually a list of events that core drm is not aware of
> yet. They sit on this list waiting for a fence to pass and are then
> transferred to core drm....
Yes I know. Earlier patches in the series extract new core functions
to setup/tear down such events and send them out, which is what's
needed to make this trick possible. Exynos similarly uses events
similarly, and is also converted. Same for nouveau it seems, but there
the code doesn't use the reserve/send split, so I'm unclear
how/whether at all it correctly handles this race.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 21/21] drm/vmwgfx: Nuke preclose hook
2016-01-09 10:43 ` Daniel Vetter
@ 2016-01-10 20:52 ` Thomas Hellstrom
2016-01-10 21:59 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Thomas Hellstrom @ 2016-01-10 20:52 UTC (permalink / raw)
To: Daniel Vetter, Thomas Hellstrom
Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On 01/09/2016 11:43 AM, Daniel Vetter wrote:
> On Fri, Jan 8, 2016 at 9:53 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
>> On 01/08/2016 09:36 PM, Daniel Vetter wrote:
>>> Again since the drm core takes care of event unlinking/disarming this
>>> is now just needless code.
>>>
>>> Cc: Thomas Hellström <thellstrom@vmware.com>
>>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>> Hmm,
>>
>> IIRC this is actually a list of events that core drm is not aware of
>> yet. They sit on this list waiting for a fence to pass and are then
>> transferred to core drm....
> Yes I know. Earlier patches in the series extract new core functions
> to setup/tear down such events and send them out, which is what's
> needed to make this trick possible. Exynos similarly uses events
> similarly, and is also converted. Same for nouveau it seems, but there
> the code doesn't use the reserve/send split, so I'm unclear
> how/whether at all it correctly handles this race.
> -Daniel
Ah. Hmm I should've looked more closely at the rest of the series.
In any case, this particular patch leaves, from what I can tell, the
eaction fpriv list intact when it is later freed in postclose, which is
bad. Also each eaction is left with a dangling pointer to a freed
pending event which is also very bad since that pointer will be
dereferenced as soon as the fence's seqno has passed. So as far as i can
tell, this function needs to remain except for the event destruction.
Thinking of it, this must be a problem that is more general problem than
for vmwgfx only, I mean, unless the driver traverses all core pending
event list to find relevant pending events to process, something in the
driver must actually point to the pending event (be it a pointer in the
fence object or, as in the vmwgfx case, a pointer in the fence action
object) and that pointer must somehow be invalidated when the pending
event is freed...
Which also brings up a question, where are the pending events actually
destroyed? I can see they are unlinked in drm_fops.c.
/Thomas
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 21/21] drm/vmwgfx: Nuke preclose hook
2016-01-10 20:52 ` Thomas Hellstrom
@ 2016-01-10 21:59 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 21:59 UTC (permalink / raw)
To: Thomas Hellstrom
Cc: Daniel Vetter, Thomas Hellstrom, Intel Graphics Development,
DRI Development
On Sun, Jan 10, 2016 at 9:52 PM, Thomas Hellstrom <thomas@shipmail.org> wrote:
> On 01/09/2016 11:43 AM, Daniel Vetter wrote:
>> On Fri, Jan 8, 2016 at 9:53 PM, Thomas Hellstrom <thellstrom@vmware.com> wrote:
>>> On 01/08/2016 09:36 PM, Daniel Vetter wrote:
>>>> Again since the drm core takes care of event unlinking/disarming this
>>>> is now just needless code.
>>>>
>>>> Cc: Thomas Hellström <thellstrom@vmware.com>
>>>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>>> Hmm,
>>>
>>> IIRC this is actually a list of events that core drm is not aware of
>>> yet. They sit on this list waiting for a fence to pass and are then
>>> transferred to core drm....
>> Yes I know. Earlier patches in the series extract new core functions
>> to setup/tear down such events and send them out, which is what's
>> needed to make this trick possible. Exynos similarly uses events
>> similarly, and is also converted. Same for nouveau it seems, but there
>> the code doesn't use the reserve/send split, so I'm unclear
>> how/whether at all it correctly handles this race.
>> -Daniel
>
> Ah. Hmm I should've looked more closely at the rest of the series.
>
> In any case, this particular patch leaves, from what I can tell, the
> eaction fpriv list intact when it is later freed in postclose, which is
> bad. Also each eaction is left with a dangling pointer to a freed
> pending event which is also very bad since that pointer will be
> dereferenced as soon as the fence's seqno has passed. So as far as i can
> tell, this function needs to remain except for the event destruction.
Oops, I missed that part, it needs to go too. All other drivers look
for events to clean up from some other objects (for the crtc page flip
stuff) or are just outright confused, I didn't check vmwgfx code
carefully enough.
> Thinking of it, this must be a problem that is more general problem than
> for vmwgfx only, I mean, unless the driver traverses all core pending
> event list to find relevant pending events to process, something in the
> driver must actually point to the pending event (be it a pointer in the
> fence object or, as in the vmwgfx case, a pointer in the fence action
> object) and that pointer must somehow be invalidated when the pending
> event is freed...
This is exactly what this patch series attempts to do, by unlinking
events from the fpriv if that disappears. Driver code can still call
drm_even_send&friends (which are all rolled out in this series), they
will simply only free up the event and not try to send it out.
> Which also brings up a question, where are the pending events actually
> destroyed? I can see they are unlinked in drm_fops.c.
When the driver eventually calls drm_send_event. That way fpriv
disappearing is completely transparent to the driver.
I'll resend the vmwgfx patch.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/vmwgfx: Nuke preclose hook
2016-01-08 20:36 ` [PATCH 21/21] drm/vmwgfx: " Daniel Vetter
2016-01-08 20:53 ` Thomas Hellstrom
@ 2016-01-10 22:02 ` Daniel Vetter
2016-01-10 22:17 ` Thomas Hellstrom
1 sibling, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:02 UTC (permalink / raw)
To: Intel Graphics Development, DRI Development
Cc: Daniel Vetter, Thomas Hellström, Daniel Vetter
Again since the drm core takes care of event unlinking/disarming this
is now just needless code.
v2: I've completely missed eaction->fpriv_head and all the related
code. We need to nuke that too to avoid accidentally deferencing the
freed-up vmwgfx-private fpriv.
Cc: Thomas Hellström <thellstrom@vmware.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/vc4/vc4_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 --------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 48 -----------------------------------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
4 files changed, 61 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 080865ec2bae..4c734d087d7f 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
extern struct platform_driver vc4_crtc_driver;
int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
-void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
/* vc4_debugfs.c */
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index c49812b80dd0..c04c4d1e2f3e 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
return 0;
}
-static void vmw_preclose(struct drm_device *dev,
- struct drm_file *file_priv)
-{
- struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
- struct vmw_private *dev_priv = vmw_priv(dev);
-
- vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
-}
-
static void vmw_postclose(struct drm_device *dev,
struct drm_file *file_priv)
{
@@ -1500,7 +1491,6 @@ static struct drm_driver driver = {
.master_set = vmw_master_set,
.master_drop = vmw_master_drop,
.open = vmw_driver_open,
- .preclose = vmw_preclose,
.postclose = vmw_postclose,
.set_busid = drm_pci_set_busid,
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index e0edf149d9d5..bb95bd20d415 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -71,7 +71,6 @@ struct vmw_user_fence {
*/
struct vmw_event_fence_action {
struct vmw_fence_action action;
- struct list_head fpriv_head;
struct drm_pending_event *event;
struct vmw_fence_obj *fence;
@@ -808,44 +807,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
}
/**
- * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
- *
- * @fman: Pointer to a struct vmw_fence_manager
- * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
- * with pointers to a struct drm_file object about to be closed.
- *
- * This function removes all pending fence events with references to a
- * specific struct drm_file object about to be closed. The caller is required
- * to pass a list of all struct vmw_event_fence_action objects with such
- * events attached. This function is typically called before the
- * struct drm_file object's event management is taken down.
- */
-void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list)
-{
- struct vmw_event_fence_action *eaction;
- struct drm_pending_event *event;
- unsigned long irq_flags;
-
- while (1) {
- spin_lock_irqsave(&fman->lock, irq_flags);
- if (list_empty(event_list))
- goto out_unlock;
- eaction = list_first_entry(event_list,
- struct vmw_event_fence_action,
- fpriv_head);
- list_del_init(&eaction->fpriv_head);
- event = eaction->event;
- eaction->event = NULL;
- spin_unlock_irqrestore(&fman->lock, irq_flags);
- event->destroy(event);
- }
-out_unlock:
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-}
-
-
-/**
* vmw_event_fence_action_seq_passed
*
* @action: The struct vmw_fence_action embedded in a struct
@@ -879,7 +840,6 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
*eaction->tv_usec = tv.tv_usec;
}
- list_del_init(&eaction->fpriv_head);
eaction->event = NULL;
drm_send_event_locked(dev, eaction->event);
spin_unlock_irqrestore(&dev->event_lock, irq_flags);
@@ -901,10 +861,6 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
struct vmw_fence_manager *fman = fman_from_fence(eaction->fence);
unsigned long irq_flags;
- spin_lock_irqsave(&fman->lock, irq_flags);
- list_del(&eaction->fpriv_head);
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-
vmw_fence_obj_unreference(&eaction->fence);
kfree(eaction);
}
@@ -1001,10 +957,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
eaction->tv_sec = tv_sec;
eaction->tv_usec = tv_usec;
- spin_lock_irqsave(&fman->lock, irq_flags);
- list_add_tail(&eaction->fpriv_head, &vmw_fp->fence_events);
- spin_unlock_irqrestore(&fman->lock, irq_flags);
-
vmw_fence_obj_add_action(fence, &eaction->action);
return 0;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
index 8be6c29f5eb5..83ae301ee141 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
@@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_priv);
-extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
- struct list_head *event_list);
extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
struct vmw_fence_obj *fence,
struct drm_pending_event *event,
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* Re: [PATCH] drm/vmwgfx: Nuke preclose hook
2016-01-10 22:02 ` [PATCH] " Daniel Vetter
@ 2016-01-10 22:17 ` Thomas Hellstrom
2016-01-10 22:22 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Thomas Hellstrom @ 2016-01-10 22:17 UTC (permalink / raw)
To: Daniel Vetter, Intel Graphics Development, DRI Development; +Cc: Daniel Vetter
In general, looks good. Two things though.
1) vc4_drv.h looks like it ended up in the wrong patch.
2) Should be able to nuke also struct vmw_fpriv::fence_events and struct
vmw_event_fence_action::fpriv_head?
/Thomas
On 01/10/2016 11:02 PM, Daniel Vetter wrote:
> Again since the drm core takes care of event unlinking/disarming this
> is now just needless code.
>
> v2: I've completely missed eaction->fpriv_head and all the related
> code. We need to nuke that too to avoid accidentally deferencing the
> freed-up vmwgfx-private fpriv.
>
> Cc: Thomas Hellström <thellstrom@vmware.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
> drivers/gpu/drm/vc4/vc4_drv.h | 1 -
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 --------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 48 -----------------------------------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
> 4 files changed, 61 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
> index 080865ec2bae..4c734d087d7f 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.h
> +++ b/drivers/gpu/drm/vc4/vc4_drv.h
> @@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
> extern struct platform_driver vc4_crtc_driver;
> int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
> void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
> -void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
> int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
>
> /* vc4_debugfs.c */
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> index c49812b80dd0..c04c4d1e2f3e 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
> @@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
> return 0;
> }
>
> -static void vmw_preclose(struct drm_device *dev,
> - struct drm_file *file_priv)
> -{
> - struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
> - struct vmw_private *dev_priv = vmw_priv(dev);
> -
> - vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
> -}
> -
> static void vmw_postclose(struct drm_device *dev,
> struct drm_file *file_priv)
> {
> @@ -1500,7 +1491,6 @@ static struct drm_driver driver = {
> .master_set = vmw_master_set,
> .master_drop = vmw_master_drop,
> .open = vmw_driver_open,
> - .preclose = vmw_preclose,
> .postclose = vmw_postclose,
> .set_busid = drm_pci_set_busid,
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> index e0edf149d9d5..bb95bd20d415 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
> @@ -71,7 +71,6 @@ struct vmw_user_fence {
> */
> struct vmw_event_fence_action {
> struct vmw_fence_action action;
> - struct list_head fpriv_head;
>
> struct drm_pending_event *event;
> struct vmw_fence_obj *fence;
> @@ -808,44 +807,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> }
>
> /**
> - * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
> - *
> - * @fman: Pointer to a struct vmw_fence_manager
> - * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
> - * with pointers to a struct drm_file object about to be closed.
> - *
> - * This function removes all pending fence events with references to a
> - * specific struct drm_file object about to be closed. The caller is required
> - * to pass a list of all struct vmw_event_fence_action objects with such
> - * events attached. This function is typically called before the
> - * struct drm_file object's event management is taken down.
> - */
> -void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list)
> -{
> - struct vmw_event_fence_action *eaction;
> - struct drm_pending_event *event;
> - unsigned long irq_flags;
> -
> - while (1) {
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - if (list_empty(event_list))
> - goto out_unlock;
> - eaction = list_first_entry(event_list,
> - struct vmw_event_fence_action,
> - fpriv_head);
> - list_del_init(&eaction->fpriv_head);
> - event = eaction->event;
> - eaction->event = NULL;
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> - event->destroy(event);
> - }
> -out_unlock:
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -}
> -
> -
> -/**
> * vmw_event_fence_action_seq_passed
> *
> * @action: The struct vmw_fence_action embedded in a struct
> @@ -879,7 +840,6 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
> *eaction->tv_usec = tv.tv_usec;
> }
>
> - list_del_init(&eaction->fpriv_head);
> eaction->event = NULL;
> drm_send_event_locked(dev, eaction->event);
> spin_unlock_irqrestore(&dev->event_lock, irq_flags);
> @@ -901,10 +861,6 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
> struct vmw_fence_manager *fman = fman_from_fence(eaction->fence);
> unsigned long irq_flags;
>
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - list_del(&eaction->fpriv_head);
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -
> vmw_fence_obj_unreference(&eaction->fence);
> kfree(eaction);
> }
> @@ -1001,10 +957,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
> eaction->tv_sec = tv_sec;
> eaction->tv_usec = tv_usec;
>
> - spin_lock_irqsave(&fman->lock, irq_flags);
> - list_add_tail(&eaction->fpriv_head, &vmw_fp->fence_events);
> - spin_unlock_irqrestore(&fman->lock, irq_flags);
> -
> vmw_fence_obj_add_action(fence, &eaction->action);
>
> return 0;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> index 8be6c29f5eb5..83ae301ee141 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
> @@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file_priv);
> -extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
> - struct list_head *event_list);
> extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
> struct vmw_fence_obj *fence,
> struct drm_pending_event *event,
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH] drm/vmwgfx: Nuke preclose hook
2016-01-10 22:17 ` Thomas Hellstrom
@ 2016-01-10 22:22 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-10 22:22 UTC (permalink / raw)
To: Thomas Hellstrom
Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On Sun, Jan 10, 2016 at 11:17 PM, Thomas Hellstrom
<thellstrom@vmware.com> wrote:
> In general, looks good. Two things though.
>
> 1) vc4_drv.h looks like it ended up in the wrong patch.
Oops, will fix.
> 2) Should be able to nuke also struct vmw_fpriv::fence_events and struct
> vmw_event_fence_action::fpriv_head?
Yes. I already remove fpriv_head, but fence_events should go to. Plus
a few other now unused local variable.
-Daniel
> /Thomas
>
> On 01/10/2016 11:02 PM, Daniel Vetter wrote:
>> Again since the drm core takes care of event unlinking/disarming this
>> is now just needless code.
>>
>> v2: I've completely missed eaction->fpriv_head and all the related
>> code. We need to nuke that too to avoid accidentally deferencing the
>> freed-up vmwgfx-private fpriv.
>>
>> Cc: Thomas Hellström <thellstrom@vmware.com>
>> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>> ---
>> drivers/gpu/drm/vc4/vc4_drv.h | 1 -
>> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 --------
>> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 48 -----------------------------------
>> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 --
>> 4 files changed, 61 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
>> index 080865ec2bae..4c734d087d7f 100644
>> --- a/drivers/gpu/drm/vc4/vc4_drv.h
>> +++ b/drivers/gpu/drm/vc4/vc4_drv.h
>> @@ -376,7 +376,6 @@ int vc4_bo_stats_debugfs(struct seq_file *m, void *arg);
>> extern struct platform_driver vc4_crtc_driver;
>> int vc4_enable_vblank(struct drm_device *dev, unsigned int crtc_id);
>> void vc4_disable_vblank(struct drm_device *dev, unsigned int crtc_id);
>> -void vc4_cancel_page_flip(struct drm_crtc *crtc, struct drm_file *file);
>> int vc4_crtc_debugfs_regs(struct seq_file *m, void *arg);
>>
>> /* vc4_debugfs.c */
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> index c49812b80dd0..c04c4d1e2f3e 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
>> @@ -971,15 +971,6 @@ static int vmw_driver_unload(struct drm_device *dev)
>> return 0;
>> }
>>
>> -static void vmw_preclose(struct drm_device *dev,
>> - struct drm_file *file_priv)
>> -{
>> - struct vmw_fpriv *vmw_fp = vmw_fpriv(file_priv);
>> - struct vmw_private *dev_priv = vmw_priv(dev);
>> -
>> - vmw_event_fence_fpriv_gone(dev_priv->fman, &vmw_fp->fence_events);
>> -}
>> -
>> static void vmw_postclose(struct drm_device *dev,
>> struct drm_file *file_priv)
>> {
>> @@ -1500,7 +1491,6 @@ static struct drm_driver driver = {
>> .master_set = vmw_master_set,
>> .master_drop = vmw_master_drop,
>> .open = vmw_driver_open,
>> - .preclose = vmw_preclose,
>> .postclose = vmw_postclose,
>> .set_busid = drm_pci_set_busid,
>>
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
>> index e0edf149d9d5..bb95bd20d415 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
>> @@ -71,7 +71,6 @@ struct vmw_user_fence {
>> */
>> struct vmw_event_fence_action {
>> struct vmw_fence_action action;
>> - struct list_head fpriv_head;
>>
>> struct drm_pending_event *event;
>> struct vmw_fence_obj *fence;
>> @@ -808,44 +807,6 @@ int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
>> }
>>
>> /**
>> - * vmw_event_fence_fpriv_gone - Remove references to struct drm_file objects
>> - *
>> - * @fman: Pointer to a struct vmw_fence_manager
>> - * @event_list: Pointer to linked list of struct vmw_event_fence_action objects
>> - * with pointers to a struct drm_file object about to be closed.
>> - *
>> - * This function removes all pending fence events with references to a
>> - * specific struct drm_file object about to be closed. The caller is required
>> - * to pass a list of all struct vmw_event_fence_action objects with such
>> - * events attached. This function is typically called before the
>> - * struct drm_file object's event management is taken down.
>> - */
>> -void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
>> - struct list_head *event_list)
>> -{
>> - struct vmw_event_fence_action *eaction;
>> - struct drm_pending_event *event;
>> - unsigned long irq_flags;
>> -
>> - while (1) {
>> - spin_lock_irqsave(&fman->lock, irq_flags);
>> - if (list_empty(event_list))
>> - goto out_unlock;
>> - eaction = list_first_entry(event_list,
>> - struct vmw_event_fence_action,
>> - fpriv_head);
>> - list_del_init(&eaction->fpriv_head);
>> - event = eaction->event;
>> - eaction->event = NULL;
>> - spin_unlock_irqrestore(&fman->lock, irq_flags);
>> - event->destroy(event);
>> - }
>> -out_unlock:
>> - spin_unlock_irqrestore(&fman->lock, irq_flags);
>> -}
>> -
>> -
>> -/**
>> * vmw_event_fence_action_seq_passed
>> *
>> * @action: The struct vmw_fence_action embedded in a struct
>> @@ -879,7 +840,6 @@ static void vmw_event_fence_action_seq_passed(struct vmw_fence_action *action)
>> *eaction->tv_usec = tv.tv_usec;
>> }
>>
>> - list_del_init(&eaction->fpriv_head);
>> eaction->event = NULL;
>> drm_send_event_locked(dev, eaction->event);
>> spin_unlock_irqrestore(&dev->event_lock, irq_flags);
>> @@ -901,10 +861,6 @@ static void vmw_event_fence_action_cleanup(struct vmw_fence_action *action)
>> struct vmw_fence_manager *fman = fman_from_fence(eaction->fence);
>> unsigned long irq_flags;
>>
>> - spin_lock_irqsave(&fman->lock, irq_flags);
>> - list_del(&eaction->fpriv_head);
>> - spin_unlock_irqrestore(&fman->lock, irq_flags);
>> -
>> vmw_fence_obj_unreference(&eaction->fence);
>> kfree(eaction);
>> }
>> @@ -1001,10 +957,6 @@ int vmw_event_fence_action_queue(struct drm_file *file_priv,
>> eaction->tv_sec = tv_sec;
>> eaction->tv_usec = tv_usec;
>>
>> - spin_lock_irqsave(&fman->lock, irq_flags);
>> - list_add_tail(&eaction->fpriv_head, &vmw_fp->fence_events);
>> - spin_unlock_irqrestore(&fman->lock, irq_flags);
>> -
>> vmw_fence_obj_add_action(fence, &eaction->action);
>>
>> return 0;
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
>> index 8be6c29f5eb5..83ae301ee141 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.h
>> @@ -116,8 +116,6 @@ extern int vmw_fence_obj_unref_ioctl(struct drm_device *dev, void *data,
>> struct drm_file *file_priv);
>> extern int vmw_fence_event_ioctl(struct drm_device *dev, void *data,
>> struct drm_file *file_priv);
>> -extern void vmw_event_fence_fpriv_gone(struct vmw_fence_manager *fman,
>> - struct list_head *event_list);
>> extern int vmw_event_fence_action_queue(struct drm_file *filee_priv,
>> struct vmw_fence_obj *fence,
>> struct drm_pending_event *event,
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 00/21] drm_event cleanup
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (20 preceding siblings ...)
2016-01-08 20:36 ` [PATCH 21/21] drm/vmwgfx: " Daniel Vetter
@ 2016-01-08 21:47 ` Alex Deucher
2016-01-09 13:32 ` Daniel Vetter
2016-01-11 11:20 ` ✗ failure: Fi.CI.BAT Patchwork
23 siblings, 0 replies; 123+ messages in thread
From: Alex Deucher @ 2016-01-08 21:47 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Intel Graphics Development, DRI Development
On Fri, Jan 8, 2016 at 3:36 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> Hi all,
>
> This patch series is inspired by a WIP patch from Rob Clark to consolidate the
> drm_event handling a bit. I've went a bit further and also moved the pending
> event handling and unlinking into the core, which allows us to nuke a bunch of
> code from drivers who all copypasted this themselves. Plus fix up all the others
> who failed to handle this correctly.
>
> Net -500 lines of code, plus kerneldoc for drm_fops.c and all the new functions
> as bonus.
>
> Comments and review highly welcome as usual.
Other than the typo in the comments in patch 2, this series looks good
to me. With that fixed, the series is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
> Cheers, Daniel
>
> Daniel Vetter (21):
> drm: kerneldoc for drm_fops.c
> drm: Add functions to setup/tear down drm_events.
> drm/exynos: Use the new event init/free functions
> drm/vmwgfx: Use the new event init/free functions
> drm: Create drm_send_event helpers
> drm/fsl: Remove preclose hook
> drm/armada: Remove NULL open/pre/postclose hooks
> drm/gma500: Remove empty preclose hook
> drm: Clean up pending events in the core
> drm/i915: Nuke intel_modeset_preclose
> drm/atmel: Nuke preclose
> drm/exynos: Remove event cancelling from postclose
> drm/imx: Unconfuse preclose logic
> drm/msm: Nuke preclose hooks
> drm/omap: Nuke close hooks
> drm/rcar: Nuke preclose hook
> drm/shmob: Nuke preclose hook
> drm/tegra: Stop cancelling page flip events
> drm/tilcdc: Nuke preclose hook
> drm/vc4: Nuke preclose hook
> drm/vmwgfx: Nuke preclose hook
>
> Documentation/DocBook/gpu.tmpl | 48 +----
> drivers/gpu/drm/armada/armada_drv.c | 3 -
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 18 --
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 10 -
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 3 -
> drivers/gpu/drm/drm_atomic.c | 44 ++---
> drivers/gpu/drm/drm_crtc.c | 36 +---
> drivers/gpu/drm/drm_fops.c | 259 ++++++++++++++++++++++---
> drivers/gpu/drm/drm_irq.c | 7 +-
> drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 --
> drivers/gpu/drm/exynos/exynos_drm_g2d.c | 36 +---
> drivers/gpu/drm/exynos/exynos_drm_ipp.c | 28 +--
> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 5 -
> drivers/gpu/drm/gma500/psb_drv.c | 9 -
> drivers/gpu/drm/i915/i915_dma.c | 2 -
> drivers/gpu/drm/i915/intel_display.c | 21 --
> drivers/gpu/drm/i915/intel_drv.h | 1 -
> drivers/gpu/drm/imx/imx-drm-core.c | 13 --
> drivers/gpu/drm/imx/ipuv3-crtc.c | 4 -
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 7 -
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 11 --
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 -
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 -
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 11 --
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 1 -
> drivers/gpu/drm/omapdrm/omap_drv.c | 29 ---
> drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --
> drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 -
> drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 -
> drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --
> drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 -
> drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 -
> drivers/gpu/drm/tegra/dc.c | 17 --
> drivers/gpu/drm/tegra/drm.c | 3 -
> drivers/gpu/drm/tegra/drm.h | 1 -
> drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --
> drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 -
> drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
> drivers/gpu/drm/vc4/vc4_crtc.c | 20 --
> drivers/gpu/drm/vc4/vc4_drv.c | 10 -
> drivers/gpu/drm/vc4/vc4_drv.h | 1 -
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 -
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 73 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 -
> include/drm/drmP.h | 26 ++-
> 45 files changed, 299 insertions(+), 582 deletions(-)
>
> --
> 2.6.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: [PATCH 00/21] drm_event cleanup
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (21 preceding siblings ...)
2016-01-08 21:47 ` [PATCH 00/21] drm_event cleanup Alex Deucher
@ 2016-01-09 13:32 ` Daniel Vetter
2016-01-11 11:20 ` ✗ failure: Fi.CI.BAT Patchwork
23 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-09 13:32 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
On Fri, Jan 08, 2016 at 09:36:32PM +0100, Daniel Vetter wrote:
> Hi all,
>
> This patch series is inspired by a WIP patch from Rob Clark to consolidate the
> drm_event handling a bit. I've went a bit further and also moved the pending
> event handling and unlinking into the core, which allows us to nuke a bunch of
> code from drivers who all copypasted this themselves. Plus fix up all the others
> who failed to handle this correctly.
>
> Net -500 lines of code, plus kerneldoc for drm_fops.c and all the new functions
> as bonus.
>
> Comments and review highly welcome as usual.
What I've forgotten to mention: nouveau does something uncommon with
events around the usif notification. It looks fishy, since it neither
seems to handle file_priv disappearing nor does it properly reserve space
upfront for the event. But that's just my guess, I didn't really follow
what's going on there. Therefore I left fixing up nouveau (or just moving
it over to these new functions here) to someone else.
-Daniel
>
> Cheers, Daniel
>
> Daniel Vetter (21):
> drm: kerneldoc for drm_fops.c
> drm: Add functions to setup/tear down drm_events.
> drm/exynos: Use the new event init/free functions
> drm/vmwgfx: Use the new event init/free functions
> drm: Create drm_send_event helpers
> drm/fsl: Remove preclose hook
> drm/armada: Remove NULL open/pre/postclose hooks
> drm/gma500: Remove empty preclose hook
> drm: Clean up pending events in the core
> drm/i915: Nuke intel_modeset_preclose
> drm/atmel: Nuke preclose
> drm/exynos: Remove event cancelling from postclose
> drm/imx: Unconfuse preclose logic
> drm/msm: Nuke preclose hooks
> drm/omap: Nuke close hooks
> drm/rcar: Nuke preclose hook
> drm/shmob: Nuke preclose hook
> drm/tegra: Stop cancelling page flip events
> drm/tilcdc: Nuke preclose hook
> drm/vc4: Nuke preclose hook
> drm/vmwgfx: Nuke preclose hook
>
> Documentation/DocBook/gpu.tmpl | 48 +----
> drivers/gpu/drm/armada/armada_drv.c | 3 -
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 18 --
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 10 -
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 3 -
> drivers/gpu/drm/drm_atomic.c | 44 ++---
> drivers/gpu/drm/drm_crtc.c | 36 +---
> drivers/gpu/drm/drm_fops.c | 259 ++++++++++++++++++++++---
> drivers/gpu/drm/drm_irq.c | 7 +-
> drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 --
> drivers/gpu/drm/exynos/exynos_drm_g2d.c | 36 +---
> drivers/gpu/drm/exynos/exynos_drm_ipp.c | 28 +--
> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 5 -
> drivers/gpu/drm/gma500/psb_drv.c | 9 -
> drivers/gpu/drm/i915/i915_dma.c | 2 -
> drivers/gpu/drm/i915/intel_display.c | 21 --
> drivers/gpu/drm/i915/intel_drv.h | 1 -
> drivers/gpu/drm/imx/imx-drm-core.c | 13 --
> drivers/gpu/drm/imx/ipuv3-crtc.c | 4 -
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 7 -
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 11 --
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 -
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 -
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 11 --
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 1 -
> drivers/gpu/drm/omapdrm/omap_drv.c | 29 ---
> drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --
> drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 -
> drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 -
> drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --
> drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 -
> drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 -
> drivers/gpu/drm/tegra/dc.c | 17 --
> drivers/gpu/drm/tegra/drm.c | 3 -
> drivers/gpu/drm/tegra/drm.h | 1 -
> drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --
> drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 -
> drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
> drivers/gpu/drm/vc4/vc4_crtc.c | 20 --
> drivers/gpu/drm/vc4/vc4_drv.c | 10 -
> drivers/gpu/drm/vc4/vc4_drv.h | 1 -
> drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 10 -
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 73 +------
> drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 -
> include/drm/drmP.h | 26 ++-
> 45 files changed, 299 insertions(+), 582 deletions(-)
>
> --
> 2.6.4
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
` (22 preceding siblings ...)
2016-01-09 13:32 ` Daniel Vetter
@ 2016-01-11 11:20 ` Patchwork
2016-01-12 16:24 ` Daniel Vetter
23 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-11 11:20 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
== Summary ==
HEAD is now at ff88655 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Applying: drm: kerneldoc for drm_fops.c
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Patch failed at 0001 drm: kerneldoc for drm_fops.c
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v5 1/1] drm/i915/bxt: Check BIOS RC6 setup before enabling RC6
@ 2016-01-14 15:56 Sagar Arun Kamble
2016-01-14 16:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Sagar Arun Kamble @ 2016-01-14 15:56 UTC (permalink / raw)
To: intel-gfx; +Cc: shashidhar.hiremath
RC6 setup is shared between BIOS and Driver. BIOS sets up subset of RC6
setup registers. If those are not setup Driver should not enable RC6.
For implementing this, driver can check RC_CTRL0 and RC_CTRL1 values
to know if BIOS has enabled HW/SW RC6.
This will also enable user to control RC6 using BIOS settings alone.
RC6 related instability can be avoided by disabling via BIOS settings
till driver fixes it.
v2: Had placed logic in gen8 function by mistake. Fixed it.
Ensuring RPM is not enabled in case BIOS disabled RC6.
v3: Need to disable RPM if RC6 is disabled due to BIOS settings. (Daniel)
Runtime PM enabling happens before gen9_enable_rc6.
Moved the updation of enable_rc6 parameter in intel_uncore_sanitize.
v4: Added elaborate check for BIOS RC6 setup. Prepared check_pctx for bxt. (Imre)
v5: Caching reserved stolen base and size in the driver private data.
Reorganized RC6 setup check. Moved from gen9_enable_rc6 to intel_uncore_sanitize. (Imre)
Cc: Imre Deak <imre.deak@intel.com>
Change-Id: If89518708e133be6b3c7c6f90869fb66224b7b87
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_gem_gtt.h | 2 ++
drivers/gpu/drm/i915/i915_gem_stolen.c | 39 ++++++++++++++++++----
drivers/gpu/drm/i915/i915_reg.h | 11 +++++++
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_pm.c | 59 ++++++++++++++++++++++++++++++++--
drivers/gpu/drm/i915/intel_uncore.c | 4 +++
7 files changed, 109 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index cf7e0fc..0c8e61c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -3223,6 +3223,7 @@ int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *dev_priv,
u64 end);
void i915_gem_stolen_remove_node(struct drm_i915_private *dev_priv,
struct drm_mm_node *node);
+int i915_gem_init_stolen_reserved(struct drm_device *dev);
int i915_gem_init_stolen(struct drm_device *dev);
void i915_gem_cleanup_stolen(struct drm_device *dev);
struct drm_i915_gem_object *
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index b448ad8..20ff6ca 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -343,6 +343,8 @@ struct i915_gtt {
size_t stolen_size; /* Total size of stolen memory */
size_t stolen_usable_size; /* Total size minus BIOS reserved */
+ size_t stolen_reserved_base;
+ size_t stolen_reserved_size;
u64 mappable_end; /* End offset that we can CPU map */
struct io_mapping *mappable; /* Mapping to our CPU mappable region */
phys_addr_t mappable_base; /* PA of our GMADR */
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 3476877..d5a65d9 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -386,14 +386,12 @@ static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
*size = stolen_top - *base;
}
-int i915_gem_init_stolen(struct drm_device *dev)
+int i915_gem_init_stolen_reserved(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- unsigned long reserved_total, reserved_base = 0, reserved_size;
+ unsigned long reserved_base = 0, reserved_size;
unsigned long stolen_top;
- mutex_init(&dev_priv->mm.stolen_lock);
-
#ifdef CONFIG_INTEL_IOMMU
if (intel_iommu_gfx_mapped && INTEL_INFO(dev)->gen < 8) {
DRM_INFO("DMAR active, disabling use of stolen memory\n");
@@ -458,9 +456,38 @@ int i915_gem_init_stolen(struct drm_device *dev)
return 0;
}
+ dev_priv->gtt.stolen_reserved_base = reserved_base;
+ dev_priv->gtt.stolen_reserved_size = reserved_size;
+
+ return 0;
+}
+
+int i915_gem_init_stolen(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ unsigned long reserved_total;
+ unsigned long stolen_top;
+
+ mutex_init(&dev_priv->mm.stolen_lock);
+
+#ifdef CONFIG_INTEL_IOMMU
+ if (intel_iommu_gfx_mapped && INTEL_INFO(dev)->gen < 8) {
+ DRM_INFO("DMAR active, disabling use of stolen memory\n");
+ return 0;
+ }
+#endif
+
+ if (dev_priv->gtt.stolen_size == 0)
+ return 0;
+
+ if (dev_priv->mm.stolen_base == 0)
+ return 0;
+
+ stolen_top = dev_priv->mm.stolen_base + dev_priv->gtt.stolen_size;
+
/* It is possible for the reserved area to end before the end of stolen
- * memory, so just consider the start. */
- reserved_total = stolen_top - reserved_base;
+ * memory, so just consider the start. */
+ reserved_total = stolen_top - dev_priv->gtt.stolen_reserved_base;
DRM_DEBUG_KMS("Memory reserved for graphics device: %zuK, usable: %luK\n",
dev_priv->gtt.stolen_size >> 10,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 007ae83..19ddf79 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -6765,6 +6765,16 @@ enum skl_disp_power_wells {
#define VLV_PMWGICZ _MMIO(0x1300a4)
+#define RC6_LOCATION _MMIO(0xD40)
+#define RC6_CTX_IN_DRAM 1
+#define RC6_CTX_BASE _MMIO(0xD48)
+#define RC6_CTX_BASE_MASK 0xFFFFFFF0
+#define PWRCTX_MAXCNT_RCSUNIT _MMIO(0x2054)
+#define PWRCTX_MAXCNT_VCSUNIT0 _MMIO(0x12054)
+#define PWRCTX_MAXCNT_BCSUNIT _MMIO(0x22054)
+#define PWRCTX_MAXCNT_VECSUNIT _MMIO(0x1A054)
+#define PWRCTX_MAXCNT_VCSUNIT1 _MMIO(0x1C054)
+#define IDLE_TIME_MASK 0xFFFFF
#define FORCEWAKE _MMIO(0xA18C)
#define FORCEWAKE_VLV _MMIO(0x1300b0)
#define FORCEWAKE_ACK_VLV _MMIO(0x1300b4)
@@ -6903,6 +6913,7 @@ enum skl_disp_power_wells {
#define GEN6_RPDEUC _MMIO(0xA084)
#define GEN6_RPDEUCSW _MMIO(0xA088)
#define GEN6_RC_STATE _MMIO(0xA094)
+#define RC6_STATE (1<<18)
#define GEN6_RC1_WAKE_RATE_LIMIT _MMIO(0xA098)
#define GEN6_RC6_WAKE_RATE_LIMIT _MMIO(0xA09C)
#define GEN6_RC6pp_WAKE_RATE_LIMIT _MMIO(0xA0A0)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 0438b57..f22baef 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1564,6 +1564,7 @@ void skl_wm_get_hw_state(struct drm_device *dev);
void skl_ddb_get_hw_state(struct drm_i915_private *dev_priv,
struct skl_ddb_allocation *ddb /* out */);
uint32_t ilk_pipe_pixel_rate(const struct intel_crtc_state *pipe_config);
+int sanitize_rc6_option(const struct drm_device *dev, int enable_rc6);
/* intel_sdvo.c */
bool intel_sdvo_init(struct drm_device *dev,
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 02fe081..c9a32a4 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4518,12 +4518,68 @@ static void intel_print_rc6_info(struct drm_device *dev, u32 mode)
(mode & GEN6_RC_CTL_RC6_ENABLE) ? "on" : "off");
}
-static int sanitize_rc6_option(const struct drm_device *dev, int enable_rc6)
+static bool bxt_check_bios_rc6_setup(const struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ bool enable_rc6 = true;
+ unsigned long rc6_ctx_base;
+ bool bios_hw_rc6_enabled, bios_sw_rc6_enabled;
+
+ bios_hw_rc6_enabled = I915_READ(GEN6_RC_CONTROL) &
+ (GEN6_RC_CTL_RC6_ENABLE |
+ GEN6_RC_CTL_HW_ENABLE);
+ bios_sw_rc6_enabled = !(I915_READ(GEN6_RC_CONTROL) &
+ GEN6_RC_CTL_HW_ENABLE) &&
+ (I915_READ(GEN6_RC_STATE) & RC6_STATE);
+
+ if (!(I915_READ(RC6_LOCATION) & RC6_CTX_IN_DRAM)) {
+ DRM_DEBUG_KMS("RC6 Base location not set properly.\n");
+ enable_rc6 = false;
+ }
+
+ rc6_ctx_base = I915_READ(RC6_CTX_BASE) & RC6_CTX_BASE_MASK;
+ if (!((rc6_ctx_base >= dev_priv->gtt.stolen_reserved_base) &&
+ (rc6_ctx_base <= (dev_priv->gtt.stolen_reserved_base +
+ dev_priv->gtt.stolen_reserved_size)))) {
+ DRM_DEBUG_KMS("RC6 Base address not as expected.\n");
+ enable_rc6 = false;
+ }
+
+ if (!(((I915_READ(PWRCTX_MAXCNT_RCSUNIT) & IDLE_TIME_MASK) > 1) &&
+ ((I915_READ(PWRCTX_MAXCNT_VCSUNIT0) & IDLE_TIME_MASK) > 1) &&
+ ((I915_READ(PWRCTX_MAXCNT_BCSUNIT) & IDLE_TIME_MASK) > 1) &&
+ ((I915_READ(PWRCTX_MAXCNT_VECSUNIT) & IDLE_TIME_MASK) > 1))) {
+ DRM_DEBUG_KMS("Engine Idle wait time not set properly.\n");
+ enable_rc6 = false;
+ }
+
+ if (HAS_BSD2(dev) &&
+ ((I915_READ(PWRCTX_MAXCNT_VCSUNIT1) & IDLE_TIME_MASK) > 1)) {
+ DRM_DEBUG_KMS("VCSUNIT1 Idle wait time not set properly.\n");
+ enable_rc6 = false;
+ }
+
+ if (!bios_hw_rc6_enabled && !bios_sw_rc6_enabled) {
+ DRM_DEBUG_KMS("HW/SW RC6 is not enabled by BIOS.\n");
+ enable_rc6 = false;
+ }
+
+ return enable_rc6;
+}
+
+int sanitize_rc6_option(const struct drm_device *dev, int enable_rc6)
{
/* No RC6 before Ironlake and code is gone for ilk. */
if (INTEL_INFO(dev)->gen < 6)
return 0;
+ if (IS_BROXTON(dev)) {
+ if (!bxt_check_bios_rc6_setup(dev)) {
+ DRM_INFO("RC6 disabled by BIOS\n");
+ return 0;
+ }
+ }
+
/* Respect the kernel parameter if it is set */
if (enable_rc6 >= 0) {
int mask;
@@ -6014,7 +6070,6 @@ void intel_init_gt_powersave(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- i915.enable_rc6 = sanitize_rc6_option(dev, i915.enable_rc6);
/*
* RPM depends on RC6 to save restore the GT HW context, so make RC6 a
* requirement.
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index 277e60a..43fc3e8 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -359,6 +359,10 @@ void intel_uncore_early_sanitize(struct drm_device *dev, bool restore_forcewake)
void intel_uncore_sanitize(struct drm_device *dev)
{
+ i915_gem_init_stolen_reserved(dev);
+
+ i915.enable_rc6 = sanitize_rc6_option(dev, i915.enable_rc6);
+
/* BIOS often leaves RC6 enabled, but disable it for hw init */
intel_disable_gt_powersave(dev);
}
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 15:56 [PATCH v5 1/1] drm/i915/bxt: Check BIOS RC6 setup before enabling RC6 Sagar Arun Kamble
@ 2016-01-14 16:30 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 16:30 UTC (permalink / raw)
To: sagar.a.kamble; +Cc: intel-gfx
== Summary ==
HEAD is now at 8fb2fee drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
Applying: drm/i915/bxt: Check BIOS RC6 setup before enabling RC6
Using index info to reconstruct a base tree...
M drivers/gpu/drm/i915/i915_drv.h
M drivers/gpu/drm/i915/i915_gem_stolen.c
M drivers/gpu/drm/i915/i915_reg.h
M drivers/gpu/drm/i915/intel_drv.h
M drivers/gpu/drm/i915/intel_pm.c
M drivers/gpu/drm/i915/intel_uncore.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_uncore.c
Auto-merging drivers/gpu/drm/i915/intel_pm.c
Auto-merging drivers/gpu/drm/i915/intel_drv.h
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_drv.h
Auto-merging drivers/gpu/drm/i915/i915_reg.h
Auto-merging drivers/gpu/drm/i915/i915_gem_stolen.c
Auto-merging drivers/gpu/drm/i915/i915_drv.h
Patch failed at 0001 drm/i915/bxt: Check BIOS RC6 setup before enabling RC6
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/bios: Fix the sequence size calculations for MIPI seq v3
@ 2016-01-14 15:12 Jani Nikula
2016-01-14 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Jani Nikula @ 2016-01-14 15:12 UTC (permalink / raw)
To: intel-gfx
Two errors in a single line. The size was read from the wrong offset,
and the end index didn't take the five bytes for sequence byte and size
of sequence into account. Fix it all, and break up the calculations a
bit to make it clearer.
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reported-by: Mika Kahola <mika.kahola@intel.com>
Fixes: 2a33d93486f2 ("drm/i915/bios: add support for MIPI sequence block v3")
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_bios.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 12e2f8b8bf9c..bf62a19c8f69 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -842,6 +842,7 @@ static int goto_next_sequence_v3(const u8 *data, int index, int total)
{
int seq_end;
u16 len;
+ u32 size_of_sequence;
/*
* Could skip sequence based on Size of Sequence alone, but also do some
@@ -852,14 +853,24 @@ static int goto_next_sequence_v3(const u8 *data, int index, int total)
return 0;
}
- seq_end = index + *((const u32 *)(data + 1));
+ /* Skip Sequence Byte. */
+ index++;
+
+ /*
+ * Size of Sequence. Excludes the Sequence Byte and the size itself,
+ * includes MIPI_SEQ_ELEM_END byte, excludes the final MIPI_SEQ_END
+ * byte.
+ */
+ size_of_sequence = *((const uint32_t *)(data + index));
+ index += 4;
+
+ seq_end = index + size_of_sequence;
if (seq_end > total) {
DRM_ERROR("Invalid sequence size\n");
return 0;
}
- /* Skip Sequence Byte and Size of Sequence. */
- for (index = index + 5; index < total; index += len) {
+ for (; index < total; index += len) {
u8 operation_byte = *(data + index);
index++;
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 15:12 [PATCH] drm/i915/bios: Fix the sequence size calculations for MIPI seq v3 Jani Nikula
@ 2016-01-14 16:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 16:20 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Summary ==
Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-WARN (ilk-hp8440p)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (bdw-ultra)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
HANGED skl-i7k-2 in Patchwork_1190/skl-i7k-2/tests/115.json:igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b Patchwork_1190/skl-i7k-2/tests/116.json:igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c Patchwork_1190/skl-i7k-2/tests/117.json:igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a Patchwork_1190/skl-i7k-2/tests/118.json:igt@gem_ctx_create@basic Patchwork_1190/skl-i7k-2/tests/119.json:igt@gem_ctx_param_basic@invalid-ctx-get Patchwork_1190/skl-i7k-2/tests/120.json:igt@kms_addfb_basic@size-max Patchwork_1190/skl-i7k-2/tests/121.json:igt@kms_addfb_basic@no-handle Patchwork_1190/skl-i7k-2/tests/122.json:igt@kms_pipe_crc_basic@read-crc-pipe-a Patchwork_1190/skl-i7k-2/tests/123.json:igt@kms_pipe_crc_basic@read-crc-pipe-c Patchwork_1190/skl-i7k-2/tests/124.json:igt@kms_pipe_crc_basic@read-crc-pipe-b Patchwork_1190/skl-i7k-2/tests/125.json:igt@kms_addfb_basic@bad-pitch-256 Patchwork_1190/skl-i7k-2/tests/126.json:igt@gem_mmap_gtt@basic-write-gtt Patchwork_1190/skl-i7k-2/tests/127.json:igt@kms_s
etmode@basic-clone-single-crtc Patchwork_1190/skl-i7k-2/tests/128.json:igt@kms_addfb_basic@addfb25-x-tiled Patchwork_1190/skl-i7k-2/tests/129.json:igt@gem_basic@bad-close Patchwork_1190/skl-i7k-2/tests/130.json:igt@gem_render_linear_blits@basic Patchwork_1190/skl-i7k-2/tests/131.json:igt@gem_mmap_gtt@basic-copy Patchwork_1190/skl-i7k-2/tests/132.json:igt@kms_addfb_basic@small-bo Patchwork_1190/skl-i7k-2/tests/133.json:igt@kms_addfb_basic@basic Patchwork_1190/skl-i7k-2/tests/134.json:igt@kms_flip@basic-flip-vs-modeset Patchwork_1190/skl-i7k-2/tests/135.json:igt@kms_addfb_basic@unused-pitches Patchwork_1190/skl-i7k-2/tests/136.json:igt@kms_addfb_basic@bo-too-small-due-to-tiling Patchwork_1190/skl-i7k-2/tests/137.json:igt@gem_storedw_loop@basic-blt Patchwork_1190/skl-i7k-2/tests/138.json:igt@drv_getparams_basic@basic-eu-total Patchwork_1190/skl-i7k-2/tests/139.json:igt@gem_ctx_param_basic@invalid-ctx-set Patchwork_1190/skl-i7k-2/tests/140.json:igt@kms_pipe_crc_basic@read-crc-pipe-a-fra
me-sequence
Results at /archive/results/CI_IGT_test/Patchwork_1190/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Decouple execbuf uAPI from internal implementation
@ 2016-01-14 15:02 Tvrtko Ursulin
2016-01-14 15:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Tvrtko Ursulin @ 2016-01-14 15:02 UTC (permalink / raw)
To: Intel-gfx; +Cc: Daniel Vetter
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
At the moment execbuf ring selection is fully coupled to
internal ring ids which is not a good thing on its own.
This dependency is also spread between two source files and
not spelled out at either side which makes it hidden and
fragile.
This patch decouples this dependency by introducing an explicit
translation table of execbuf uAPI to ring id close to the only
call site (i915_gem_do_execbuffer).
This way we are free to change driver internal implementation
details without breaking userspace. All state relating to the
uAPI is now contained in, or next to, i915_gem_do_execbuffer.
As a side benefit, this patch decreases the compiled size
of i915_gem_do_execbuffer.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_drv.h | 4 +-
drivers/gpu/drm/i915/i915_gem.c | 2 +
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 103 +++++++++++++----------------
drivers/gpu/drm/i915/intel_ringbuffer.h | 10 +--
4 files changed, 56 insertions(+), 63 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index eb7bb97f7316..35d5d6099a44 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -334,7 +334,7 @@ struct drm_i915_file_private {
unsigned boosts;
} rps;
- struct intel_engine_cs *bsd_ring;
+ unsigned int bsd_ring;
};
enum intel_dpll_id {
@@ -1300,7 +1300,7 @@ struct i915_gem_mm {
bool busy;
/* the indicator for dispatch video commands on two BSD rings */
- int bsd_ring_dispatch_index;
+ unsigned int bsd_ring_dispatch_index;
/** Bit 6 swizzling required for X tiling */
uint32_t bit_6_swizzle_x;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ddc21d4b388d..26e6842f2df3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5112,6 +5112,8 @@ int i915_gem_open(struct drm_device *dev, struct drm_file *file)
spin_lock_init(&file_priv->mm.lock);
INIT_LIST_HEAD(&file_priv->mm.request_list);
+ file_priv->bsd_ring = -1;
+
ret = i915_gem_context_open(dev, file);
if (ret)
kfree(file_priv);
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index d469c4779ff5..cd8646a23780 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1328,33 +1328,23 @@ i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params,
/**
* Find one BSD ring to dispatch the corresponding BSD command.
- * The Ring ID is returned.
+ * The ring index is returned.
*/
-static int gen8_dispatch_bsd_ring(struct drm_device *dev,
- struct drm_file *file)
+static unsigned int
+gen8_dispatch_bsd_ring(struct drm_i915_private *dev_priv, struct drm_file *file)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_file_private *file_priv = file->driver_priv;
- /* Check whether the file_priv is using one ring */
- if (file_priv->bsd_ring)
- return file_priv->bsd_ring->id;
- else {
- /* If no, use the ping-pong mechanism to select one ring */
- int ring_id;
-
- mutex_lock(&dev->struct_mutex);
- if (dev_priv->mm.bsd_ring_dispatch_index == 0) {
- ring_id = VCS;
- dev_priv->mm.bsd_ring_dispatch_index = 1;
- } else {
- ring_id = VCS2;
- dev_priv->mm.bsd_ring_dispatch_index = 0;
- }
- file_priv->bsd_ring = &dev_priv->ring[ring_id];
- mutex_unlock(&dev->struct_mutex);
- return ring_id;
+ /* Check whether the file_priv has already selected one ring. */
+ if ((int)file_priv->bsd_ring < 0) {
+ /* If not, use the ping-pong mechanism to select one. */
+ mutex_lock(&dev_priv->dev->struct_mutex);
+ file_priv->bsd_ring = dev_priv->mm.bsd_ring_dispatch_index;
+ dev_priv->mm.bsd_ring_dispatch_index ^= 1;
+ mutex_unlock(&dev_priv->dev->struct_mutex);
}
+
+ return file_priv->bsd_ring;
}
static struct drm_i915_gem_object *
@@ -1377,6 +1367,16 @@ eb_get_batch(struct eb_vmas *eb)
return vma->obj;
}
+#define I915_USER_RINGS (4)
+
+static const enum intel_ring_id user_ring_map[I915_USER_RINGS + 1] = {
+ [I915_EXEC_DEFAULT] = RCS,
+ [I915_EXEC_RENDER] = RCS,
+ [I915_EXEC_BLT] = BCS,
+ [I915_EXEC_BSD] = VCS,
+ [I915_EXEC_VEBOX] = VECS
+};
+
static int
i915_gem_do_execbuffer(struct drm_device *dev, void *data,
struct drm_file *file,
@@ -1393,6 +1393,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
struct i915_execbuffer_params params_master; /* XXX: will be removed later */
struct i915_execbuffer_params *params = ¶ms_master;
const u32 ctx_id = i915_execbuffer2_get_context_id(*args);
+ unsigned int user_ring_id = args->flags & I915_EXEC_RING_MASK;
u32 dispatch_flags;
int ret;
bool need_relocs;
@@ -1414,49 +1415,39 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
if (args->flags & I915_EXEC_IS_PINNED)
dispatch_flags |= I915_DISPATCH_PINNED;
- if ((args->flags & I915_EXEC_RING_MASK) > LAST_USER_RING) {
- DRM_DEBUG("execbuf with unknown ring: %d\n",
- (int)(args->flags & I915_EXEC_RING_MASK));
+ if (user_ring_id > I915_USER_RINGS) {
+ DRM_DEBUG("execbuf with unknown ring: %u\n", user_ring_id);
return -EINVAL;
}
- if (((args->flags & I915_EXEC_RING_MASK) != I915_EXEC_BSD) &&
+ if ((user_ring_id != I915_EXEC_BSD) &&
((args->flags & I915_EXEC_BSD_MASK) != 0)) {
DRM_DEBUG("execbuf with non bsd ring but with invalid "
"bsd dispatch flags: %d\n", (int)(args->flags));
return -EINVAL;
- }
-
- if ((args->flags & I915_EXEC_RING_MASK) == I915_EXEC_DEFAULT)
- ring = &dev_priv->ring[RCS];
- else if ((args->flags & I915_EXEC_RING_MASK) == I915_EXEC_BSD) {
- if (HAS_BSD2(dev)) {
- int ring_id;
-
- switch (args->flags & I915_EXEC_BSD_MASK) {
- case I915_EXEC_BSD_DEFAULT:
- ring_id = gen8_dispatch_bsd_ring(dev, file);
- ring = &dev_priv->ring[ring_id];
- break;
- case I915_EXEC_BSD_RING1:
- ring = &dev_priv->ring[VCS];
- break;
- case I915_EXEC_BSD_RING2:
- ring = &dev_priv->ring[VCS2];
- break;
- default:
- DRM_DEBUG("execbuf with unknown bsd ring: %d\n",
- (int)(args->flags & I915_EXEC_BSD_MASK));
- return -EINVAL;
- }
- } else
- ring = &dev_priv->ring[VCS];
- } else
- ring = &dev_priv->ring[(args->flags & I915_EXEC_RING_MASK) - 1];
+ }
+
+ if (user_ring_id == I915_EXEC_BSD && HAS_BSD2(dev)) {
+ unsigned int bsd_idx = args->flags & I915_EXEC_BSD_MASK;
+
+ if (bsd_idx == I915_EXEC_BSD_DEFAULT) {
+ bsd_idx = gen8_dispatch_bsd_ring(dev_priv, file);
+ } else if (bsd_idx >= I915_EXEC_BSD_RING1 &&
+ bsd_idx <= I915_EXEC_BSD_RING2) {
+ bsd_idx--;
+ } else {
+ DRM_DEBUG("execbuf with unknown bsd ring: %u\n",
+ bsd_idx);
+ return -EINVAL;
+ }
+
+ ring = &dev_priv->ring[_VCS(bsd_idx)];
+ } else {
+ ring = &dev_priv->ring[user_ring_map[user_ring_id]];
+ }
if (!intel_ring_initialized(ring)) {
- DRM_DEBUG("execbuf with invalid ring: %d\n",
- (int)(args->flags & I915_EXEC_RING_MASK));
+ DRM_DEBUG("execbuf with invalid ring: %u\n", user_ring_id);
return -EINVAL;
}
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 7349d9258191..fdc220fc2b18 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -148,14 +148,14 @@ struct i915_ctx_workarounds {
struct intel_engine_cs {
const char *name;
enum intel_ring_id {
- RCS = 0x0,
- VCS,
+ RCS = 0,
BCS,
- VECS,
- VCS2
+ VCS,
+ VCS2, /* Keep instances of the same type engine together. */
+ VECS
} id;
#define I915_NUM_RINGS 5
-#define LAST_USER_RING (VECS + 1)
+#define _VCS(n) (VCS + (n))
u32 mmio_base;
struct drm_device *dev;
struct intel_ringbuffer *buffer;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 15:02 [PATCH] drm/i915: Decouple execbuf uAPI from internal implementation Tvrtko Ursulin
@ 2016-01-14 15:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 15:49 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: intel-gfx
== Summary ==
Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
Test gem_ctx_basic:
pass -> FAIL (bdw-ultra)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-WARN (ilk-hp8440p)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1189/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 0/8] drm/i915: Some more fb offsets[] prep stuff
@ 2016-01-14 13:22 ville.syrjala
2016-01-14 14:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: ville.syrjala @ 2016-01-14 13:22 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Yanked a few more prep patches from my earlier fb offsets[] work [1]. First
few have r-bs, the rest don't.
The last two patches are new. Things just tickled my OCD a bit too much so
had to deal with them.
[1] http://lists.freedesktop.org/archives/intel-gfx/2015-October/078050.html
Ville Syrjälä (8):
drm/i915: Don't leak framebuffer_references if drm_framebuffer_init()
fails
drm/i915: Set i915_ggtt_view_normal type explicitly
drm/i915: Pass the dma_addr_t array as const to rotate_pages()
drm/i915: Rename the rotated gtt view member to 'rotated'
drm/i915: Pass stride to rotate_pages()
drm/i915: Pass rotation_info to intel_rotate_fb_obj_pages()
drm/i915: Make display gtt offsets u32
drm/i915: Standardize on 'cpp' for bytes per pixel
drivers/gpu/drm/i915/i915_gem_gtt.c | 22 +++---
drivers/gpu/drm/i915/i915_gem_gtt.h | 2 +-
drivers/gpu/drm/i915/intel_display.c | 49 +++++++-------
drivers/gpu/drm/i915/intel_drv.h | 12 ++--
drivers/gpu/drm/i915/intel_pm.c | 128 +++++++++++++++++------------------
drivers/gpu/drm/i915/intel_sprite.c | 40 +++++------
6 files changed, 123 insertions(+), 130 deletions(-)
--
2.4.10
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 13:22 [PATCH 0/8] drm/i915: Some more fb offsets[] prep stuff ville.syrjala
@ 2016-01-14 14:49 ` Patchwork
2016-01-14 15:00 ` Ville Syrjälä
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-14 14:49 UTC (permalink / raw)
To: ville.syrjala; +Cc: intel-gfx
== Summary ==
Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
Test gem_ctx_basic:
pass -> FAIL (bdw-ultra)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (bdw-ultra)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1188/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 14:49 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-14 15:00 ` Ville Syrjälä
2016-01-15 12:03 ` Chris Wilson
0 siblings, 1 reply; 123+ messages in thread
From: Ville Syrjälä @ 2016-01-14 15:00 UTC (permalink / raw)
To: Patchwork; +Cc: intel-gfx
On Thu, Jan 14, 2016 at 02:49:45PM -0000, Patchwork wrote:
> == Summary ==
>
> Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
>
> Test gem_ctx_basic:
> pass -> FAIL (bdw-ultra)
"Returncode -15" and nothing more. Weird.
> Test gem_storedw_loop:
> Subgroup basic-render:
> dmesg-warn -> PASS (bdw-nuci7)
> dmesg-warn -> PASS (bdw-ultra)
>
> bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
> bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
> bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
> hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
> ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
> skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>
> Results at /archive/results/CI_IGT_test/Patchwork_1188/
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 15:00 ` Ville Syrjälä
@ 2016-01-15 12:03 ` Chris Wilson
0 siblings, 0 replies; 123+ messages in thread
From: Chris Wilson @ 2016-01-15 12:03 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
On Thu, Jan 14, 2016 at 05:00:02PM +0200, Ville Syrjälä wrote:
> On Thu, Jan 14, 2016 at 02:49:45PM -0000, Patchwork wrote:
> > == Summary ==
> >
> > Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
> >
> > Test gem_ctx_basic:
> > pass -> FAIL (bdw-ultra)
>
> "Returncode -15" and nothing more. Weird.
Strikes me as a bug in the testrunner. That's not one of ours.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/2] drm/i915: Start WM computation from scratch on ILK-BDW
@ 2016-01-14 12:53 ville.syrjala
2016-01-14 14:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: ville.syrjala @ 2016-01-14 12:53 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
ilk_compute_pipe_wm() assumes as zeroed pipe_wm structure when it
starts. We used to pass such a zeroed struct in, but this got broken
when the pipe_wm structure got embedded in the crtc state.
To fix it without too much fuzz, we need to resort to a memset().
Fixes: 4e0963c7663b ("drm/i915: Calculate pipe watermarks into CRTC state (v3)")
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_pm.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 9df9e9a22f3c..e9f4e6e7b736 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -2317,6 +2317,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc *intel_crtc,
return PTR_ERR(cstate);
pipe_wm = &cstate->wm.optimal.ilk;
+ memset(pipe_wm, 0, sizeof(*pipe_wm));
for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
ps = drm_atomic_get_plane_state(state,
--
2.4.10
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 12:53 [PATCH 1/2] drm/i915: Start WM computation from scratch on ILK-BDW ville.syrjala
@ 2016-01-14 14:20 ` Patchwork
2016-01-14 14:29 ` Ville Syrjälä
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-14 14:20 UTC (permalink / raw)
To: ville.syrjala; +Cc: intel-gfx
== Summary ==
Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-yf-tiled:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i7k-2)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:108 dwarn:20 dfail:4 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1187/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 14:20 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-14 14:29 ` Ville Syrjälä
2016-01-19 13:58 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Ville Syrjälä @ 2016-01-14 14:29 UTC (permalink / raw)
To: Patchwork; +Cc: intel-gfx
On Thu, Jan 14, 2016 at 02:20:40PM -0000, Patchwork wrote:
> == Summary ==
>
> Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
>
> Test gem_basic:
> Subgroup create-close:
> pass -> DMESG-WARN (skl-i7k-2)
> Test gem_cpu_reloc:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_ctx_param_basic:
> Subgroup basic:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup invalid-param-set:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup non-root-set-no-zeromap:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup root-set-no-zeromap-disabled:
> pass -> DMESG-WARN (skl-i7k-2)
> Test gem_mmap:
> Subgroup basic:
> pass -> DMESG-WARN (skl-i7k-2)
> Test gem_mmap_gtt:
> Subgroup basic-read:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup basic-write:
> pass -> DMESG-WARN (skl-i7k-2)
> Test gem_storedw_loop:
> Subgroup basic-render:
> dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
> dmesg-warn -> PASS (bdw-nuci7)
> dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> Test kms_addfb_basic:
> Subgroup addfb25-modifier-no-flag:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup addfb25-x-tiled-mismatch:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup addfb25-yf-tiled:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup bad-pitch-1024:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup bad-pitch-63:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup bad-pitch-999:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup clobberred-modifier:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup too-high:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup too-wide:
> pass -> DMESG-WARN (skl-i7k-2)
> Subgroup unused-offsets:
> pass -> DMESG-WARN (skl-i7k-2)
> Test kms_flip:
> Subgroup basic-plain-flip:
> pass -> DMESG-FAIL (skl-i7k-2)
> Test kms_pipe_crc_basic:
> Subgroup nonblocking-crc-pipe-a-frame-sequence:
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-b-frame-sequence:
> pass -> DMESG-FAIL (skl-i7k-2)
> Test prime_self_import:
> Subgroup basic-with_two_bos:
> pass -> DMESG-WARN (skl-i7k-2)
Looks like the GPU died or something on that skl. Can't imagine it being related
to watermark patches.
Unfortunately these didn't cure the recent underrun regressions from
the ilk-ivb machines. So seems like there's something more busted
somewhere.
>
> bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
> bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
> bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
> hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
> ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
> skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
> skl-i7k-2 total:141 pass:108 dwarn:20 dfail:4 fail:0 skip:8
> snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>
> Results at /archive/results/CI_IGT_test/Patchwork_1187/
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 14:29 ` Ville Syrjälä
@ 2016-01-19 13:58 ` Daniel Vetter
2016-01-19 14:09 ` Ville Syrjälä
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-19 13:58 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: intel-gfx
On Thu, Jan 14, 2016 at 04:29:14PM +0200, Ville Syrjälä wrote:
> On Thu, Jan 14, 2016 at 02:20:40PM -0000, Patchwork wrote:
> > == Summary ==
> >
> > Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
> >
> > Test gem_basic:
> > Subgroup create-close:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Test gem_cpu_reloc:
> > Subgroup basic:
> > pass -> DMESG-FAIL (skl-i7k-2)
> > Test gem_ctx_param_basic:
> > Subgroup basic:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup invalid-param-set:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup non-root-set-no-zeromap:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup root-set-no-zeromap-disabled:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Test gem_mmap:
> > Subgroup basic:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Test gem_mmap_gtt:
> > Subgroup basic-read:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup basic-write:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Test gem_storedw_loop:
> > Subgroup basic-render:
> > dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
> > dmesg-warn -> PASS (bdw-nuci7)
> > dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> > Test kms_addfb_basic:
> > Subgroup addfb25-modifier-no-flag:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup addfb25-x-tiled-mismatch:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup addfb25-yf-tiled:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup bad-pitch-1024:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup bad-pitch-63:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup bad-pitch-999:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup clobberred-modifier:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup too-high:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup too-wide:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Subgroup unused-offsets:
> > pass -> DMESG-WARN (skl-i7k-2)
> > Test kms_flip:
> > Subgroup basic-plain-flip:
> > pass -> DMESG-FAIL (skl-i7k-2)
> > Test kms_pipe_crc_basic:
> > Subgroup nonblocking-crc-pipe-a-frame-sequence:
> > pass -> DMESG-FAIL (skl-i7k-2)
> > Subgroup read-crc-pipe-b-frame-sequence:
> > pass -> DMESG-FAIL (skl-i7k-2)
> > Test prime_self_import:
> > Subgroup basic-with_two_bos:
> > pass -> DMESG-WARN (skl-i7k-2)
>
> Looks like the GPU died or something on that skl. Can't imagine it being related
> to watermark patches.
Mika created a bugzilla for this since this isn't the first time this
happened. We have 2 instances of a failure with matching syptoms in normal
-nightly CI runs already:
https://bugs.freedesktop.org/show_bug.cgi?id=93768
In the future if you have a case where an entire machine dies it's useful
to look at the machine history. That shows you the results for the last 50
runs on only that machine for any testcase where results changed. That
helps in figuring out whether there's something wrong with that machine,
or whether there might indeed be trouble with your patch set.
Thanks, Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-19 13:58 ` Daniel Vetter
@ 2016-01-19 14:09 ` Ville Syrjälä
2016-01-19 16:43 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Ville Syrjälä @ 2016-01-19 14:09 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Sarvela, Tomi P, intel-gfx
On Tue, Jan 19, 2016 at 02:58:14PM +0100, Daniel Vetter wrote:
> On Thu, Jan 14, 2016 at 04:29:14PM +0200, Ville Syrjälä wrote:
> > On Thu, Jan 14, 2016 at 02:20:40PM -0000, Patchwork wrote:
> > > == Summary ==
> > >
> > > Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
> > >
> > > Test gem_basic:
> > > Subgroup create-close:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Test gem_cpu_reloc:
> > > Subgroup basic:
> > > pass -> DMESG-FAIL (skl-i7k-2)
> > > Test gem_ctx_param_basic:
> > > Subgroup basic:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup invalid-param-set:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup non-root-set-no-zeromap:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup root-set-no-zeromap-disabled:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Test gem_mmap:
> > > Subgroup basic:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Test gem_mmap_gtt:
> > > Subgroup basic-read:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup basic-write:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Test gem_storedw_loop:
> > > Subgroup basic-render:
> > > dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
> > > dmesg-warn -> PASS (bdw-nuci7)
> > > dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> > > Test kms_addfb_basic:
> > > Subgroup addfb25-modifier-no-flag:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup addfb25-x-tiled-mismatch:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup addfb25-yf-tiled:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup bad-pitch-1024:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup bad-pitch-63:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup bad-pitch-999:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup clobberred-modifier:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup too-high:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup too-wide:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Subgroup unused-offsets:
> > > pass -> DMESG-WARN (skl-i7k-2)
> > > Test kms_flip:
> > > Subgroup basic-plain-flip:
> > > pass -> DMESG-FAIL (skl-i7k-2)
> > > Test kms_pipe_crc_basic:
> > > Subgroup nonblocking-crc-pipe-a-frame-sequence:
> > > pass -> DMESG-FAIL (skl-i7k-2)
> > > Subgroup read-crc-pipe-b-frame-sequence:
> > > pass -> DMESG-FAIL (skl-i7k-2)
> > > Test prime_self_import:
> > > Subgroup basic-with_two_bos:
> > > pass -> DMESG-WARN (skl-i7k-2)
> >
> > Looks like the GPU died or something on that skl. Can't imagine it being related
> > to watermark patches.
>
> Mika created a bugzilla for this since this isn't the first time this
> happened. We have 2 instances of a failure with matching syptoms in normal
> -nightly CI runs already:
>
> https://bugs.freedesktop.org/show_bug.cgi?id=93768
>
> In the future if you have a case where an entire machine dies it's useful
> to look at the machine history. That shows you the results for the last 50
> runs on only that machine for any testcase where results changed. That
> helps in figuring out whether there's something wrong with that machine,
> or whether there might indeed be trouble with your patch set.
Sadly the link to the machine history is busted for patchwork CI results,
so doing that is somewhat more tedious than it should be. Might be a
good idea to fix all the links once and for all. Cc:ing Tomi...
--
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-19 14:09 ` Ville Syrjälä
@ 2016-01-19 16:43 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-19 16:43 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: Sarvela, Tomi P, intel-gfx
On Tue, Jan 19, 2016 at 04:09:48PM +0200, Ville Syrjälä wrote:
> On Tue, Jan 19, 2016 at 02:58:14PM +0100, Daniel Vetter wrote:
> > On Thu, Jan 14, 2016 at 04:29:14PM +0200, Ville Syrjälä wrote:
> > > On Thu, Jan 14, 2016 at 02:20:40PM -0000, Patchwork wrote:
> > > > == Summary ==
> > > >
> > > > Built on 8fb2feecca499d11e104264071ac55e273e23af5 drm-intel-nightly: 2016y-01m-14d-13h-06m-44s UTC integration manifest
> > > >
> > > > Test gem_basic:
> > > > Subgroup create-close:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Test gem_cpu_reloc:
> > > > Subgroup basic:
> > > > pass -> DMESG-FAIL (skl-i7k-2)
> > > > Test gem_ctx_param_basic:
> > > > Subgroup basic:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup invalid-param-set:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup non-root-set-no-zeromap:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup root-set-no-zeromap-disabled:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Test gem_mmap:
> > > > Subgroup basic:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Test gem_mmap_gtt:
> > > > Subgroup basic-read:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup basic-write:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Test gem_storedw_loop:
> > > > Subgroup basic-render:
> > > > dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
> > > > dmesg-warn -> PASS (bdw-nuci7)
> > > > dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> > > > Test kms_addfb_basic:
> > > > Subgroup addfb25-modifier-no-flag:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup addfb25-x-tiled-mismatch:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup addfb25-yf-tiled:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup bad-pitch-1024:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup bad-pitch-63:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup bad-pitch-999:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup clobberred-modifier:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup too-high:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup too-wide:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Subgroup unused-offsets:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > > > Test kms_flip:
> > > > Subgroup basic-plain-flip:
> > > > pass -> DMESG-FAIL (skl-i7k-2)
> > > > Test kms_pipe_crc_basic:
> > > > Subgroup nonblocking-crc-pipe-a-frame-sequence:
> > > > pass -> DMESG-FAIL (skl-i7k-2)
> > > > Subgroup read-crc-pipe-b-frame-sequence:
> > > > pass -> DMESG-FAIL (skl-i7k-2)
> > > > Test prime_self_import:
> > > > Subgroup basic-with_two_bos:
> > > > pass -> DMESG-WARN (skl-i7k-2)
> > >
> > > Looks like the GPU died or something on that skl. Can't imagine it being related
> > > to watermark patches.
> >
> > Mika created a bugzilla for this since this isn't the first time this
> > happened. We have 2 instances of a failure with matching syptoms in normal
> > -nightly CI runs already:
> >
> > https://bugs.freedesktop.org/show_bug.cgi?id=93768
> >
> > In the future if you have a case where an entire machine dies it's useful
> > to look at the machine history. That shows you the results for the last 50
> > runs on only that machine for any testcase where results changed. That
> > helps in figuring out whether there's something wrong with that machine,
> > or whether there might indeed be trouble with your patch set.
>
> Sadly the link to the machine history is busted for patchwork CI results,
> so doing that is somewhat more tedious than it should be. Might be a
> good idea to fix all the links once and for all. Cc:ing Tomi...
Yeah it only works in the master CI overview, both for the long-term view
for machines and for testcases.
I'll paste you the link to the overall howto on the internal wiki page in
private.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Clear pending reset requests during suspend
@ 2016-01-14 10:49 Arun Siluvery
2016-01-14 12:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Arun Siluvery @ 2016-01-14 10:49 UTC (permalink / raw)
To: intel-gfx; +Cc: Mika Kuoppala
Pending reset requests are cleared before suspending, they should be picked up
after resume when new work is submitted.
This is originally added as part of TDR patches for Gen8 from Tomas Elf which
are under review, as suggested by Chris this is extracted as a separate patch
as it can be useful now.
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Arun Siluvery <arun.siluvery@linux.intel.com>
---
drivers/gpu/drm/i915/i915_drv.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index f17a2b0..09ed83e 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -594,6 +594,13 @@ static int i915_drm_suspend(struct drm_device *dev)
goto out;
}
+ /*
+ * Clear any pending reset requests. They should be picked up
+ * after resume when new work is submitted
+ */
+ atomic_clear_mask(I915_RESET_IN_PROGRESS_FLAG,
+ &dev_priv->gpu_error.reset_counter);
+
intel_guc_suspend(dev);
intel_suspend_gt_powersave(dev);
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 10:49 [PATCH] drm/i915: Clear pending reset requests during suspend Arun Siluvery
@ 2016-01-14 12:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 12:20 UTC (permalink / raw)
To: arun.siluvery; +Cc: intel-gfx
== Summary ==
Built on 058740f8fced6851aeda34f366f5330322cd585f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
Test gem_ctx_basic:
pass -> FAIL (bdw-ultra)
bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1184/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v14 0/11] Support for creating/using Stolen memory backed objects
@ 2016-01-14 6:16 ankitprasad.r.sharma
2016-01-14 11:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: ankitprasad.r.sharma @ 2016-01-14 6:16 UTC (permalink / raw)
To: intel-gfx; +Cc: akash.goel, shashidhar.hiremath, Ankitprasad Sharma
From: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
This patch series adds support for creating/using Stolen memory backed
objects.
Despite being a unified memory architecture (UMA) some bits of memory
are more equal than others. In particular we have the thorny issue of
stolen memory, memory stolen from the system by the BIOS and reserved
for igfx use. Stolen memory is required for some functions of the GPU
and display engine, but in general it goes wasted. Whilst we cannot
return it back to the system, we need to find some other method for
utilising it. As we do not support direct access to the physical address
in the stolen region, it behaves like a different class of memory,
closer in kin to local GPU memory. This strongly suggests that we need a
placement model like TTM if we are to fully utilize these discrete
chunks of differing memory.
To add support for creating Stolen memory backed objects, we extend the
drm_i915_gem_create structure, by adding a new flag through which user
can specify the preference to allocate the object from stolen memory,
which if set, an attempt will be made to allocate the object from stolen
memory subject to the availability of free space in the stolen region.
This patch series adds support for clearing buffer objects via CPU/GTT.
This is particularly useful for clearing out the memory from stolen
region, but can also be used for other shmem allocated objects. Currently
being used for buffers allocated in the stolen region. Also adding support
for stealing purgable stolen pages, if we run out of stolen memory when
trying to allocate an object.
v2: Added support for read/write from/to objects not backed by
shmem using the pread/pwrite interface.
Also extended the current get_aperture ioctl to retrieve the
total and available size of the stolen region.
v3: Removed the extended get_aperture ioctl patch 5 (to be submitted as
part of other patch series), addressed comments by Chris about pread/pwrite
for non shmem backed objects.
v4: Rebased to the latest drm-intel-nightly.
v5: Addressed comments, replaced patch 1/4 "Clearing buffers via blitter
engine" by "Clearing buffers via CPU/GTT".
v6: Rebased to the latest drm-intel-nightly, Addressed comments, updated
stolen memory purging logic by maintaining a list for purgable stolen
memory objects, enabled pread/pwrite for all non-shmem backed objects
without tiling restrictions.
v7: Addressed comments, compiler optimization, new patch added for correct
error code propagation to the userspace.
v8: Added a new patch to the series to Migrate stolen objects before
hibernation, as stolen memory is not preserved across hibernation. Added
correct error propagation for shmem as well non-shmem backed object allocation.
v9: Addressed comments, use of insert_page helper function to map object page
by page which can be helpful in low aperture space availability.
v10: Addressed comments, use insert_page for clearing out the stolen memory
v11: Addressed comments, 3 new patches added to support allocation from Stolen
memory
1. Allow use of i915_gem_object_get_dma_address for stolen backed objects
2. Use insert_page for pwrite_fast
3. Fail the execbuff using stolen objects as batchbuffers
v12: Addressed comments, Removed patch "Fail the execbuff using stolen objects
as batchbuffers"
v13: Addressed comments, Added 2 patches to detect Intel RST and disable stolen
for persistent data if RST device found
1. acpi: Export acpi_bus_type
2. drm/i915: Disable use of stolen area by User when Intel RST is present
v14: Addressed comments, Added 2 base patches to the series
1. drm/i915: Add support for mapping an object page by page
2. drm/i915: Introduce i915_gem_object_get_dma_address()
This can be verified using IGT tests: igt/gem_stolen, igt/gem_create
Ankitprasad Sharma (7):
drm/i915: Use insert_page for pwrite_fast
drm/i915: Clearing buffer objects via CPU/GTT
drm/i915: Support for creating Stolen memory backed objects
drm/i915: Propagating correct error codes to the userspace
drm/i915: Support for pread/pwrite from/to non shmem backed objects
acpi: Export acpi_bus_type
drm/i915: Disable use of stolen area by User when Intel RST is present
Chris Wilson (4):
drm/i915: Add support for mapping an object page by page
drm/i915: Introduce i915_gem_object_get_dma_address()
drm/i915: Add support for stealing purgable stolen pages
drm/i915: Migrate stolen objects before hibernation
drivers/acpi/bus.c | 1 +
drivers/char/agp/intel-gtt.c | 9 +
drivers/gpu/drm/i915/i915_debugfs.c | 6 +-
drivers/gpu/drm/i915/i915_dma.c | 3 +
drivers/gpu/drm/i915/i915_drv.c | 17 +-
drivers/gpu/drm/i915/i915_drv.h | 58 ++-
drivers/gpu/drm/i915/i915_gem.c | 576 +++++++++++++++++++++++----
drivers/gpu/drm/i915/i915_gem_batch_pool.c | 4 +-
drivers/gpu/drm/i915/i915_gem_context.c | 4 +-
drivers/gpu/drm/i915/i915_gem_gtt.c | 49 +++
drivers/gpu/drm/i915/i915_gem_gtt.h | 5 +
drivers/gpu/drm/i915/i915_gem_render_state.c | 7 +-
drivers/gpu/drm/i915/i915_gem_stolen.c | 281 +++++++++++--
drivers/gpu/drm/i915/i915_guc_submission.c | 52 ++-
drivers/gpu/drm/i915/intel_acpi.c | 20 +
drivers/gpu/drm/i915/intel_display.c | 5 +-
drivers/gpu/drm/i915/intel_fbdev.c | 12 +-
drivers/gpu/drm/i915/intel_lrc.c | 10 +-
drivers/gpu/drm/i915/intel_overlay.c | 4 +-
drivers/gpu/drm/i915/intel_pm.c | 13 +-
drivers/gpu/drm/i915/intel_ringbuffer.c | 27 +-
include/drm/intel-gtt.h | 3 +
include/uapi/drm/i915_drm.h | 19 +
23 files changed, 1022 insertions(+), 163 deletions(-)
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-14 6:16 [PATCH v14 0/11] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
@ 2016-01-14 11:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 11:20 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Summary ==
Built on 058740f8fced6851aeda34f366f5330322cd585f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
Test gem_pread:
Subgroup basic:
pass -> FAIL (snb-dellxps)
Test gem_pwrite:
Subgroup basic:
pass -> FAIL (snb-dellxps)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
bdw-ultra total:138 pass:132 dwarn:0 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:120 dwarn:5 dfail:0 fail:2 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1182/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 00/20] TDR/watchdog support for gen8
@ 2016-01-13 17:28 Arun Siluvery
2016-01-14 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Arun Siluvery @ 2016-01-13 17:28 UTC (permalink / raw)
To: intel-gfx
These patches were sent previously a while ago[1] so rebased on latest nightly
and resending again for feedback.
This patch series adds support for Per engine resets, watchdog timeout
reset. Please see [1] for detailed description.
[1] http://lists.freedesktop.org/archives/intel-gfx/2015-October/078696.html
Tim Gore (1):
drm/i915: drm/i915 changes to simulated hangs
Tomas Elf (19):
drm/i915: Make i915_gem_reset_ring_status() public
drm/i915: Generalise common GPU engine reset request/unrequest code
drm/i915: TDR / per-engine hang recovery support for gen8.
drm/i915: TDR / per-engine hang detection
drm/i915: Extending i915_gem_check_wedge to check engine reset in
progress
drm/i915: Reinstate hang recovery work queue.
drm/i915: Watchdog timeout: Hang detection integration into error
handler
drm/i915: Watchdog timeout: IRQ handler for gen8
drm/i915: Watchdog timeout: Ringbuffer command emission for gen8
drm/i915: Watchdog timeout: DRM kernel interface enablement
drm/i915: Fake lost context event interrupts through forced CSB
checking.
drm/i915: Debugfs interface for per-engine hang recovery.
drm/i915: Test infrastructure for context state inconsistency
simulation
drm/i915: TDR/watchdog trace points.
drm/i915: Port of Added scheduler support to __wait_request() calls
drm/i915: Fix __i915_wait_request() behaviour during hang detection.
drm/i915: Extended error state with TDR count, watchdog count and
engine reset count
drm/i915: TDR / per-engine hang recovery kernel docs
drm/i915: Enable TDR / per-engine hang recovery
Documentation/DocBook/gpu.tmpl | 476 ++++++++++++++++++
drivers/gpu/drm/i915/i915_debugfs.c | 163 +++++-
drivers/gpu/drm/i915/i915_dma.c | 80 +++
drivers/gpu/drm/i915/i915_drv.c | 328 ++++++++++++
drivers/gpu/drm/i915/i915_drv.h | 90 +++-
drivers/gpu/drm/i915/i915_gem.c | 152 +++++-
drivers/gpu/drm/i915/i915_gpu_error.c | 8 +-
drivers/gpu/drm/i915/i915_irq.c | 263 ++++++++--
drivers/gpu/drm/i915/i915_params.c | 19 +
drivers/gpu/drm/i915/i915_params.h | 2 +
drivers/gpu/drm/i915/i915_reg.h | 9 +
drivers/gpu/drm/i915/i915_trace.h | 354 ++++++++++++-
drivers/gpu/drm/i915/intel_display.c | 5 +-
drivers/gpu/drm/i915/intel_lrc.c | 865 +++++++++++++++++++++++++++++++-
drivers/gpu/drm/i915/intel_lrc.h | 16 +-
drivers/gpu/drm/i915/intel_lrc_tdr.h | 39 ++
drivers/gpu/drm/i915/intel_ringbuffer.c | 90 +++-
drivers/gpu/drm/i915/intel_ringbuffer.h | 95 ++++
drivers/gpu/drm/i915/intel_uncore.c | 197 +++++++-
include/uapi/drm/i915_drm.h | 5 +-
20 files changed, 3134 insertions(+), 122 deletions(-)
create mode 100644 drivers/gpu/drm/i915/intel_lrc_tdr.h
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-13 17:28 [PATCH 00/20] TDR/watchdog support for gen8 Arun Siluvery
@ 2016-01-14 8:30 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-14 8:30 UTC (permalink / raw)
To: Tomas Elf; +Cc: intel-gfx
== Summary ==
HEAD is now at 058740f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
Applying: drm/i915: Make i915_gem_reset_ring_status() public
Applying: drm/i915: Generalise common GPU engine reset request/unrequest code
Applying: drm/i915: TDR / per-engine hang recovery support for gen8.
Using index info to reconstruct a base tree...
M drivers/gpu/drm/i915/i915_dma.c
M drivers/gpu/drm/i915/i915_irq.c
M drivers/gpu/drm/i915/intel_lrc.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_lrc.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_lrc.c
Auto-merging drivers/gpu/drm/i915/i915_irq.c
Auto-merging drivers/gpu/drm/i915/i915_dma.c
Patch failed at 0003 drm/i915: TDR / per-engine hang recovery support for gen8.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v10] drm/i915: Extend LRC pinning to cover GPU context writeback
@ 2016-01-13 16:19 Nick Hoath
2016-01-14 7:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Nick Hoath @ 2016-01-13 16:19 UTC (permalink / raw)
To: intel-gfx; +Cc: Daniel Vetter
Use the first retired request on a new context to unpin
the old context. This ensures that the hw context remains
bound until it has been written back to by the GPU.
Now that the context is pinned until later in the request/context
lifecycle, it no longer needs to be pinned from context_queue to
retire_requests.
This fixes an issue with GuC submission where the GPU might not
have finished writing back the context before it is unpinned. This
results in a GPU hang.
v2: Moved the new pin to cover GuC submission (Alex Dai)
Moved the new unpin to request_retire to fix coverage leak
v3: Added switch to default context if freeing a still pinned
context just in case the hw was actually still using it
v4: Unwrapped context unpin to allow calling without a request
v5: Only create a switch to idle context if the ring doesn't
already have a request pending on it (Alex Dai)
Rename unsaved to dirty to avoid double negatives (Dave Gordon)
Changed _no_req postfix to __ prefix for consistency (Dave Gordon)
Split out per engine cleanup from context_free as it
was getting unwieldy
Corrected locking (Dave Gordon)
v6: Removed some bikeshedding (Mika Kuoppala)
Added explanation of the GuC hang that this fixes (Daniel Vetter)
v7: Removed extra per request pinning from ring reset code (Alex Dai)
Added forced ring unpin/clean in error case in context free (Alex Dai)
v8: Renamed lrc specific last_context to lrc_last_context as there
were some reset cases where the codepaths leaked (Mika Kuoppala)
NULL'd last_context in reset case - there was a pointer leak
if someone did reset->close context.
v9: Rebase over "Fix context/engine cleanup order"
v10: Rebase over nightly, remove WARN_ON which caused the
dependency on dev.
Signed-off-by: Nick Hoath <nicholas.hoath@intel.com>
Issue: VIZ-4277
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: David Gordon <david.s.gordon@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Alex Dai <yu.dai@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_gem.c | 3 +
drivers/gpu/drm/i915/intel_lrc.c | 138 ++++++++++++++++++++++++++------
drivers/gpu/drm/i915/intel_lrc.h | 1 +
drivers/gpu/drm/i915/intel_ringbuffer.h | 1 +
5 files changed, 121 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 104bd18..d28e10a 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -882,6 +882,7 @@ struct intel_context {
struct {
struct drm_i915_gem_object *state;
struct intel_ringbuffer *ringbuf;
+ bool dirty;
int pin_count;
} engine[I915_NUM_RINGS];
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index ddc21d4..7b79405 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1413,6 +1413,9 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
{
trace_i915_gem_request_retire(request);
+ if (i915.enable_execlists)
+ intel_lr_context_complete_check(request);
+
/* We know the GPU must have read the request to have
* sent us the seqno + interrupt, so use the position
* of tail of the request to update the last known position
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 5027699..b661058 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -585,9 +585,6 @@ static int execlists_context_queue(struct drm_i915_gem_request *request)
struct drm_i915_gem_request *cursor;
int num_elements = 0;
- if (request->ctx != ring->default_context)
- intel_lr_context_pin(request);
-
i915_gem_request_reference(request);
spin_lock_irq(&ring->execlist_lock);
@@ -763,6 +760,13 @@ intel_logical_ring_advance_and_submit(struct drm_i915_gem_request *request)
if (intel_ring_stopped(ring))
return;
+ if (request->ctx != ring->default_context) {
+ if (!request->ctx->engine[ring->id].dirty) {
+ intel_lr_context_pin(request);
+ request->ctx->engine[ring->id].dirty = true;
+ }
+ }
+
if (dev_priv->guc.execbuf_client)
i915_guc_submit(dev_priv->guc.execbuf_client, request);
else
@@ -989,12 +993,6 @@ void intel_execlists_retire_requests(struct intel_engine_cs *ring)
spin_unlock_irq(&ring->execlist_lock);
list_for_each_entry_safe(req, tmp, &retired_list, execlist_link) {
- struct intel_context *ctx = req->ctx;
- struct drm_i915_gem_object *ctx_obj =
- ctx->engine[ring->id].state;
-
- if (ctx_obj && (ctx != ring->default_context))
- intel_lr_context_unpin(req);
list_del(&req->execlist_link);
i915_gem_request_unreference(req);
}
@@ -1089,21 +1087,39 @@ reset_pin_count:
return ret;
}
-void intel_lr_context_unpin(struct drm_i915_gem_request *rq)
+static void __intel_lr_context_unpin(struct intel_engine_cs *ring,
+ struct intel_context *ctx)
{
- struct intel_engine_cs *ring = rq->ring;
- struct drm_i915_gem_object *ctx_obj = rq->ctx->engine[ring->id].state;
- struct intel_ringbuffer *ringbuf = rq->ringbuf;
-
+ struct drm_i915_gem_object *ctx_obj = ctx->engine[ring->id].state;
+ struct intel_ringbuffer *ringbuf = ctx->engine[ring->id].ringbuf;
if (ctx_obj) {
WARN_ON(!mutex_is_locked(&ring->dev->struct_mutex));
- if (--rq->ctx->engine[ring->id].pin_count == 0) {
+ if (--ctx->engine[ring->id].pin_count == 0) {
intel_unpin_ringbuffer_obj(ringbuf);
i915_gem_object_ggtt_unpin(ctx_obj);
}
}
}
+void intel_lr_context_unpin(struct drm_i915_gem_request *rq)
+{
+ __intel_lr_context_unpin(rq->ring, rq->ctx);
+}
+
+void intel_lr_context_complete_check(struct drm_i915_gem_request *req)
+{
+ struct intel_engine_cs *ring = req->ring;
+
+ if (ring->lrc_last_context && ring->lrc_last_context != req->ctx &&
+ ring->lrc_last_context->engine[ring->id].dirty) {
+ __intel_lr_context_unpin(
+ ring,
+ ring->lrc_last_context);
+ ring->lrc_last_context->engine[ring->id].dirty = false;
+ }
+ ring->lrc_last_context = req->ctx;
+}
+
static int intel_logical_ring_workarounds_emit(struct drm_i915_gem_request *req)
{
int ret, i;
@@ -2347,6 +2363,74 @@ populate_lr_context(struct intel_context *ctx, struct drm_i915_gem_object *ctx_o
}
/**
+ * intel_lr_context_clean_ring() - clean the ring specific parts of an LRC
+ * @ctx: the LR context being freed.
+ * @ring: the engine being cleaned
+ * @ctx_obj: the hw context being unreferenced
+ * @ringbuf: the ringbuf being freed
+ *
+ * Take care of cleaning up the per-engine backing
+ * objects and the logical ringbuffer.
+ */
+static void
+intel_lr_context_clean_ring(struct intel_context *ctx,
+ struct intel_engine_cs *ring,
+ struct drm_i915_gem_object *ctx_obj,
+ struct intel_ringbuffer *ringbuf)
+{
+ int ret;
+
+ if (ctx == ring->default_context) {
+ intel_unpin_ringbuffer_obj(ringbuf);
+ i915_gem_object_ggtt_unpin(ctx_obj);
+ }
+
+ if (ctx->engine[ring->id].dirty) {
+ struct drm_i915_gem_request *req = NULL;
+
+ /**
+ * If there is already a request pending on
+ * this ring, wait for that to complete,
+ * otherwise create a switch to idle request
+ */
+ if (list_empty(&ring->request_list)) {
+ int ret;
+
+ ret = i915_gem_request_alloc(
+ ring,
+ ring->default_context,
+ &req);
+ if (!ret)
+ i915_add_request(req);
+ else
+ DRM_DEBUG("Failed to ensure context saved");
+ } else {
+ req = list_first_entry(
+ &ring->request_list,
+ typeof(*req), list);
+ }
+ if (req) {
+ ret = i915_wait_request(req);
+ if (ret != 0) {
+ /**
+ * If we get here, there's probably been a ring
+ * reset, so we just clean up the dirty flag.&
+ * pin count.
+ */
+ ctx->engine[ring->id].dirty = false;
+ __intel_lr_context_unpin(
+ ring,
+ ctx);
+ }
+ }
+ }
+
+ WARN_ON(ctx->engine[ring->id].pin_count);
+ intel_ringbuffer_free(ringbuf);
+ drm_gem_object_unreference(&ctx_obj->base);
+}
+
+/**
* intel_lr_context_free() - free the LRC specific bits of a context
* @ctx: the LR context to free.
*
@@ -2358,7 +2444,7 @@ void intel_lr_context_free(struct intel_context *ctx)
{
int i;
- for (i = 0; i < I915_NUM_RINGS; i++) {
+ for (i = 0; i < I915_NUM_RINGS; ++i) {
struct drm_i915_gem_object *ctx_obj = ctx->engine[i].state;
if (ctx_obj) {
@@ -2366,13 +2452,10 @@ void intel_lr_context_free(struct intel_context *ctx)
ctx->engine[i].ringbuf;
struct intel_engine_cs *ring = ringbuf->ring;
- if (ctx == ring->default_context) {
- intel_unpin_ringbuffer_obj(ringbuf);
- i915_gem_object_ggtt_unpin(ctx_obj);
- }
- WARN_ON(ctx->engine[ring->id].pin_count);
- intel_ringbuffer_free(ringbuf);
- drm_gem_object_unreference(&ctx_obj->base);
+ intel_lr_context_clean_ring(ctx,
+ ring,
+ ctx_obj,
+ ringbuf);
}
}
}
@@ -2548,5 +2631,14 @@ void intel_lr_context_reset(struct drm_device *dev,
ringbuf->head = 0;
ringbuf->tail = 0;
+
+ if (ctx->engine[ring->id].dirty) {
+ __intel_lr_context_unpin(
+ ring,
+ ctx);
+ ctx->engine[ring->id].dirty = false;
+ if (ring->lrc_last_context == ctx)
+ ring->lrc_last_context = NULL;
+ }
}
}
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index de41ad6..48690f79 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -106,6 +106,7 @@ void intel_lr_context_reset(struct drm_device *dev,
struct intel_context *ctx);
uint64_t intel_lr_context_descriptor(struct intel_context *ctx,
struct intel_engine_cs *ring);
+void intel_lr_context_complete_check(struct drm_i915_gem_request *req);
/* Execlists */
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists);
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 7349d92..fb1df83 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -276,6 +276,7 @@ struct intel_engine_cs {
u32 flush_domains);
int (*emit_bb_start)(struct drm_i915_gem_request *req,
u64 offset, unsigned dispatch_flags);
+ struct intel_context *lrc_last_context;
/**
* List of objects currently involved in rendering from the
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-13 16:19 [PATCH v10] drm/i915: Extend LRC pinning to cover GPU context writeback Nick Hoath
@ 2016-01-14 7:20 ` Patchwork
2016-01-14 11:31 ` Nick Hoath
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-14 7:20 UTC (permalink / raw)
To: Nick Hoath; +Cc: intel-gfx
== Summary ==
Built on 058740f8fced6851aeda34f366f5330322cd585f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
Test gem_ctx_basic:
pass -> FAIL (bdw-ultra)
Test gem_ctx_param_basic:
Subgroup non-root-set:
pass -> DMESG-WARN (bsw-nuc-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> SKIP (bsw-nuc-2)
dmesg-warn -> PASS (ilk-hp8440p)
bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
bsw-nuc-2 total:141 pass:113 dwarn:3 dfail:0 fail:0 skip:25
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1174/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 7:20 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-14 11:31 ` Nick Hoath
2016-01-19 9:08 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Nick Hoath @ 2016-01-14 11:31 UTC (permalink / raw)
To: Patchwork; +Cc: intel-gfx@lists.freedesktop.org
On 14/01/2016 07:20, Patchwork wrote:
> == Summary ==
>
> Built on 058740f8fced6851aeda34f366f5330322cd585f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
>
> Test gem_ctx_basic:
> pass -> FAIL (bdw-ultra)
Test failed to load - not patch related
> Test gem_ctx_param_basic:
> Subgroup non-root-set:
> pass -> DMESG-WARN (bsw-nuc-2)
gem driver allocated a poisoned slab - not patch related
> Test kms_flip:
> Subgroup basic-flip-vs-dpms:
> pass -> SKIP (bsw-nuc-2)
test reqs not met - not patch related
> dmesg-warn -> PASS (ilk-hp8440p)
warn to PASS
>
> bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
> bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
> bsw-nuc-2 total:141 pass:113 dwarn:3 dfail:0 fail:0 skip:25
> hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
> ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
> skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>
> Results at /archive/results/CI_IGT_test/Patchwork_1174/
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-14 11:31 ` Nick Hoath
@ 2016-01-19 9:08 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-19 9:08 UTC (permalink / raw)
To: Nick Hoath; +Cc: intel-gfx@lists.freedesktop.org
On Thu, Jan 14, 2016 at 11:31:07AM +0000, Nick Hoath wrote:
> On 14/01/2016 07:20, Patchwork wrote:
> >== Summary ==
Our BKM is to link to bugzilla entries to make sure these are all real
failures which are tracked already. Otherwise stuff falls through the
cracks.
> >
> >Built on 058740f8fced6851aeda34f366f5330322cd585f drm-intel-nightly: 2016y-01m-13d-17h-07m-44s UTC integration manifest
> >
> >Test gem_ctx_basic:
> > pass -> FAIL (bdw-ultra)
>
> Test failed to load - not patch related
>
> >Test gem_ctx_param_basic:
> > Subgroup non-root-set:
> > pass -> DMESG-WARN (bsw-nuc-2)
>
> gem driver allocated a poisoned slab - not patch related
>
> >Test kms_flip:
> > Subgroup basic-flip-vs-dpms:
> > pass -> SKIP (bsw-nuc-2)
>
> test reqs not met - not patch related
basic-flip-vs-dpms MUST always work. Well except if you have a chip with
GT only where the display is fused off. I expect more serious analysis
instead of casually shrugging issues away as "not my problem".
Same sloppy analysis with the others imo.
-Daniel
>
> > dmesg-warn -> PASS (ilk-hp8440p)
>
> warn to PASS
>
> >
> >bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
> >bdw-ultra total:138 pass:131 dwarn:0 dfail:0 fail:1 skip:6
> >bsw-nuc-2 total:141 pass:113 dwarn:3 dfail:0 fail:0 skip:25
> >hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> >hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> >ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
> >ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
> >skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> >skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> >snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> >snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
> >
> >Results at /archive/results/CI_IGT_test/Patchwork_1174/
> >
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/dp: fall back to 18 bpp when sink capability is unknown
@ 2016-01-13 14:35 Jani Nikula
2016-01-13 15:13 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Jani Nikula @ 2016-01-13 14:35 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula
Per DP spec, the source device should fall back to 18 bpp, VESA range
RGB when the sink capability is unknown. Fix the color depth
clamping. 18 bpp color depth should ensure full color range in automatic
mode.
The clamping has been HDMI specific since its introduction in
commit 996a2239f93b03c5972923f04b097f65565c5bed
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Fri Apr 19 11:24:34 2013 +0200
drm/i915: Disable high-bpc on pre-1.4 EDID screens
Cc: stable@vger.kernel.org
Reported-by: Dihan Wickremasuriya <nayomal@gmail.com>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=105331
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 07ca19b0ec17..6eaecd9385ab 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12171,11 +12171,21 @@ connected_sink_compute_bpp(struct intel_connector *connector,
pipe_config->pipe_bpp = connector->base.display_info.bpc*3;
}
- /* Clamp bpp to 8 on screens without EDID 1.4 */
- if (connector->base.display_info.bpc == 0 && bpp > 24) {
- DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
- bpp);
- pipe_config->pipe_bpp = 24;
+ /* Clamp bpp to default limit on screens without EDID 1.4 */
+ if (connector->base.display_info.bpc == 0) {
+ int type = connector->base.connector_type;
+ int clamp_bpp = 24;
+
+ /* Fall back to 18 bpp when DP sink capability is unknown. */
+ if (type == DRM_MODE_CONNECTOR_DisplayPort ||
+ type == DRM_MODE_CONNECTOR_eDP)
+ clamp_bpp = 18;
+
+ if (bpp > clamp_bpp) {
+ DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of %d\n",
+ bpp, clamp_bpp);
+ pipe_config->pipe_bpp = clamp_bpp;
+ }
}
}
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-13 14:35 [PATCH] drm/i915/dp: fall back to 18 bpp when sink capability is unknown Jani Nikula
@ 2016-01-13 15:13 ` Patchwork
2016-01-13 16:17 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-13 15:13 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Summary ==
Built on 4d09810b01441f9124c072a866f608b748f92f6c drm-intel-nightly: 2016y-01m-13d-12h-32m-08s UTC integration manifest
Test gem_ctx_basic:
pass -> FAIL (hsw-gt2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-c:
pass -> DMESG-WARN (bdw-ultra)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:136 dwarn:0 dfail:0 fail:1 skip:4
hsw-xps12 total:138 pass:133 dwarn:1 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1170/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-13 15:13 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-13 16:17 ` Daniel Vetter
2016-01-13 18:03 ` Chris Wilson
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-13 16:17 UTC (permalink / raw)
To: Patchwork; +Cc: Jani Nikula, intel-gfx
On Wed, Jan 13, 2016 at 03:13:40PM -0000, Patchwork wrote:
> == Summary ==
>
> Built on 4d09810b01441f9124c072a866f608b748f92f6c drm-intel-nightly: 2016y-01m-13d-12h-32m-08s UTC integration manifest
>
> Test gem_ctx_basic:
> pass -> FAIL (hsw-gt2)
This seems to be a complete fluke. I looked at detailed results and
there's simply no output. Long-term history doesn't show a failure either.
I think we can shrug this one off (for now at least).
> Test gem_storedw_loop:
> Subgroup basic-render:
> dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> Test kms_pipe_crc_basic:
> Subgroup read-crc-pipe-c:
> pass -> DMESG-WARN (bdw-ultra)
https://bugs.freedesktop.org/show_bug.cgi?id=93699
So looks good, I'll apply the patch.
-Daniel
>
> bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
> bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
> bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
> hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:141 pass:136 dwarn:0 dfail:0 fail:1 skip:4
> hsw-xps12 total:138 pass:133 dwarn:1 dfail:0 fail:0 skip:4
> ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
> ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
> skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
> skl-i7k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
> snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>
> Results at /archive/results/CI_IGT_test/Patchwork_1170/
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-13 16:17 ` Daniel Vetter
@ 2016-01-13 18:03 ` Chris Wilson
0 siblings, 0 replies; 123+ messages in thread
From: Chris Wilson @ 2016-01-13 18:03 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Jani Nikula, intel-gfx
On Wed, Jan 13, 2016 at 05:17:03PM +0100, Daniel Vetter wrote:
> On Wed, Jan 13, 2016 at 03:13:40PM -0000, Patchwork wrote:
> > == Summary ==
> >
> > Built on 4d09810b01441f9124c072a866f608b748f92f6c drm-intel-nightly: 2016y-01m-13d-12h-32m-08s UTC integration manifest
> >
> > Test gem_ctx_basic:
> > pass -> FAIL (hsw-gt2)
>
> This seems to be a complete fluke. I looked at detailed results and
> there's simply no output. Long-term history doesn't show a failure either.
>
> I think we can shrug this one off (for now at least).
>
> > Test gem_storedw_loop:
> > Subgroup basic-render:
> > dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
> > Test kms_pipe_crc_basic:
> > Subgroup read-crc-pipe-c:
> > pass -> DMESG-WARN (bdw-ultra)
>
> https://bugs.freedesktop.org/show_bug.cgi?id=93699
>
> So looks good, I'll apply the patch.
It still does a blocking context-close when all it need do is keep the
last-context pinned until replaced.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Fix for reserved space WARN_ON when ring begin fails
@ 2016-01-13 12:52 John.C.Harrison
2016-01-13 13:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: John.C.Harrison @ 2016-01-13 12:52 UTC (permalink / raw)
To: Intel-GFX
From: John Harrison <John.C.Harrison@Intel.com>
The reserved space code was not cleaning up properly in the case where
the intel_ring_begin() call failed. This led to WARN_ONs firing about
a double reserve call when running the gem_reset_stats IGT test.
Signed-off-by: John Harrison <John.C.Harrison@Intel.com>
---
drivers/gpu/drm/i915/intel_lrc.c | 8 +++++++-
drivers/gpu/drm/i915/intel_ringbuffer.c | 8 +++++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 06180dc..7dcc299 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -835,6 +835,8 @@ int intel_logical_ring_begin(struct drm_i915_gem_request *req, int num_dwords)
int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request)
{
+ int ret;
+
/*
* The first call merely notes the reserve request and is common for
* all back ends. The subsequent localised _begin() call actually
@@ -845,7 +847,11 @@ int intel_logical_ring_reserve_space(struct drm_i915_gem_request *request)
*/
intel_ring_reserved_space_reserve(request->ringbuf, MIN_SPACE_FOR_ADD_REQUEST);
- return intel_logical_ring_begin(request, 0);
+ ret = intel_logical_ring_begin(request, 0);
+ if (ret)
+ intel_ring_reserved_space_cancel(request->ringbuf);
+
+ return ret;
}
/**
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index c9b081f..f1d3a4a 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2296,6 +2296,8 @@ int intel_ring_alloc_request_extras(struct drm_i915_gem_request *request)
int intel_ring_reserve_space(struct drm_i915_gem_request *request)
{
+ int ret;
+
/*
* The first call merely notes the reserve request and is common for
* all back ends. The subsequent localised _begin() call actually
@@ -2306,7 +2308,11 @@ int intel_ring_reserve_space(struct drm_i915_gem_request *request)
*/
intel_ring_reserved_space_reserve(request->ringbuf, MIN_SPACE_FOR_ADD_REQUEST);
- return intel_ring_begin(request, 0);
+ ret = intel_ring_begin(request, 0);
+ if (ret)
+ intel_ring_reserved_space_cancel(request->ringbuf);
+
+ return ret;
}
void intel_ring_reserved_space_reserve(struct intel_ringbuffer *ringbuf, int size)
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-13 12:52 [PATCH] drm/i915: Fix for reserved space WARN_ON when ring begin fails John.C.Harrison
@ 2016-01-13 13:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-13 13:49 UTC (permalink / raw)
To: John.C.Harrison; +Cc: intel-gfx
== Summary ==
Built on 4d09810b01441f9124c072a866f608b748f92f6c drm-intel-nightly: 2016y-01m-13d-12h-32m-08s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
pass -> DMESG-WARN (bdw-nuci7)
pass -> DMESG-WARN (bdw-ultra)
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup addfb25-yf-tiled:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i5k-2)
Test kms_flip:
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i5k-2)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (ilk-hp8440p)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i5k-2)
bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:99 dwarn:5 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:107 dwarn:21 dfail:4 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1165/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/1] drm/i915: Reorder shadow registers on gen8 for faster lookup
@ 2016-01-12 15:28 Mika Kuoppala
2016-01-12 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-12 15:28 UTC (permalink / raw)
To: intel-gfx; +Cc: miku
The most common thing on normal operation is ring tail
pointer update. Put it first in the shadow register list for
gen8, like we do with gen9.
Also order the checks inside reg write paths so that
if register is shadowed, no additional checks need to be made.
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
drivers/gpu/drm/i915/intel_uncore.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index c3c13dc929cb..7a464a1b9d1e 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -932,13 +932,13 @@ hsw_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool t
}
static const i915_reg_t gen8_shadowed_regs[] = {
- FORCEWAKE_MT,
- GEN6_RPNSWREQ,
- GEN6_RC_VIDEO_FREQ,
RING_TAIL(RENDER_RING_BASE),
RING_TAIL(GEN6_BSD_RING_BASE),
RING_TAIL(VEBOX_RING_BASE),
RING_TAIL(BLT_RING_BASE),
+ FORCEWAKE_MT,
+ GEN6_RPNSWREQ,
+ GEN6_RC_VIDEO_FREQ,
/* TODO: Other registers are not yet used */
};
@@ -957,7 +957,7 @@ static bool is_gen8_shadowed(struct drm_i915_private *dev_priv,
static void \
gen8_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
GEN6_WRITE_HEADER; \
- if (NEEDS_FORCE_WAKE(offset) && !is_gen8_shadowed(dev_priv, reg)) \
+ if (!is_gen8_shadowed(dev_priv, reg) && NEEDS_FORCE_WAKE(offset)) \
__force_wake_get(dev_priv, FORCEWAKE_RENDER); \
__raw_i915_write##x(dev_priv, reg, val); \
GEN6_WRITE_FOOTER; \
@@ -968,8 +968,8 @@ static void \
chv_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
enum forcewake_domains fw_engine = 0; \
GEN6_WRITE_HEADER; \
- if (!NEEDS_FORCE_WAKE(offset) || \
- is_gen8_shadowed(dev_priv, reg)) \
+ if (is_gen8_shadowed(dev_priv, reg) || \
+ !NEEDS_FORCE_WAKE(offset)) \
fw_engine = 0; \
else if (FORCEWAKE_CHV_RENDER_RANGE_OFFSET(offset)) \
fw_engine = FORCEWAKE_RENDER; \
@@ -1013,8 +1013,8 @@ gen9_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, \
bool trace) { \
enum forcewake_domains fw_engine; \
GEN6_WRITE_HEADER; \
- if (!SKL_NEEDS_FORCE_WAKE(offset) || \
- is_gen9_shadowed(dev_priv, reg)) \
+ if (is_gen9_shadowed(dev_priv, reg) || \
+ !SKL_NEEDS_FORCE_WAKE(offset)) \
fw_engine = 0; \
else if (FORCEWAKE_GEN9_RENDER_RANGE_OFFSET(offset)) \
fw_engine = FORCEWAKE_RENDER; \
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-12 15:28 [PATCH 1/1] drm/i915: Reorder shadow registers on gen8 for faster lookup Mika Kuoppala
@ 2016-01-12 16:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-12 16:20 UTC (permalink / raw)
To: Mika Kuoppala; +Cc: intel-gfx
== Summary ==
Built on 37f6c2ae666fbba9eff4355115252b8b0fd43050 drm-intel-nightly: 2016y-01m-12d-14h-25m-44s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-nuci7)
pass -> DMESG-WARN (bdw-ultra)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a-frame-sequence:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-c:
dmesg-warn -> PASS (bdw-ultra)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:123 dwarn:3 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-xps12 total:138 pass:133 dwarn:1 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:107 dwarn:26 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:107 dwarn:26 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
HANGED hsw-gt2 in igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a
Results at /archive/results/CI_IGT_test/Patchwork_1152/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 00/22] drm_event cleanup, round 2
@ 2016-01-11 21:40 Daniel Vetter
2016-01-12 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-11 21:40 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development
Hi all,
Mostly just small changes from review feedback (plus a few misplaced hunks,
silly me). Plus an attempt at better kerneldoc to explain how this works. Since
that caused questions both from Thomas and Laurent let me explain things also
here:
Currently anyone using drm_events (vblank code, atomic/legacy flips, drivers
like exynos) need to handle event setup, sending to the drm file and handling
when the drm file disappears themselves. This patch series provides functions to
encapsulate all these steps. Furthermore the file closing is handled
differently: Events are no longer completely destroyed in preclose hooks like
all current users do, but instead they're just unlinked from the file. The new
drm_send_event can still be called, but instead of transmitting the event to the
file it'll destroy it right away.
This means that when the drm file disappears it's entirely transparent to
drivers, and we can remove all the special tracking and cleanup code around
preclose functions.
The other consequence is that it's opt-in - drivers are still free to remove
events explicitly when the file disappears, it's just needless code. Which means
the patch series can be split up really nicely into core parts + driver patches.
The only patch I didn't split up in this fashion is the one that creates
drm_send_event - it's imo easier to review this way, and the driver changes are
really simple.
Cheers, Daniel
Daniel Vetter (22):
drm: kerneldoc for drm_fops.c
drm: Add functions to setup/tear down drm_events.
drm/exynos: Use the new event init/free functions
drm/vmwgfx: Use the new event init/free functions
drm: Create drm_send_event helpers
drm/fsl: Remove preclose hook
drm/armada: Remove NULL open/pre/postclose hooks
drm/gma500: Remove empty preclose hook
drm: Clean up pending events in the core
drm: Nuke vblank event file cleanup code
drm/i915: Nuke intel_modeset_preclose
drm/atmel: Nuke preclose
drm/exynos: Remove event cancelling from postclose
drm/imx: Unconfuse preclose logic
drm/msm: Nuke preclose hooks
drm/omap: Nuke close hooks
drm/rcar: Nuke preclose hook
drm/shmob: Nuke preclose hook
drm/tegra: Stop cancelling page flip events
drm/tilcdc: Nuke preclose hook
drm/vc4: Nuke preclose hook
drm/vmwgfx: Nuke preclose hook
Documentation/DocBook/gpu.tmpl | 48 +----
drivers/gpu/drm/armada/armada_drv.c | 3 -
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 18 --
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 10 -
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 3 -
drivers/gpu/drm/drm_atomic.c | 44 +---
drivers/gpu/drm/drm_crtc.c | 36 +---
drivers/gpu/drm/drm_fops.c | 271 ++++++++++++++++++++++---
drivers/gpu/drm/drm_irq.c | 7 +-
drivers/gpu/drm/exynos/exynos_drm_drv.c | 14 --
drivers/gpu/drm/exynos/exynos_drm_g2d.c | 36 +---
drivers/gpu/drm/exynos/exynos_drm_ipp.c | 28 +--
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 5 -
drivers/gpu/drm/gma500/psb_drv.c | 9 -
drivers/gpu/drm/i915/i915_dma.c | 2 -
drivers/gpu/drm/i915/intel_display.c | 21 --
drivers/gpu/drm/i915/intel_drv.h | 1 -
drivers/gpu/drm/imx/imx-drm-core.c | 13 --
drivers/gpu/drm/imx/ipuv3-crtc.c | 4 -
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 7 -
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 11 -
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 6 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 11 -
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 1 -
drivers/gpu/drm/omapdrm/omap_crtc.c | 13 +-
drivers/gpu/drm/omapdrm/omap_drv.c | 41 ----
drivers/gpu/drm/omapdrm/omap_drv.h | 1 -
drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 20 --
drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 2 -
drivers/gpu/drm/rcar-du/rcar_du_drv.c | 10 -
drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 20 --
drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 2 -
drivers/gpu/drm/shmobile/shmob_drm_drv.c | 8 -
drivers/gpu/drm/tegra/dc.c | 17 --
drivers/gpu/drm/tegra/drm.c | 3 -
drivers/gpu/drm/tegra/drm.h | 1 -
drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 20 --
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 -
drivers/gpu/drm/tilcdc/tilcdc_drv.h | 1 -
drivers/gpu/drm/vc4/vc4_crtc.c | 20 --
drivers/gpu/drm/vc4/vc4_drv.c | 10 -
drivers/gpu/drm/vc4/vc4_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 11 -
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 -
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 87 +-------
drivers/gpu/drm/vmwgfx/vmwgfx_fence.h | 2 -
include/drm/drmP.h | 26 ++-
48 files changed, 312 insertions(+), 623 deletions(-)
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v2 0/9] Kill off intel_crtc->atomic!
@ 2016-01-11 12:27 Maarten Lankhorst
2016-01-11 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 14:30 ` Patchwork
0 siblings, 2 replies; 123+ messages in thread
From: Maarten Lankhorst @ 2016-01-11 12:27 UTC (permalink / raw)
To: intel-gfx
I've fixed some patches with feedback from review.
It's about time that intel_crtc->atomic dies. It was useful
with the transitional helpers, but can be removed safely now.
Maarten Lankhorst (9):
drm/i915: Unify power domain handling.
drm/i915: Kill off intel_crtc->atomic.wait_vblank, v3.
drm/i915: Remove intel_crtc->atomic.disable_ips.
drm/i915: Remove atomic.pre_disable_primary.
drm/i915: Remove update_sprite_watermarks.
drm/i915: Remove some post-commit members from intel_crtc->atomic, v2.
drm/i915: Nuke fbc members from intel_crtc->atomic, v2.
drm/i915: Do not compute watermarks on a noop.
drm/i915: Remove vblank wait from hsw_enable_ips.
drivers/gpu/drm/i915/intel_atomic.c | 2 +
drivers/gpu/drm/i915/intel_display.c | 291 +++++++++++++++++------------------
drivers/gpu/drm/i915/intel_drv.h | 39 ++---
drivers/gpu/drm/i915/intel_fbc.c | 20 ++-
drivers/gpu/drm/i915/intel_pm.c | 59 ++++---
5 files changed, 214 insertions(+), 197 deletions(-)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-11 12:27 [PATCH v2 0/9] Kill off intel_crtc->atomic! Maarten Lankhorst
@ 2016-01-11 12:49 ` Patchwork
2016-01-11 14:30 ` Patchwork
1 sibling, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 12:49 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test core_auth:
Subgroup basic-auth:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test core_prop_blob:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test drv_getparams_basic:
Subgroup basic-eu-total:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-subslice-total:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_basic:
Subgroup bad-close:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup create-close:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_cpu_reloc:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_ctx_create:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-default:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup invalid-ctx-get:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup invalid-ctx-set:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup invalid-param-set:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup non-root-set:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup non-root-set-no-zeromap:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup root-set-no-zeromap-disabled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup root-set-no-zeromap-enabled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_flink_basic:
Subgroup bad-open:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_linear_blits:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_mmap:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_mmap_gtt:
Subgroup basic-copy:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-read:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-read-write-distinct:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-small-bo:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-small-bo-tiledx:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-small-bo-tiledy:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-small-copy:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-small-copy-xy:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-write:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-write-gtt:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-write-no-prefault:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-write-read-distinct:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_pwrite:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_render_linear_blits:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_render_tiled_blits:
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test gem_storedw_loop:
Subgroup basic-blt:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-bsd:
pass -> SKIP (bdw-ultra)
Subgroup basic-render:
dmesg-warn -> PASS (bdw-ultra)
Subgroup basic-vebox:
pass -> SKIP (bdw-ultra)
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup addfb25-x-tiled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup addfb25-x-tiled-mismatch:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup addfb25-y-tiled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup addfb25-yf-tiled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-0:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-1024:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-128:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-256:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-32:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-63:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-65536:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pitch-999:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-y-tiled:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bo-too-small-due-to-tiling:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup clobberred-modifier:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup framebuffer-vs-set-tiling:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup no-handle:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup size-max:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup small-bo:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup tile-pitch-mismatch:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup too-high:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup too-wide:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup unused-handle:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup unused-modifier:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup unused-offsets:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup unused-pitches:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-FAIL (bsw-nuc-2)
pass -> FAIL (snb-dellxps)
pass -> FAIL (bdw-ultra)
dmesg-warn -> PASS (ilk-hp8440p)
pass -> DMESG-FAIL (byt-nuc)
Subgroup basic-flip-vs-modeset:
dmesg-warn -> DMESG-FAIL (bsw-nuc-2)
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
pass -> DMESG-WARN (ilk-hp8440p)
dmesg-warn -> DMESG-FAIL (byt-nuc)
Subgroup basic-flip-vs-wf_vblank:
pass -> DMESG-FAIL (bsw-nuc-2)
dmesg-warn -> PASS (ivb-t430s)
pass -> FAIL (bdw-ultra)
pass -> DMESG-FAIL (byt-nuc)
dmesg-warn -> PASS (snb-x220t)
dmesg-warn -> FAIL (snb-dellxps)
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-plain-flip:
dmesg-warn -> DMESG-FAIL (byt-nuc)
dmesg-warn -> DMESG-FAIL (bsw-nuc-2)
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
dmesg-warn -> PASS (ivb-t430s)
Test kms_force_connector_basic:
Subgroup force-edid:
pass -> SKIP (snb-dellxps)
Subgroup prune-stale-modes:
pass -> SKIP (snb-dellxps)
Test kms_pipe_crc_basic:
Subgroup bad-nb-words-1:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-nb-words-3:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup bad-pipe:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup hang-read-crc-pipe-a:
pass -> FAIL (snb-dellxps)
pass -> FAIL (bdw-ultra)
pass -> DMESG-FAIL (byt-nuc)
Subgroup hang-read-crc-pipe-b:
pass -> FAIL (snb-dellxps)
pass -> FAIL (bdw-ultra)
pass -> DMESG-FAIL (byt-nuc)
Subgroup hang-read-crc-pipe-c:
pass -> FAIL (bsw-nuc-2)
pass -> FAIL (bdw-ultra)
Subgroup nonblocking-crc-pipe-a:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
pass -> FAIL (byt-nuc)
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
pass -> FAIL (byt-nuc)
Subgroup nonblocking-crc-pipe-b:
dmesg-warn -> PASS (snb-x220t)
dmesg-warn -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
pass -> DMESG-FAIL (byt-nuc)
Subgroup nonblocking-crc-pipe-b-frame-sequence:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
pass -> DMESG-FAIL (byt-nuc)
Subgroup nonblocking-crc-pipe-c:
pass -> FAIL (bsw-nuc-2)
pass -> SKIP (bdw-ultra)
Subgroup nonblocking-crc-pipe-c-frame-sequence:
pass -> FAIL (bsw-nuc-2)
pass -> FAIL (bdw-ultra)
Subgroup read-crc-pipe-a:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
dmesg-warn -> FAIL (byt-nuc)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
dmesg-warn -> FAIL (byt-nuc)
Subgroup read-crc-pipe-b:
dmesg-warn -> DMESG-FAIL (byt-nuc)
dmesg-warn -> PASS (snb-x220t)
dmesg-warn -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
dmesg-fail -> PASS (ivb-t430s)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
dmesg-warn -> DMESG-FAIL (byt-nuc)
Subgroup read-crc-pipe-c:
dmesg-warn -> FAIL (bsw-nuc-2)
pass -> SKIP (bdw-ultra)
dmesg-fail -> PASS (ivb-t430s)
Subgroup read-crc-pipe-c-frame-sequence:
pass -> FAIL (bsw-nuc-2)
pass -> FAIL (bdw-ultra)
Subgroup suspend-read-crc-pipe-a:
pass -> SKIP (snb-dellxps)
pass -> DMESG-FAIL (byt-nuc)
Subgroup suspend-read-crc-pipe-b:
pass -> DMESG-FAIL (byt-nuc)
dmesg-warn -> PASS (snb-x220t)
dmesg-warn -> SKIP (snb-dellxps)
dmesg-warn -> PASS (ilk-hp8440p)
dmesg-fail -> PASS (ivb-t430s)
Subgroup suspend-read-crc-pipe-c:
pass -> DMESG-FAIL (bsw-nuc-2)
dmesg-fail -> PASS (ivb-t430s)
Test kms_psr_sink_crc:
Subgroup psr_basic:
pass -> SKIP (bdw-ultra)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-rte:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test pm_rps:
Subgroup basic-api:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Test prime_self_import:
Subgroup basic-llseek-bad:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-with_fd_dup:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-with_one_bo_two_files:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
Subgroup basic-with_two_bos:
pass -> SKIP (snb-dellxps)
pass -> SKIP (bdw-ultra)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:31 dwarn:0 dfail:1 fail:7 skip:99
bsw-nuc-2 total:141 pass:106 dwarn:1 dfail:5 fail:5 skip:24
byt-nuc total:141 pass:107 dwarn:3 dfail:12 fail:4 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:103 dwarn:1 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
snb-dellxps total:141 pass:31 dwarn:0 dfail:1 fail:4 skip:105
snb-x220t total:141 pass:127 dwarn:0 dfail:0 fail:1 skip:13
HANGED hsw-xps12 in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a
HANGED skl-i5k-2 in igt@kms_pipe_crc_basic@hang-read-crc-pipe-a
HANGED skl-i7k-2 in igt@kms_pipe_crc_basic@hang-read-crc-pipe-a
Results at /archive/results/CI_IGT_test/Patchwork_1127/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-11 12:27 [PATCH v2 0/9] Kill off intel_crtc->atomic! Maarten Lankhorst
2016-01-11 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-11 14:30 ` Patchwork
1 sibling, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 14:30 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: intel-gfx
== Summary ==
HEAD is now at ff88655 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Applying: drm/i915: Kill off intel_crtc->atomic.wait_vblank, v3.
Repository lacks necessary blobs to fall back on 3-way merge.
Cannot fall back to three-way merge.
Patch failed at 0001 drm/i915: Kill off intel_crtc->atomic.wait_vblank, v3.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Reject invalid-pad for context-destroy ioctl
@ 2016-01-08 21:40 Chris Wilson
2016-01-11 11:07 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Chris Wilson @ 2016-01-08 21:40 UTC (permalink / raw)
To: intel-gfx; +Cc: Daniel Vetter
Unknown parameters, especially structure padding, are expected to invoke
rejection with -EINVAL.
Testcase: igt/gem_ctx_bad_destroy/invalid-pad
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89602
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/i915/i915_gem_context.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 060e902afd1c..baabbd6488d8 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -1001,6 +1001,9 @@ int i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data,
struct intel_context *ctx;
int ret;
+ if (args->pad != 0)
+ return -EINVAL;
+
if (args->ctx_id == DEFAULT_CONTEXT_HANDLE)
return -ENOENT;
--
2.7.0.rc3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-08 21:40 [PATCH] drm/i915: Reject invalid-pad for context-destroy ioctl Chris Wilson
@ 2016-01-11 11:07 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 11:07 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (bdw-nuci7)
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-b-frame-sequence:
pass -> DMESG-WARN (bdw-ultra)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> FAIL (snb-x220t)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-c:
dmesg-warn -> PASS (bsw-nuc-2)
bdw-nuci7 total:138 pass:128 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:119 dwarn:7 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
ivb-t430s total:135 pass:122 dwarn:3 dfail:4 fail:0 skip:6
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:121 dwarn:5 dfail:0 fail:2 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1120/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/2] drm/i915: Store edram capabilities instead of fixed size
@ 2016-01-08 16:58 Mika Kuoppala
2016-01-11 10:27 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-08 16:58 UTC (permalink / raw)
To: intel-gfx
Store the edram capabilities instead of only the size of
edram. This is preparatory patch to allow edram size calculation
based on edram capability bits for gen9+.
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
drivers/gpu/drm/i915/i915_drv.h | 7 +++++--
drivers/gpu/drm/i915/i915_gem.c | 2 +-
drivers/gpu/drm/i915/i915_gem_gtt.c | 2 +-
drivers/gpu/drm/i915/i915_reg.h | 2 +-
drivers/gpu/drm/i915/intel_uncore.c | 39 +++++++++++++++++++++++++------------
6 files changed, 36 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index e3377abc0d4d..039ace6e4524 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2401,7 +2401,7 @@ static int i915_llc(struct seq_file *m, void *data)
/* Size calculation for LLC is a bit of a pain. Ignore for now. */
seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev)));
- seq_printf(m, "eLLC: %zuMB\n", dev_priv->ellc_size);
+ seq_printf(m, "eLLC: %zuMB\n", intel_uncore_edram_size_mb(dev_priv));
return 0;
}
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6ef03eea3518..c81f537b2da7 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1846,7 +1846,7 @@ struct drm_i915_private {
struct intel_l3_parity l3_parity;
/* Cannot be determined by PCIID. You must always read a register. */
- size_t ellc_size;
+ u32 edram_cap;
/* gen6+ rps state */
struct intel_gen6_power_mgmt rps;
@@ -2567,8 +2567,9 @@ struct drm_i915_cmd_table {
#define HAS_BLT(dev) (INTEL_INFO(dev)->ring_mask & BLT_RING)
#define HAS_VEBOX(dev) (INTEL_INFO(dev)->ring_mask & VEBOX_RING)
#define HAS_LLC(dev) (INTEL_INFO(dev)->has_llc)
+#define HAS_EDRAM(dev) (__I915__(dev)->edram_cap & EDRAM_ENABLED)
#define HAS_WT(dev) ((IS_HASWELL(dev) || IS_BROADWELL(dev)) && \
- __I915__(dev)->ellc_size)
+ HAS_EDRAM(dev))
#define I915_NEED_GFX_HWS(dev) (INTEL_INFO(dev)->need_gfx_hws)
#define HAS_HW_CONTEXTS(dev) (INTEL_INFO(dev)->gen >= 6)
@@ -2735,6 +2736,8 @@ void intel_uncore_forcewake_get__locked(struct drm_i915_private *dev_priv,
enum forcewake_domains domains);
void intel_uncore_forcewake_put__locked(struct drm_i915_private *dev_priv,
enum forcewake_domains domains);
+unsigned intel_uncore_edram_size_mb(struct drm_i915_private *dev_priv);
+
void assert_forcewakes_inactive(struct drm_i915_private *dev_priv);
static inline bool intel_vgpu_active(struct drm_device *dev)
{
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index d8efc9dfbc48..0a5e5524def3 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4799,7 +4799,7 @@ i915_gem_init_hw(struct drm_device *dev)
/* Double layer security blanket, see i915_gem_init() */
intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
- if (dev_priv->ellc_size)
+ if (HAS_EDRAM(dev_priv))
I915_WRITE(HSW_IDICR, I915_READ(HSW_IDICR) | IDIHASHMSK(0xf));
if (IS_HASWELL(dev))
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 56f4f2e58d53..1d1933130b7a 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -3157,7 +3157,7 @@ int i915_gem_gtt_init(struct drm_device *dev)
} else if (INTEL_INFO(dev)->gen < 8) {
gtt->gtt_probe = gen6_gmch_probe;
gtt->base.cleanup = gen6_gmch_remove;
- if (IS_HASWELL(dev) && dev_priv->ellc_size)
+ if (HAS_EDRAM(dev))
gtt->base.pte_encode = iris_pte_encode;
else if (IS_HASWELL(dev))
gtt->base.pte_encode = hsw_pte_encode;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 556a458d669e..f88b75ec5047 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -6818,7 +6818,7 @@ enum skl_disp_power_wells {
#define HSW_IDICR _MMIO(0x9008)
#define IDIHASHMSK(x) (((x) & 0x3f) << 16)
-#define HSW_EDRAM_PRESENT _MMIO(0x120010)
+#define HSW_EDRAM_CAP _MMIO(0x120010)
#define EDRAM_ENABLED 0x1
#define GEN6_UCGCTL1 _MMIO(0x9400)
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index d0973e08e7eb..0c9059cb3d13 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -310,21 +310,36 @@ void intel_uncore_forcewake_reset(struct drm_device *dev, bool restore)
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);
}
-static void intel_uncore_ellc_detect(struct drm_device *dev)
+unsigned intel_uncore_edram_size_mb(struct drm_i915_private *dev_priv)
{
- struct drm_i915_private *dev_priv = dev->dev_private;
+ if (!HAS_EDRAM(dev_priv))
+ return 0;
+
+ /* The docs do not explain exactly how the calculation can be
+ * made. It is somewhat guessable, but for now, it's always
+ * 128MB.
+ */
+
+ return 128;
+}
- if ((IS_HASWELL(dev) || IS_BROADWELL(dev) ||
- INTEL_INFO(dev)->gen >= 9) &&
- (__raw_i915_read32(dev_priv, HSW_EDRAM_PRESENT) & EDRAM_ENABLED)) {
- /* The docs do not explain exactly how the calculation can be
- * made. It is somewhat guessable, but for now, it's always
- * 128MB.
- * NB: We can't write IDICR yet because we do not have gt funcs
+static void intel_uncore_edram_detect(struct drm_i915_private *dev_priv)
+{
+ if (IS_HASWELL(dev_priv) ||
+ IS_BROADWELL(dev_priv) ||
+ INTEL_INFO(dev_priv)->gen >= 9) {
+ dev_priv->edram_cap = __raw_i915_read32(dev_priv,
+ HSW_EDRAM_CAP);
+
+ /* NB: We can't write IDICR yet because we do not have gt funcs
* set up */
- dev_priv->ellc_size = 128;
- DRM_INFO("Found %zuMB of eLLC\n", dev_priv->ellc_size);
+ } else {
+ dev_priv->edram_cap = 0;
}
+
+ if (HAS_EDRAM(dev_priv))
+ DRM_INFO("Found %zuMB of eLLC\n",
+ intel_uncore_edram_size_mb(dev_priv));
}
static bool
@@ -1239,7 +1254,7 @@ void intel_uncore_init(struct drm_device *dev)
i915_check_vgpu(dev);
- intel_uncore_ellc_detect(dev);
+ intel_uncore_edram_detect(dev_priv);
intel_uncore_fw_domains_init(dev);
__intel_uncore_early_sanitize(dev, false);
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-08 16:58 [PATCH 1/2] drm/i915: Store edram capabilities instead of fixed size Mika Kuoppala
@ 2016-01-11 10:27 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 10:27 UTC (permalink / raw)
To: Mika Kuoppala; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (bdw-ultra)
dmesg-warn -> PASS (byt-nuc)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:131 dwarn:1 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:114 dwarn:3 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:119 dwarn:7 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:101 dwarn:3 dfail:0 fail:0 skip:37
skl-i5k-2 total:141 pass:132 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
Results at /archive/results/CI_IGT_test/Patchwork_1118/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/2] drm/i915: Enable mmio_debug for vlv/chv
@ 2016-01-08 13:51 Mika Kuoppala
2016-01-11 9:59 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-08 13:51 UTC (permalink / raw)
To: intel-gfx
With commit 8ac3e1bb76cc ("drm/i915: Add non claimed mmio checking
for vlv/chv") we now have chv/vlv support in place for detecting
unclaimed access. Also the perf hit of extra mmio read
is now only suffered if mmio_debug is set.
This allows us to stuff the macro for unclaimed reg
detection inside a generic gen6 register access, as now all
gens using these macros uses also unclaimed debugs, the one
exception being snb. We gain more clean and generic macros
and only downside is that snb will suffer one branch perf hit
without upside.
Note that the hsw write path debug register check now
happens before fifo check, but this should not make
any real difference.
As vlv/chv use the generic gen6 access macros, the consequence
is that they gain the mmio_debug feature.
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
drivers/gpu/drm/i915/intel_uncore.c | 41 ++++++++++++++++++++-----------------
1 file changed, 22 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
index d0973e08e7eb..0b47bc891dc7 100644
--- a/drivers/gpu/drm/i915/intel_uncore.c
+++ b/drivers/gpu/drm/i915/intel_uncore.c
@@ -626,14 +626,11 @@ ilk_dummy_write(struct drm_i915_private *dev_priv)
}
static void
-hsw_unclaimed_reg_debug(struct drm_i915_private *dev_priv,
- const i915_reg_t reg,
- const bool read,
- const bool before)
+__unclaimed_reg_debug(struct drm_i915_private *dev_priv,
+ const i915_reg_t reg,
+ const bool read,
+ const bool before)
{
- if (likely(!i915.mmio_debug))
- return;
-
if (WARN(check_for_unclaimed_mmio(dev_priv),
"Unclaimed register detected %s %s register 0x%x\n",
before ? "before" : "after",
@@ -642,6 +639,18 @@ hsw_unclaimed_reg_debug(struct drm_i915_private *dev_priv,
i915.mmio_debug--; /* Only report the first N failures */
}
+static inline void
+unclaimed_reg_debug(struct drm_i915_private *dev_priv,
+ const i915_reg_t reg,
+ const bool read,
+ const bool before)
+{
+ if (likely(!i915.mmio_debug))
+ return;
+
+ __unclaimed_reg_debug(dev_priv, reg, read, before);
+}
+
#define GEN2_READ_HEADER(x) \
u##x val = 0; \
assert_rpm_wakelock_held(dev_priv);
@@ -687,9 +696,11 @@ __gen2_read(64)
unsigned long irqflags; \
u##x val = 0; \
assert_rpm_wakelock_held(dev_priv); \
- spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); \
+ unclaimed_reg_debug(dev_priv, reg, true, true)
#define GEN6_READ_FOOTER \
+ unclaimed_reg_debug(dev_priv, reg, true, false); \
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); \
trace_i915_reg_rw(false, reg, val, sizeof(val), trace); \
return val
@@ -722,11 +733,9 @@ static inline void __force_wake_get(struct drm_i915_private *dev_priv,
static u##x \
gen6_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
GEN6_READ_HEADER(x); \
- hsw_unclaimed_reg_debug(dev_priv, reg, true, true); \
if (NEEDS_FORCE_WAKE(offset)) \
__force_wake_get(dev_priv, FORCEWAKE_RENDER); \
val = __raw_i915_read##x(dev_priv, reg); \
- hsw_unclaimed_reg_debug(dev_priv, reg, true, false); \
GEN6_READ_FOOTER; \
}
@@ -774,7 +783,6 @@ static u##x \
gen9_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
enum forcewake_domains fw_engine; \
GEN6_READ_HEADER(x); \
- hsw_unclaimed_reg_debug(dev_priv, reg, true, true); \
if (!SKL_NEEDS_FORCE_WAKE(offset)) \
fw_engine = 0; \
else if (FORCEWAKE_GEN9_RENDER_RANGE_OFFSET(offset)) \
@@ -788,7 +796,6 @@ gen9_read##x(struct drm_i915_private *dev_priv, i915_reg_t reg, bool trace) { \
if (fw_engine) \
__force_wake_get(dev_priv, fw_engine); \
val = __raw_i915_read##x(dev_priv, reg); \
- hsw_unclaimed_reg_debug(dev_priv, reg, true, false); \
GEN6_READ_FOOTER; \
}
@@ -887,9 +894,11 @@ __gen2_write(64)
unsigned long irqflags; \
trace_i915_reg_rw(true, reg, val, sizeof(val), trace); \
assert_rpm_wakelock_held(dev_priv); \
- spin_lock_irqsave(&dev_priv->uncore.lock, irqflags)
+ spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); \
+ unclaimed_reg_debug(dev_priv, reg, false, true)
#define GEN6_WRITE_FOOTER \
+ unclaimed_reg_debug(dev_priv, reg, false, false); \
spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags)
#define __gen6_write(x) \
@@ -915,12 +924,10 @@ hsw_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool t
if (NEEDS_FORCE_WAKE(offset)) { \
__fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
} \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, true); \
__raw_i915_write##x(dev_priv, reg, val); \
if (unlikely(__fifo_ret)) { \
gen6_gt_check_fifodbg(dev_priv); \
} \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, false); \
GEN6_WRITE_FOOTER; \
}
@@ -950,11 +957,9 @@ static bool is_gen8_shadowed(struct drm_i915_private *dev_priv,
static void \
gen8_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, bool trace) { \
GEN6_WRITE_HEADER; \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, true); \
if (NEEDS_FORCE_WAKE(offset) && !is_gen8_shadowed(dev_priv, reg)) \
__force_wake_get(dev_priv, FORCEWAKE_RENDER); \
__raw_i915_write##x(dev_priv, reg, val); \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, false); \
GEN6_WRITE_FOOTER; \
}
@@ -1008,7 +1013,6 @@ gen9_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, \
bool trace) { \
enum forcewake_domains fw_engine; \
GEN6_WRITE_HEADER; \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, true); \
if (!SKL_NEEDS_FORCE_WAKE(offset) || \
is_gen9_shadowed(dev_priv, reg)) \
fw_engine = 0; \
@@ -1023,7 +1027,6 @@ gen9_write##x(struct drm_i915_private *dev_priv, i915_reg_t reg, u##x val, \
if (fw_engine) \
__force_wake_get(dev_priv, fw_engine); \
__raw_i915_write##x(dev_priv, reg, val); \
- hsw_unclaimed_reg_debug(dev_priv, reg, false, false); \
GEN6_WRITE_FOOTER; \
}
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-08 13:51 [PATCH 1/2] drm/i915: Enable mmio_debug for vlv/chv Mika Kuoppala
@ 2016-01-11 9:59 ` Patchwork
2016-01-11 12:50 ` Mika Kuoppala
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-11 9:59 UTC (permalink / raw)
To: Mika Kuoppala; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
pass -> DMESG-WARN (skl-i5k-2)
dmesg-warn -> PASS (bsw-nuc-2)
pass -> DMESG-WARN (ilk-hp8440p)
dmesg-warn -> PASS (byt-nuc)
Subgroup basic-flip-vs-wf_vblank:
pass -> DMESG-WARN (byt-nuc)
Subgroup basic-plain-flip:
dmesg-warn -> PASS (bsw-nuc-2)
dmesg-warn -> PASS (byt-nuc)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-b:
pass -> DMESG-WARN (byt-nuc)
Subgroup nonblocking-crc-pipe-c:
pass -> DMESG-WARN (bsw-nuc-2)
Subgroup read-crc-pipe-a:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-WARN (bdw-ultra)
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-c:
dmesg-warn -> PASS (bsw-nuc-2)
Subgroup read-crc-pipe-c-frame-sequence:
pass -> DMESG-WARN (bsw-nuc-2)
Test pm_rpm:
Subgroup basic-pci-d3-state:
dmesg-warn -> PASS (byt-nuc)
bdw-ultra total:138 pass:130 dwarn:1 dfail:0 fail:1 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:122 dwarn:4 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
Results at /archive/results/CI_IGT_test/Patchwork_1116/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-11 9:59 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-11 12:50 ` Mika Kuoppala
2016-01-12 16:22 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-11 12:50 UTC (permalink / raw)
To: Patchwork; +Cc: intel-gfx
Patchwork <patchwork@annarchy.freedesktop.org> writes:
> == Summary ==
>
> Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
>
> Test gem_storedw_loop:
> Subgroup basic-render:
> pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
> dmesg-warn -> PASS (bdw-ultra)
> Test kms_flip:
> Subgroup basic-flip-vs-dpms:
> dmesg-warn -> PASS (ilk-hp8440p)
> Subgroup basic-flip-vs-modeset:
> pass -> DMESG-WARN (skl-i5k-2)
> dmesg-warn -> PASS (bsw-nuc-2)
> pass -> DMESG-WARN (ilk-hp8440p)
> dmesg-warn -> PASS (byt-nuc)
> Subgroup basic-flip-vs-wf_vblank:
> pass -> DMESG-WARN (byt-nuc)
> Subgroup basic-plain-flip:
> dmesg-warn -> PASS (bsw-nuc-2)
> dmesg-warn -> PASS (byt-nuc)
> Test kms_pipe_crc_basic:
> Subgroup nonblocking-crc-pipe-b:
> pass -> DMESG-WARN (byt-nuc)
> Subgroup nonblocking-crc-pipe-c:
> pass -> DMESG-WARN (bsw-nuc-2)
> Subgroup read-crc-pipe-a:
> dmesg-warn -> PASS (byt-nuc)
> Subgroup read-crc-pipe-b:
> dmesg-warn -> PASS (byt-nuc)
> Subgroup read-crc-pipe-b-frame-sequence:
> pass -> DMESG-WARN (bdw-ultra)
> dmesg-warn -> PASS (byt-nuc)
> Subgroup read-crc-pipe-c:
> dmesg-warn -> PASS (bsw-nuc-2)
> Subgroup read-crc-pipe-c-frame-sequence:
> pass -> DMESG-WARN (bsw-nuc-2)
> Test pm_rpm:
> Subgroup basic-pci-d3-state:
> dmesg-warn -> PASS (byt-nuc)
>
> bdw-ultra total:138 pass:130 dwarn:1 dfail:0 fail:1
> skip:6
Tomi suspected this as a fluke fail. There was no igt stdout nor stderr
for this case. We did a rerun and bdw-ultra passed.
-Mika
> bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
> byt-nuc total:141 pass:122 dwarn:4 dfail:0 fail:0 skip:15
> hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
> skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
> skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>
> HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
>
> Results at /archive/results/CI_IGT_test/Patchwork_1116/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-11 12:50 ` Mika Kuoppala
@ 2016-01-12 16:22 ` Daniel Vetter
2016-01-13 9:16 ` Mika Kuoppala
2016-01-13 9:20 ` Mika Kuoppala
0 siblings, 2 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-12 16:22 UTC (permalink / raw)
To: Mika Kuoppala; +Cc: intel-gfx
On Mon, Jan 11, 2016 at 02:50:28PM +0200, Mika Kuoppala wrote:
> Patchwork <patchwork@annarchy.freedesktop.org> writes:
>
> > == Summary ==
> >
> > Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
> >
> > Test gem_storedw_loop:
> > Subgroup basic-render:
> > pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
> > dmesg-warn -> PASS (bdw-ultra)
> > Test kms_flip:
> > Subgroup basic-flip-vs-dpms:
> > dmesg-warn -> PASS (ilk-hp8440p)
> > Subgroup basic-flip-vs-modeset:
> > pass -> DMESG-WARN (skl-i5k-2)
> > dmesg-warn -> PASS (bsw-nuc-2)
> > pass -> DMESG-WARN (ilk-hp8440p)
> > dmesg-warn -> PASS (byt-nuc)
> > Subgroup basic-flip-vs-wf_vblank:
> > pass -> DMESG-WARN (byt-nuc)
> > Subgroup basic-plain-flip:
> > dmesg-warn -> PASS (bsw-nuc-2)
> > dmesg-warn -> PASS (byt-nuc)
> > Test kms_pipe_crc_basic:
> > Subgroup nonblocking-crc-pipe-b:
> > pass -> DMESG-WARN (byt-nuc)
> > Subgroup nonblocking-crc-pipe-c:
> > pass -> DMESG-WARN (bsw-nuc-2)
> > Subgroup read-crc-pipe-a:
> > dmesg-warn -> PASS (byt-nuc)
> > Subgroup read-crc-pipe-b:
> > dmesg-warn -> PASS (byt-nuc)
> > Subgroup read-crc-pipe-b-frame-sequence:
> > pass -> DMESG-WARN (bdw-ultra)
> > dmesg-warn -> PASS (byt-nuc)
> > Subgroup read-crc-pipe-c:
> > dmesg-warn -> PASS (bsw-nuc-2)
> > Subgroup read-crc-pipe-c-frame-sequence:
> > pass -> DMESG-WARN (bsw-nuc-2)
But what with all the pass->dmesg-warn changes above? That's considered
BAT failure too, we can't afford to sprinkle warnings all over ... And
it's a bunch of different machines.
> > Test pm_rpm:
> > Subgroup basic-pci-d3-state:
> > dmesg-warn -> PASS (byt-nuc)
> >
> > bdw-ultra total:138 pass:130 dwarn:1 dfail:0 fail:1
> > skip:6
>
> Tomi suspected this as a fluke fail. There was no igt stdout nor stderr
> for this case. We did a rerun and bdw-ultra passed.
>
> -Mika
>
> > bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
> > byt-nuc total:141 pass:122 dwarn:4 dfail:0 fail:0 skip:15
> > hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
> > hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
> > ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
> > skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
> > skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
> > snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
> > snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
> >
> > HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
So is killing a machine ... pretty sure this is new-ish.
-Daniel
> >
> > Results at /archive/results/CI_IGT_test/Patchwork_1116/
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-12 16:22 ` Daniel Vetter
@ 2016-01-13 9:16 ` Mika Kuoppala
2016-01-13 9:20 ` Mika Kuoppala
1 sibling, 0 replies; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-13 9:16 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
Daniel Vetter <daniel@ffwll.ch> writes:
> On Mon, Jan 11, 2016 at 02:50:28PM +0200, Mika Kuoppala wrote:
>> Patchwork <patchwork@annarchy.freedesktop.org> writes:
>>
>> > == Summary ==
>> >
>> > Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
>> >
>> > Test gem_storedw_loop:
>> > Subgroup basic-render:
>> > pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
>> > dmesg-warn -> PASS (bdw-ultra)
>> > Test kms_flip:
>> > Subgroup basic-flip-vs-dpms:
>> > dmesg-warn -> PASS (ilk-hp8440p)
>> > Subgroup basic-flip-vs-modeset:
>> > pass -> DMESG-WARN (skl-i5k-2)
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > pass -> DMESG-WARN (ilk-hp8440p)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup basic-flip-vs-wf_vblank:
>> > pass -> DMESG-WARN (byt-nuc)
>> > Subgroup basic-plain-flip:
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Test kms_pipe_crc_basic:
>> > Subgroup nonblocking-crc-pipe-b:
>> > pass -> DMESG-WARN (byt-nuc)
>> > Subgroup nonblocking-crc-pipe-c:
>> > pass -> DMESG-WARN (bsw-nuc-2)
>> > Subgroup read-crc-pipe-a:
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-b:
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-b-frame-sequence:
>> > pass -> DMESG-WARN (bdw-ultra)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-c:
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > Subgroup read-crc-pipe-c-frame-sequence:
>> > pass -> DMESG-WARN (bsw-nuc-2)
>
> But what with all the pass->dmesg-warn changes above? That's considered
> BAT failure too, we can't afford to sprinkle warnings all over ... And
> it's a bunch of different machines.
>
>> > Test pm_rpm:
>> > Subgroup basic-pci-d3-state:
>> > dmesg-warn -> PASS (byt-nuc)
>> >
>> > bdw-ultra total:138 pass:130 dwarn:1 dfail:0 fail:1
>> > skip:6
>>
>> Tomi suspected this as a fluke fail. There was no igt stdout nor stderr
>> for this case. We did a rerun and bdw-ultra passed.
>>
>> -Mika
>>
>> > bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
>> > byt-nuc total:141 pass:122 dwarn:4 dfail:0 fail:0 skip:15
>> > hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
>> > hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
>> > ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
>> > skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
>> > skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
>> > snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
>> > snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>> >
>> > HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
>
> So is killing a machine ... pretty sure this is new-ish.
> -Daniel
>
I did cover my back with this one. This happened on other sets
on the same day and I went and asked Tomi. He said that don't
worry about it. So I didn't.
-Mika
>
>> >
>> > Results at /archive/results/CI_IGT_test/Patchwork_1116/
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-12 16:22 ` Daniel Vetter
2016-01-13 9:16 ` Mika Kuoppala
@ 2016-01-13 9:20 ` Mika Kuoppala
2016-01-13 9:39 ` Daniel Vetter
1 sibling, 1 reply; 123+ messages in thread
From: Mika Kuoppala @ 2016-01-13 9:20 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
Daniel Vetter <daniel@ffwll.ch> writes:
> On Mon, Jan 11, 2016 at 02:50:28PM +0200, Mika Kuoppala wrote:
>> Patchwork <patchwork@annarchy.freedesktop.org> writes:
>>
>> > == Summary ==
>> >
>> > Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
>> >
>> > Test gem_storedw_loop:
>> > Subgroup basic-render:
>> > pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
>> > dmesg-warn -> PASS (bdw-ultra)
>> > Test kms_flip:
>> > Subgroup basic-flip-vs-dpms:
>> > dmesg-warn -> PASS (ilk-hp8440p)
>> > Subgroup basic-flip-vs-modeset:
>> > pass -> DMESG-WARN (skl-i5k-2)
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > pass -> DMESG-WARN (ilk-hp8440p)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup basic-flip-vs-wf_vblank:
>> > pass -> DMESG-WARN (byt-nuc)
>> > Subgroup basic-plain-flip:
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Test kms_pipe_crc_basic:
>> > Subgroup nonblocking-crc-pipe-b:
>> > pass -> DMESG-WARN (byt-nuc)
>> > Subgroup nonblocking-crc-pipe-c:
>> > pass -> DMESG-WARN (bsw-nuc-2)
>> > Subgroup read-crc-pipe-a:
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-b:
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-b-frame-sequence:
>> > pass -> DMESG-WARN (bdw-ultra)
>> > dmesg-warn -> PASS (byt-nuc)
>> > Subgroup read-crc-pipe-c:
>> > dmesg-warn -> PASS (bsw-nuc-2)
>> > Subgroup read-crc-pipe-c-frame-sequence:
>> > pass -> DMESG-WARN (bsw-nuc-2)
>
> But what with all the pass->dmesg-warn changes above? That's considered
> BAT failure too, we can't afford to sprinkle warnings all over ... And
> it's a bunch of different machines.
>
Forgot to address this one in previous mail. This patchset
added more debug infra and enabled it for bsw/byt. So assumpion
is that it did uncover a real problem thus the warns.
Is the policy that if your debug infra reveals problems,
you need to fix those problems?
If so, there is a chicken and egg problem as you don't
always have access to hardware that your debug infra
will cover.
Thanks,
-Mika
>> > Test pm_rpm:
>> > Subgroup basic-pci-d3-state:
>> > dmesg-warn -> PASS (byt-nuc)
>> >
>> > bdw-ultra total:138 pass:130 dwarn:1 dfail:0 fail:1
>> > skip:6
>>
>> Tomi suspected this as a fluke fail. There was no igt stdout nor stderr
>> for this case. We did a rerun and bdw-ultra passed.
>>
>> -Mika
>>
>> > bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
>> > byt-nuc total:141 pass:122 dwarn:4 dfail:0 fail:0 skip:15
>> > hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
>> > hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
>> > ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
>> > skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
>> > skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
>> > snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
>> > snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
>> >
>> > HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
>
> So is killing a machine ... pretty sure this is new-ish.
> -Daniel
>
>
>> >
>> > Results at /archive/results/CI_IGT_test/Patchwork_1116/
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-13 9:20 ` Mika Kuoppala
@ 2016-01-13 9:39 ` Daniel Vetter
2016-01-13 9:39 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-13 9:39 UTC (permalink / raw)
To: Mika Kuoppala; +Cc: intel-gfx
On Wed, Jan 13, 2016 at 10:20 AM, Mika Kuoppala
<mika.kuoppala@linux.intel.com> wrote:
>> But what with all the pass->dmesg-warn changes above? That's considered
>> BAT failure too, we can't afford to sprinkle warnings all over ... And
>> it's a bunch of different machines.
>>
>
> Forgot to address this one in previous mail. This patchset
> added more debug infra and enabled it for bsw/byt. So assumpion
> is that it did uncover a real problem thus the warns.
>
> Is the policy that if your debug infra reveals problems,
> you need to fix those problems?
We should discuss this in the next meeting (adding Annie/Jesse for
that), but personally I think adding new WARN/ERROR noise should never
result in BAT regressions. If your patch uncovers existing failures
even in BAT then imo the right approach is to first fix up things,
then apply the WARN patch to make sure we don't break things. The
problem is that once you have dmesg noise in a test, then no one will
notice additional noise and regressions. And that's how we got into
our mess last summer.
Also dmesg noise is not really acceptable anyway and needs to be fixed
(Linus/Dave will get grumpy).
If that takes too long because there's lots of warn, then maybe we
need to first add the new sanity check at debug level, just to help
with tracking down issues. We might need to improve CI reporting so
that debug level dmesg is still capture completely for BAT runs.
> If so, there is a chicken and egg problem as you don't
> always have access to hardware that your debug infra
> will cover.
Yeah, we need to enable manual submission to CI-machines. Abusing CI
as a test facility simply means that you're ok with blocking everyone
else with your CI result spam.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-13 9:39 ` Daniel Vetter
@ 2016-01-13 9:39 ` Daniel Vetter
0 siblings, 0 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-13 9:39 UTC (permalink / raw)
To: Mika Kuoppala, annie.j.matheson, Barnes, Jesse; +Cc: intel-gfx
Argh, actually add Annie/Jesse!
-Daniel
On Wed, Jan 13, 2016 at 10:39 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Wed, Jan 13, 2016 at 10:20 AM, Mika Kuoppala
> <mika.kuoppala@linux.intel.com> wrote:
>>> But what with all the pass->dmesg-warn changes above? That's considered
>>> BAT failure too, we can't afford to sprinkle warnings all over ... And
>>> it's a bunch of different machines.
>>>
>>
>> Forgot to address this one in previous mail. This patchset
>> added more debug infra and enabled it for bsw/byt. So assumpion
>> is that it did uncover a real problem thus the warns.
>>
>> Is the policy that if your debug infra reveals problems,
>> you need to fix those problems?
>
> We should discuss this in the next meeting (adding Annie/Jesse for
> that), but personally I think adding new WARN/ERROR noise should never
> result in BAT regressions. If your patch uncovers existing failures
> even in BAT then imo the right approach is to first fix up things,
> then apply the WARN patch to make sure we don't break things. The
> problem is that once you have dmesg noise in a test, then no one will
> notice additional noise and regressions. And that's how we got into
> our mess last summer.
>
> Also dmesg noise is not really acceptable anyway and needs to be fixed
> (Linus/Dave will get grumpy).
>
> If that takes too long because there's lots of warn, then maybe we
> need to first add the new sanity check at debug level, just to help
> with tracking down issues. We might need to improve CI reporting so
> that debug level dmesg is still capture completely for BAT runs.
>
>> If so, there is a chicken and egg problem as you don't
>> always have access to hardware that your debug infra
>> will cover.
>
> Yeah, we need to enable manual submission to CI-machines. Abusing CI
> as a test facility simply means that you're ok with blocking everyone
> else with your CI result spam.
> -Daniel
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v2 00/13] Misc cleanups and locking fixes
@ 2016-01-08 11:29 Tvrtko Ursulin
2016-01-11 9:44 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Tvrtko Ursulin @ 2016-01-08 11:29 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Random cleanups from yesterday mutated into a bit of locking verification and
fixing as suggested by Daniel Vetter.
Replacig list_for_each_entry with a dedicated i915_gem_obj_for_each_vma which
asserts the struct_mutex uncovered a few holes, not all of which (atomic display
are being fixed in this series).
I've also added the same assert to i915_gem_object_get_page since it sounds
correct to me to require it although I have not analysed all callsites. Some
might assume they know what they are doing so the approach might be too
drastic, but one like execlist is fixed in this series.
Tvrtko Ursulin (13):
drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail
drm/i915: Don't need a timer to wake us up
drm/i915: Avoid invariant conditionals in lrc interrupt handler
drm/i915: Fail engine initialization if LRCA is incorrectly aligned
drm/i915: Cache LRCA in the context
drm/i915: Only grab timestamps when needed
drm/i915: Introduce dedicated object VMA iterator
drm/i915: GEM operations need to be done under the big lock
drm/i915: Remove two impossible asserts
drm/i915: Introduce dedicated safe object VMA iterator
drm/i915: Cache ringbuffer GTT address
drm/i915: Add BKL asserts to get page helpers
drm/i915: Cache LRC state page in the context
drivers/gpu/drm/i915/i915_debugfs.c | 23 +++---
drivers/gpu/drm/i915/i915_drv.h | 17 +++++
drivers/gpu/drm/i915/i915_gem.c | 72 ++++++++----------
drivers/gpu/drm/i915/i915_gem_gtt.c | 2 +-
drivers/gpu/drm/i915/i915_gem_shrinker.c | 5 +-
drivers/gpu/drm/i915/i915_gem_stolen.c | 5 ++
drivers/gpu/drm/i915/i915_gem_userptr.c | 2 +-
drivers/gpu/drm/i915/i915_gpu_error.c | 4 +-
drivers/gpu/drm/i915/intel_lrc.c | 122 ++++++++++++++++---------------
drivers/gpu/drm/i915/intel_lrc.h | 3 +-
drivers/gpu/drm/i915/intel_ringbuffer.c | 3 +
drivers/gpu/drm/i915/intel_ringbuffer.h | 3 +
12 files changed, 140 insertions(+), 121 deletions(-)
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-08 11:29 [PATCH v2 00/13] Misc cleanups and locking fixes Tvrtko Ursulin
@ 2016-01-11 9:44 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 9:44 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-yf-tiled:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (bdw-ultra)
pass -> DMESG-WARN (skl-i7k-2)
pass -> DMESG-WARN (byt-nuc)
pass -> DMESG-WARN (snb-x220t)
pass -> DMESG-WARN (snb-dellxps)
pass -> DMESG-WARN (hsw-brixbox)
pass -> DMESG-WARN (ilk-hp8440p)
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i7k-2)
bdw-ultra total:138 pass:129 dwarn:3 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:113 dwarn:4 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:117 dwarn:9 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:132 dwarn:2 dfail:0 fail:0 skip:7
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
skl-i5k-2 total:141 pass:130 dwarn:3 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:106 dwarn:22 dfail:4 fail:0 skip:8
snb-dellxps total:141 pass:121 dwarn:6 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:121 dwarn:6 dfail:0 fail:1 skip:13
HANGED hsw-gt2 in igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c
Results at /archive/results/CI_IGT_test/Patchwork_1115/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 0/7] Explicitly pass crtc_state and plane_state to plane update functions.
@ 2016-01-07 10:54 Maarten Lankhorst
2016-01-11 8:53 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Maarten Lankhorst @ 2016-01-07 10:54 UTC (permalink / raw)
To: intel-gfx
Right now there are 3 possible functions, update_plane that's only used by sprites,
disable_plane which may be called during plane disable, and commit_plane which
may call either.
This is a bit messy and unclear. Make update_plane only be called when
the plane is visible, and disable_plane whenever it's not. commit_plane
will be removed to reduce confusion.
This makes it easier to put the vma in plane_state.
Maarten Lankhorst (7):
drm/i915: Use passed plane state for sprite planes, v4.
drm/i915: Do not use commit_plane for sprite planes.
drm/i915: Remove some visibility checks from intel_crtc_update_cursor.
drm/i915: Make disable_cursor_plane similar to commit_cursor_plane.
drm/i915: Use the plane state for cursor updates.
drm/i915: Use plane state for primary plane updates.
drm/i915: Remove commit_plane function pointer.
drivers/gpu/drm/i915/i915_drv.h | 3 -
drivers/gpu/drm/i915/intel_atomic_plane.c | 10 +-
drivers/gpu/drm/i915/intel_display.c | 355 +++++++++++++-----------------
drivers/gpu/drm/i915/intel_drv.h | 12 +-
drivers/gpu/drm/i915/intel_sprite.c | 129 +++++------
5 files changed, 224 insertions(+), 285 deletions(-)
--
2.1.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Init power domains early in driver load
@ 2016-01-07 9:10 Daniel Vetter
2016-01-11 9:12 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-07 9:10 UTC (permalink / raw)
To: DRI Development
Cc: Meelis Roos, Jani Nikula, Daniel Vetter,
Intel Graphics Development, stable, Daniel Vetter
Since
commit ac9b8236551d1177fd07b56aef9b565d1864420d
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date: Fri Nov 27 18:55:26 2015 +0200
drm/i915: Introduce a gmbus power domain
gmbus also needs the power domain infrastructure right from the start,
since as soon as we register the i2c controllers someone can use them.
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Patrik Jakobsson <patrik.jakobsson@linux.intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Meelis Roos <mroos@linux.ee>
Fixes: ac9b8236551d ("drm/i915: Introduce a gmbus power domain")
Cc: stable@vger.kernel.org
References: http://www.spinics.net/lists/intel-gfx/msg83075.html
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index b4741d121a74..405aba2ca736 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -396,8 +396,6 @@ static int i915_load_modeset_init(struct drm_device *dev)
if (ret)
goto cleanup_vga_switcheroo;
- intel_power_domains_init_hw(dev_priv);
-
ret = intel_irq_install(dev_priv);
if (ret)
goto cleanup_gem_stolen;
@@ -1025,6 +1023,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
intel_irq_init(dev_priv);
intel_uncore_sanitize(dev);
+ intel_power_domains_init(dev_priv);
+ intel_power_domains_init_hw(dev_priv);
/* Try to make sure MCHBAR is enabled before poking at it */
intel_setup_mchbar(dev);
@@ -1057,8 +1057,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
goto out_gem_unload;
}
- intel_power_domains_init(dev_priv);
-
ret = i915_load_modeset_init(dev);
if (ret < 0) {
DRM_ERROR("failed to init modeset\n");
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-07 9:10 [PATCH] drm/i915: Init power domains early in driver load Daniel Vetter
@ 2016-01-11 9:12 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 9:12 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
== Summary ==
Built on ff88655b3a5467bbc3be8c67d3e05ebf182557d3 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (bdw-ultra)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (ilk-hp8440p)
dmesg-warn -> PASS (byt-nuc)
bdw-ultra total:138 pass:132 dwarn:0 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:114 dwarn:3 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:119 dwarn:7 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
hsw-xps12 total:138 pass:133 dwarn:1 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
skl-i5k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
HANGED ivb-t430s in igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b
Results at /archive/results/CI_IGT_test/Patchwork_1112/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/guc: Fix a memory leak where guc->execbuf_client is not freed
@ 2016-01-06 20:53 yu.dai
2016-01-13 8:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: yu.dai @ 2016-01-06 20:53 UTC (permalink / raw)
To: intel-gfx
From: Alex Dai <yu.dai@intel.com>
During driver unloading, the guc_client created for command submission
needs to be released to avoid memory leak.
Signed-off-by: Alex Dai <yu.dai@intel.com>
---
drivers/gpu/drm/i915/i915_guc_submission.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
index 9c24424..8ce4f32 100644
--- a/drivers/gpu/drm/i915/i915_guc_submission.c
+++ b/drivers/gpu/drm/i915/i915_guc_submission.c
@@ -995,6 +995,9 @@ void i915_guc_submission_fini(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_guc *guc = &dev_priv->guc;
+ if (i915.enable_guc_submission)
+ i915_guc_submission_disable(dev);
+
gem_release_guc_obj(dev_priv->guc.ads_obj);
guc->ads_obj = NULL;
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-06 20:53 [PATCH] drm/i915/guc: Fix a memory leak where guc->execbuf_client is not freed yu.dai
@ 2016-01-13 8:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-13 8:49 UTC (permalink / raw)
To: yu.dai; +Cc: intel-gfx
== Summary ==
Built on 06d0112e293dfdea7f796d4085f755898850947b drm-intel-nightly: 2016y-01m-12d-21h-16m-40s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i5k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (bdw-ultra)
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup addfb25-yf-tiled:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i5k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (skl-i7k-2)
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
pass -> DMESG-WARN (ilk-hp8440p)
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i5k-2)
Test kms_pipe_crc_basic:
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
Subgroup read-crc-pipe-a-frame-sequence:
fail -> PASS (snb-x220t)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i5k-2)
bdw-nuci7 total:138 pass:129 dwarn:0 dfail:0 fail:0 skip:9
bdw-ultra total:138 pass:132 dwarn:0 dfail:0 fail:0 skip:6
bsw-nuc-2 total:141 pass:115 dwarn:2 dfail:0 fail:0 skip:24
byt-nuc total:141 pass:123 dwarn:3 dfail:0 fail:0 skip:15
hsw-brixbox total:141 pass:134 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:141 pass:137 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:141 pass:100 dwarn:4 dfail:0 fail:0 skip:37
skl-i5k-2 total:141 pass:108 dwarn:20 dfail:4 fail:0 skip:8
skl-i7k-2 total:141 pass:131 dwarn:2 dfail:0 fail:0 skip:8
snb-dellxps total:141 pass:122 dwarn:5 dfail:0 fail:0 skip:14
snb-x220t total:141 pass:122 dwarn:5 dfail:0 fail:1 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1158/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/3] drm: Defer disabling the vblank IRQ until the next interrupt (for instant-off)
@ 2016-01-06 11:09 Chris Wilson
2016-01-06 13:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Chris Wilson @ 2016-01-06 11:09 UTC (permalink / raw)
To: dri-devel; +Cc: Michel Dänzer, Laurent Pinchart, Dave Airlie, intel-gfx
On vblank instant-off systems, we can get into a situation where the cost
of enabling and disabling the vblank IRQ around a drmWaitVblank query
dominates. And with the advent of even deeper hardware sleep state,
touching registers becomes ever more expensive. However, we know that if
the user wants the current vblank counter, they are also very likely to
immediately queue a vblank wait and so we can keep the interrupt around
and only turn it off if we have no further vblank requests queued within
the interrupt interval.
After vblank event delivery, this patch adds a shadow of one vblank where
the interrupt is kept alive for the user to query and queue another vblank
event. Similarly, if the user is using blocking drmWaitVblanks, the
interrupt will be disabled on the IRQ following the wait completion.
However, if the user is simply querying the current vblank counter and
timestamp, the interrupt will be disabled after every IRQ and the user
will enabled it again on the first query following the IRQ.
v2: Mario Kleiner -
After testing this, one more thing that would make sense is to move
the disable block at the end of drm_handle_vblank() instead of at the
top.
Turns out that if high precision timestaming is disabled or doesn't
work for some reason (as can be simulated by echo 0 >
/sys/module/drm/parameters/timestamp_precision_usec), then with your
delayed disable code at its current place, the vblank counter won't
increment anymore at all for instant queries, ie. with your other
"instant query" patches. Clients which repeatedly query the counter
and wait for it to progress will simply hang, spinning in an endless
query loop. There's that comment in vblank_disable_and_save:
"* Skip this step if there isn't any high precision timestamp
* available. In that case we can't account for this and just
* hope for the best.
*/
With the disable happening after leading edge of vblank (== hw counter
increment already happened) but before the vblank counter/timestamp
handling in drm_handle_vblank, that step is needed to keep the counter
progressing, so skipping it is bad.
Now without high precision timestamping support, a kms driver must not
set dev->vblank_disable_immediate = true, as this would cause problems
for clients, so this shouldn't matter, but it would be good to still
make this robust against a future kms driver which might have
unreliable high precision timestamping, e.g., high precision
timestamping that intermittently doesn't work.
v3: Patch before coffee needs extra coffee.
Testcase: igt/kms_vblank
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Michel Dänzer <michel@daenzer.net>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Dave Airlie <airlied@redhat.com>,
Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
---
drivers/gpu/drm/drm_irq.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index 607f493ae801..ca5ef87c57c1 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -1213,9 +1213,9 @@ void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
if (atomic_dec_and_test(&vblank->refcount)) {
if (drm_vblank_offdelay == 0)
return;
- else if (dev->vblank_disable_immediate || drm_vblank_offdelay < 0)
+ else if (drm_vblank_offdelay < 0)
vblank_disable_fn((unsigned long)vblank);
- else
+ else if (!dev->vblank_disable_immediate)
mod_timer(&vblank->disable_timer,
jiffies + ((drm_vblank_offdelay * HZ)/1000));
}
@@ -1835,6 +1835,16 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
wake_up(&vblank->queue);
drm_handle_vblank_events(dev, pipe);
+ /* With instant-off, we defer disabling the interrupt until after
+ * we finish processing the following vblank. The disable has to
+ * be last (after drm_handle_vblank_events) so that the timestamp
+ * is always accurate.
+ */
+ if (dev->vblank_disable_immediate &&
+ drm_vblank_offdelay > 0 &&
+ !atomic_read(&vblank->refcount))
+ vblank_disable_fn((unsigned long)vblank);
+
spin_unlock_irqrestore(&dev->event_lock, irqflags);
return true;
--
2.7.0.rc3
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-06 11:09 [PATCH 1/3] drm: Defer disabling the vblank IRQ until the next interrupt (for instant-off) Chris Wilson
@ 2016-01-06 13:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-06 13:20 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Summary ==
Built on 89d0d1b6f0e9c3a6b90476bd115cfe1881646fd6 drm-intel-nightly: 2016y-01m-06d-10h-37m-17s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Test pm_rpm:
Subgroup basic-rte:
pass -> DMESG-WARN (byt-nuc) UNSTABLE
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i7k-2)
bdw-nuci7 total:132 pass:1 dwarn:0 dfail:0 fail:0 skip:131
bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
skl-i5k-2 total:135 pass:126 dwarn:1 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:103 dwarn:20 dfail:3 fail:0 skip:8
snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
Results at /archive/results/CI_IGT_test/Patchwork_1098/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio
@ 2016-01-06 2:26 libin.yang
2016-01-06 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: libin.yang @ 2016-01-06 2:26 UTC (permalink / raw)
To: intel-gfx, conselvan2, jani.nikula, ville.syrjala, daniel.vetter,
tiwai
Cc: Libin Yang
From: Libin Yang <libin.yang@linux.intel.com>
For DP MST, use enc_to_mst(encoder)->primary to get intel_digital_port,
instead of using enc_to_dig_port(encoder).
Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
---
drivers/gpu/drm/i915/intel_audio.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 31f6d21..431487a0 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -187,6 +187,16 @@ static bool intel_eld_uptodate(struct drm_connector *connector,
return true;
}
+static struct intel_digital_port *
+intel_encoder_to_dig_port(struct intel_encoder *intel_encoder)
+{
+ struct drm_encoder *encoder = &intel_encoder->base;
+
+ if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
+ return enc_to_mst(encoder)->primary;
+ return enc_to_dig_port(encoder);
+}
+
static void g4x_audio_codec_disable(struct intel_encoder *encoder)
{
struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
@@ -286,7 +296,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector,
struct i915_audio_component *acomp = dev_priv->audio_component;
const uint8_t *eld = connector->eld;
struct intel_digital_port *intel_dig_port =
- enc_to_dig_port(&encoder->base);
+ intel_encoder_to_dig_port(encoder);
enum port port = intel_dig_port->port;
uint32_t tmp;
int len, i;
@@ -500,7 +510,8 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct i915_audio_component *acomp = dev_priv->audio_component;
- struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+ struct intel_digital_port *intel_dig_port =
+ intel_encoder_to_dig_port(intel_encoder);
enum port port = intel_dig_port->port;
connector = drm_select_eld(encoder);
@@ -546,7 +557,8 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
struct i915_audio_component *acomp = dev_priv->audio_component;
- struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+ struct intel_digital_port *intel_dig_port =
+ intel_encoder_to_dig_port(intel_encoder);
enum port port = intel_dig_port->port;
if (dev_priv->display.audio_codec_disable)
@@ -724,7 +736,8 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
/* intel_encoder might be NULL for DP MST */
if (intel_encoder) {
ret = 0;
- intel_dig_port = enc_to_dig_port(&intel_encoder->base);
+ intel_dig_port =
+ intel_encoder_to_dig_port(intel_encoder);
*enabled = intel_dig_port->audio_connector != NULL;
if (*enabled) {
eld = intel_dig_port->audio_connector->eld;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Cleaning up DDI translation tables
@ 2016-01-05 19:18 Rodrigo Vivi
2016-01-06 11:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Rodrigo Vivi @ 2016-01-05 19:18 UTC (permalink / raw)
To: intel-gfx; +Cc: Rodrigo Vivi
No functional changes.
That state the obvious and just duplicate the place we
need to change whenever the table is updated. So let's clean it.
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index bc8a497..d3611f5 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -133,12 +133,12 @@ static const struct ddi_buf_trans skl_ddi_translations_dp[] = {
{ 0x00002016, 0x000000A0, 0x0 },
{ 0x00005012, 0x0000009B, 0x0 },
{ 0x00007011, 0x00000088, 0x0 },
- { 0x80009010, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80009010, 0x000000C0, 0x1 },
{ 0x00002016, 0x0000009B, 0x0 },
{ 0x00005012, 0x00000088, 0x0 },
- { 0x80007011, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80007011, 0x000000C0, 0x1 },
{ 0x00002016, 0x000000DF, 0x0 },
- { 0x80005012, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80005012, 0x000000C0, 0x1 },
};
/* Skylake U */
@@ -146,12 +146,12 @@ static const struct ddi_buf_trans skl_u_ddi_translations_dp[] = {
{ 0x0000201B, 0x000000A2, 0x0 },
{ 0x00005012, 0x00000088, 0x0 },
{ 0x80007011, 0x000000CD, 0x0 },
- { 0x80009010, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80009010, 0x000000C0, 0x1 },
{ 0x0000201B, 0x0000009D, 0x0 },
- { 0x80005012, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
- { 0x80007011, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80005012, 0x000000C0, 0x1 },
+ { 0x80007011, 0x000000C0, 0x1 },
{ 0x00002016, 0x00000088, 0x0 },
- { 0x80005012, 0x000000C0, 0x1 }, /* Uses I_boost level 0x1 */
+ { 0x80005012, 0x000000C0, 0x1 },
};
/* Skylake Y */
@@ -159,12 +159,12 @@ static const struct ddi_buf_trans skl_y_ddi_translations_dp[] = {
{ 0x00000018, 0x000000A2, 0x0 },
{ 0x00005012, 0x00000088, 0x0 },
{ 0x80007011, 0x000000CD, 0x0 },
- { 0x80009010, 0x000000C0, 0x3 }, /* Uses I_boost level 0x3 */
+ { 0x80009010, 0x000000C0, 0x3 },
{ 0x00000018, 0x0000009D, 0x0 },
- { 0x80005012, 0x000000C0, 0x3 }, /* Uses I_boost level 0x3 */
- { 0x80007011, 0x000000C0, 0x3 }, /* Uses I_boost level 0x3 */
+ { 0x80005012, 0x000000C0, 0x3 },
+ { 0x80007011, 0x000000C0, 0x3 },
{ 0x00000018, 0x00000088, 0x0 },
- { 0x80005012, 0x000000C0, 0x3 }, /* Uses I_boost level 0x3 */
+ { 0x80005012, 0x000000C0, 0x3 },
};
/*
--
2.4.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/guc: Enable GuC submission, where supported
@ 2016-01-05 19:10 yu.dai
2016-01-06 10:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: yu.dai @ 2016-01-05 19:10 UTC (permalink / raw)
To: intel-gfx
From: Alex Dai <yu.dai@intel.com>
This is to enable command submission via GuC.
Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
Signed-off-by: Alex Dai <yu.dai@intel.com>
---
drivers/gpu/drm/i915/i915_params.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 8d90c25..2ca4690 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -55,7 +55,7 @@ struct i915_params i915 __read_mostly = {
.verbose_state_checks = 1,
.nuclear_pageflip = 0,
.edp_vswing = 0,
- .enable_guc_submission = false,
+ .enable_guc_submission = true,
.guc_log_level = -1,
};
@@ -198,7 +198,7 @@ MODULE_PARM_DESC(edp_vswing,
"2=default swing(400mV))");
module_param_named_unsafe(enable_guc_submission, i915.enable_guc_submission, bool, 0400);
-MODULE_PARM_DESC(enable_guc_submission, "Enable GuC submission (default:false)");
+MODULE_PARM_DESC(enable_guc_submission, "Enable GuC submission (default:true)");
module_param_named(guc_log_level, i915.guc_log_level, int, 0400);
MODULE_PARM_DESC(guc_log_level,
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-05 19:10 [PATCH] drm/i915/guc: Enable GuC submission, where supported yu.dai
@ 2016-01-06 10:20 ` Patchwork
2016-01-07 10:27 ` Dave Gordon
0 siblings, 1 reply; 123+ messages in thread
From: Patchwork @ 2016-01-06 10:20 UTC (permalink / raw)
To: yu.dai; +Cc: intel-gfx
== Summary ==
Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
Test drv_getparams_basic:
Subgroup basic-eu-total:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-subslice-total:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test drv_hangman:
Subgroup error-state-basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_basic:
Subgroup bad-close:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup create-close:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup create-fd-close:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_create:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_exec:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-default:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-ctx-get:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-ctx-set:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-param-get:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-size-get:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup invalid-size-set:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup non-root-set:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup root-set:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup root-set-no-zeromap-enabled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_exec_parse:
Subgroup basic-allowed:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-rejected:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Test gem_flink_basic:
Subgroup bad-flink:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-open:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup double-flink:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup flink-lifetime:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_linear_blits:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-bo:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-copy:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-read:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-read-no-prefault:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-read-write:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-read-write-distinct:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-short:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-bo:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-bo-tiledx:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-bo-tiledy:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-copy:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-small-copy-xy:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-cpu-read-gtt:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-gtt:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-gtt-no-prefault:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-no-prefault:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-read:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-write-read-distinct:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_pread:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_pwrite:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_render_linear_blits:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_render_tiled_blits:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-blt:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-bsd:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-render:
dmesg-warn -> DMESG-FAIL (skl-i5k-2) UNSTABLE
pass -> DMESG-WARN (bdw-nuci7) UNSTABLE
pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
dmesg-warn -> PASS (bdw-ultra) UNSTABLE
Subgroup basic-vebox:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_tiled_blits:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_tiled_fence_blits:
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_addfb_basic:
Subgroup addfb25-bad-modifier:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-framebuffer-vs-set-tiling:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-x-tiled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-y-tiled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-y-tiled-small:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup addfb25-yf-tiled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-0:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-128:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-256:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-32:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-65536:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-x-tiled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-y-tiled:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bo-too-small:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bo-too-small-due-to-tiling:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup framebuffer-vs-set-tiling:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup no-handle:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup size-max:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup small-bo:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup tile-pitch-mismatch:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup unused-handle:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup unused-modifier:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup unused-pitches:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-flip-vs-modeset:
pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
Subgroup basic-flip-vs-wf_vblank:
pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_force_connector_basic:
Subgroup force-connector-state:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Subgroup force-edid:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Subgroup prune-stale-modes:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Test kms_pipe_crc_basic:
Subgroup bad-nb-words-1:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-nb-words-3:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-pipe:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup bad-source:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup hang-read-crc-pipe-a:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup hang-read-crc-pipe-b:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup hang-read-crc-pipe-c:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-a:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
Subgroup read-crc-pipe-a-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-b:
pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-c:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-c-frame-sequence:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup suspend-read-crc-pipe-a:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup suspend-read-crc-pipe-b:
dmesg-warn -> DMESG-FAIL (skl-i5k-2)
dmesg-warn -> DMESG-FAIL (skl-i7k-2)
Subgroup suspend-read-crc-pipe-c:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_psr_sink_crc:
Subgroup psr_basic:
skip -> DMESG-FAIL (skl-i5k-2)
skip -> DMESG-FAIL (skl-i7k-2)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-rte:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test pm_rps:
Subgroup basic-api:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Test prime_self_import:
Subgroup basic-llseek-bad:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-llseek-size:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-with_fd_dup:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-with_one_bo:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-with_one_bo_two_files:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup basic-with_two_bos:
pass -> DMESG-FAIL (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_1094/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-06 10:20 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-07 10:27 ` Dave Gordon
2016-01-07 13:06 ` Jani Nikula
0 siblings, 1 reply; 123+ messages in thread
From: Dave Gordon @ 2016-01-07 10:27 UTC (permalink / raw)
To: Patchwork, yu.dai; +Cc: intel-gfx
On 06/01/16 10:20, Patchwork wrote:
> == Summary ==
>
> Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
>
> Test drv_getparams_basic:
> Subgroup basic-eu-total:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-subslice-total:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test drv_hangman:
> Subgroup error-state-basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_basic:
> Subgroup bad-close:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup create-close:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup create-fd-close:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_cpu_reloc:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_ctx_create:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_ctx_exec:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_ctx_param_basic:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-default:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-ctx-get:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-ctx-set:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-param-get:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-param-set:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-size-get:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup invalid-size-set:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup non-root-set:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup non-root-set-no-zeromap:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup root-set:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup root-set-no-zeromap-disabled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup root-set-no-zeromap-enabled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_exec_parse:
> Subgroup basic-allowed:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-rejected:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Test gem_flink_basic:
> Subgroup bad-flink:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-open:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup double-flink:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup flink-lifetime:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_linear_blits:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_mmap:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-bo:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_mmap_gtt:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-copy:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-read:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-read-no-prefault:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-read-write:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-read-write-distinct:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-short:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-bo:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-bo-tiledx:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-bo-tiledy:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-copy:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-small-copy-xy:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-cpu-read-gtt:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-gtt:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-gtt-no-prefault:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-no-prefault:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-read:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-write-read-distinct:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_pread:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_pwrite:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_render_linear_blits:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_render_tiled_blits:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_storedw_loop:
> Subgroup basic-blt:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-bsd:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-render:
> dmesg-warn -> DMESG-FAIL (skl-i5k-2) UNSTABLE
> pass -> DMESG-WARN (bdw-nuci7) UNSTABLE
> pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
> dmesg-warn -> PASS (bdw-ultra) UNSTABLE
> Subgroup basic-vebox:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_tiled_blits:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test gem_tiled_fence_blits:
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test kms_addfb_basic:
> Subgroup addfb25-bad-modifier:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-framebuffer-vs-set-tiling:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-modifier-no-flag:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-x-tiled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-x-tiled-mismatch:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-y-tiled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-y-tiled-small:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup addfb25-yf-tiled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-0:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-1024:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-128:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-256:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-32:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-63:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-65536:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pitch-999:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-x-tiled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-y-tiled:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bo-too-small:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bo-too-small-due-to-tiling:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup clobberred-modifier:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup framebuffer-vs-set-tiling:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup no-handle:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup size-max:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup small-bo:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup tile-pitch-mismatch:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup too-high:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup too-wide:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup unused-handle:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup unused-modifier:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup unused-offsets:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup unused-pitches:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test kms_flip:
> Subgroup basic-flip-vs-dpms:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-flip-vs-modeset:
> pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
> pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
> Subgroup basic-flip-vs-wf_vblank:
> pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
> pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
> Subgroup basic-plain-flip:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test kms_force_connector_basic:
> Subgroup force-connector-state:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Subgroup force-edid:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Subgroup prune-stale-modes:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Test kms_pipe_crc_basic:
> Subgroup bad-nb-words-1:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-nb-words-3:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-pipe:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup bad-source:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup hang-read-crc-pipe-a:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup hang-read-crc-pipe-b:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup hang-read-crc-pipe-c:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-a:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2) UNSTABLE
> Subgroup read-crc-pipe-a-frame-sequence:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-b:
> pass -> DMESG-FAIL (skl-i5k-2) UNSTABLE
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-b-frame-sequence:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-c:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup read-crc-pipe-c-frame-sequence:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup suspend-read-crc-pipe-a:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup suspend-read-crc-pipe-b:
> dmesg-warn -> DMESG-FAIL (skl-i5k-2)
> dmesg-warn -> DMESG-FAIL (skl-i7k-2)
> Subgroup suspend-read-crc-pipe-c:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test kms_psr_sink_crc:
> Subgroup psr_basic:
> skip -> DMESG-FAIL (skl-i5k-2)
> skip -> DMESG-FAIL (skl-i7k-2)
> Test kms_setmode:
> Subgroup basic-clone-single-crtc:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test pm_rpm:
> Subgroup basic-pci-d3-state:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-rte:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test pm_rps:
> Subgroup basic-api:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Test prime_self_import:
> Subgroup basic-llseek-bad:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-llseek-size:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-with_fd_dup:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-with_one_bo:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-with_one_bo_two_files:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
> Subgroup basic-with_two_bos:
> pass -> DMESG-FAIL (skl-i5k-2)
> pass -> DMESG-FAIL (skl-i7k-2)
>
> bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
> bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
> bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
> byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
> hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
> hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
> ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
> ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
> skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
> skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
> snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
> snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
>
> Results at /archive/results/CI_IGT_test/Patchwork_1094/
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Looks like the CI SKL doesn't have the GuC firmware installed?
.Dave.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-07 10:27 ` Dave Gordon
@ 2016-01-07 13:06 ` Jani Nikula
2016-01-07 14:36 ` Daniel Vetter
0 siblings, 1 reply; 123+ messages in thread
From: Jani Nikula @ 2016-01-07 13:06 UTC (permalink / raw)
To: Dave Gordon, Patchwork, yu.dai; +Cc: intel-gfx
On Thu, 07 Jan 2016, Dave Gordon <david.s.gordon@intel.com> wrote:
> On 06/01/16 10:20, Patchwork wrote:
>> == Summary ==
>>
>> Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
>>
>> Test drv_getparams_basic:
>> Subgroup basic-eu-total:
>> pass -> DMESG-FAIL (skl-i5k-2)
>> pass -> DMESG-FAIL (skl-i7k-2)
[snip]
>>
>> bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
>> bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
>> bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
>> byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
>> hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
>> hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
>> ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
>> ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
>> skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>> skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>> snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
>> snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
>>
>> Results at /archive/results/CI_IGT_test/Patchwork_1094/
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> Looks like the CI SKL doesn't have the GuC firmware installed?
It's tons of:
[ 38.169461] [drm:intel_lr_context_deferred_alloc [i915]] *ERROR* ring create req: -5
If that gets fixed by installing the GuC firmware, the answer is *not*
to install the GuC firmware on the CI machines. The answer is to make
the driver handle missing firmware gracefully.
BR,
Jani.
>
> .Dave.
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-07 13:06 ` Jani Nikula
@ 2016-01-07 14:36 ` Daniel Vetter
2016-01-07 14:51 ` Jani Nikula
2016-01-07 15:37 ` Dave Gordon
0 siblings, 2 replies; 123+ messages in thread
From: Daniel Vetter @ 2016-01-07 14:36 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Thu, Jan 07, 2016 at 03:06:13PM +0200, Jani Nikula wrote:
> On Thu, 07 Jan 2016, Dave Gordon <david.s.gordon@intel.com> wrote:
> > On 06/01/16 10:20, Patchwork wrote:
> >> == Summary ==
> >>
> >> Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
> >>
> >> Test drv_getparams_basic:
> >> Subgroup basic-eu-total:
> >> pass -> DMESG-FAIL (skl-i5k-2)
> >> pass -> DMESG-FAIL (skl-i7k-2)
>
> [snip]
>
> >>
> >> bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
> >> bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
> >> bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
> >> byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
> >> hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
> >> hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
> >> ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
> >> ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
> >> skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
> >> skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
> >> snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
> >> snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
> >>
> >> Results at /archive/results/CI_IGT_test/Patchwork_1094/
> >>
> >> _______________________________________________
> >> Intel-gfx mailing list
> >> Intel-gfx@lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
> > Looks like the CI SKL doesn't have the GuC firmware installed?
>
> It's tons of:
>
> [ 38.169461] [drm:intel_lr_context_deferred_alloc [i915]] *ERROR* ring create req: -5
>
> If that gets fixed by installing the GuC firmware, the answer is *not*
> to install the GuC firmware on the CI machines. The answer is to make
> the driver handle missing firmware gracefully.
I kinda don't want to support 2 different ways to run things on any given
platform, because we can't even support one way properly.
But since it took forever to get guc enabled people will indeed scream if
guc isn't there, so either we enable this only for bxt and later or we
indeed need to support both cases on skl :(
Either way we do need to install guc firmware first on CI boxes, since
otherwise coverage isn't there.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-07 14:36 ` Daniel Vetter
@ 2016-01-07 14:51 ` Jani Nikula
2016-01-07 15:37 ` Dave Gordon
1 sibling, 0 replies; 123+ messages in thread
From: Jani Nikula @ 2016-01-07 14:51 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
On Thu, 07 Jan 2016, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Thu, Jan 07, 2016 at 03:06:13PM +0200, Jani Nikula wrote:
>> On Thu, 07 Jan 2016, Dave Gordon <david.s.gordon@intel.com> wrote:
>> > On 06/01/16 10:20, Patchwork wrote:
>> >> == Summary ==
>> >>
>> >> Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
>> >>
>> >> Test drv_getparams_basic:
>> >> Subgroup basic-eu-total:
>> >> pass -> DMESG-FAIL (skl-i5k-2)
>> >> pass -> DMESG-FAIL (skl-i7k-2)
>>
>> [snip]
>>
>> >>
>> >> bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
>> >> bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
>> >> bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
>> >> byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
>> >> hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
>> >> hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
>> >> ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
>> >> ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
>> >> skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>> >> skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>> >> snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
>> >> snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
>> >>
>> >> Results at /archive/results/CI_IGT_test/Patchwork_1094/
>> >>
>> >> _______________________________________________
>> >> Intel-gfx mailing list
>> >> Intel-gfx@lists.freedesktop.org
>> >> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>> >
>> > Looks like the CI SKL doesn't have the GuC firmware installed?
>>
>> It's tons of:
>>
>> [ 38.169461] [drm:intel_lr_context_deferred_alloc [i915]] *ERROR* ring create req: -5
>>
>> If that gets fixed by installing the GuC firmware, the answer is *not*
>> to install the GuC firmware on the CI machines. The answer is to make
>> the driver handle missing firmware gracefully.
>
> I kinda don't want to support 2 different ways to run things on any given
> platform, because we can't even support one way properly.
>
> But since it took forever to get guc enabled people will indeed scream if
> guc isn't there, so either we enable this only for bxt and later or we
> indeed need to support both cases on skl :(
It's probably considered a regression to add a hard requirement on guc
firmware now that skl has been running fine without. Yet we probably
want all the coverage we can get for the guc case, so I don't think we
should rely on bxt alone with that.
> Either way we do need to install guc firmware first on CI boxes, since
> otherwise coverage isn't there.
How about having guc firmware on half the CI boxes, at least for
starters. It's going to blow up anyway...
BR,
Jani.
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* Re: ✗ failure: Fi.CI.BAT
2016-01-07 14:36 ` Daniel Vetter
2016-01-07 14:51 ` Jani Nikula
@ 2016-01-07 15:37 ` Dave Gordon
1 sibling, 0 replies; 123+ messages in thread
From: Dave Gordon @ 2016-01-07 15:37 UTC (permalink / raw)
To: Daniel Vetter, Jani Nikula; +Cc: intel-gfx
On 07/01/16 14:36, Daniel Vetter wrote:
> On Thu, Jan 07, 2016 at 03:06:13PM +0200, Jani Nikula wrote:
>> On Thu, 07 Jan 2016, Dave Gordon <david.s.gordon@intel.com> wrote:
>>> On 06/01/16 10:20, Patchwork wrote:
>>>> == Summary ==
>>>>
>>>> Built on 24b053acb16b4b3b021575e4ee30ffedd3ab2920 drm-intel-nightly: 2016y-01m-06d-08h-16m-11s UTC integration manifest
>>>>
>>>> Test drv_getparams_basic:
>>>> Subgroup basic-eu-total:
>>>> pass -> DMESG-FAIL (skl-i5k-2)
>>>> pass -> DMESG-FAIL (skl-i7k-2)
>>
>> [snip]
>>
>>>>
>>>> bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
>>>> bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
>>>> bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
>>>> byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
>>>> hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
>>>> hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
>>>> ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
>>>> ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
>>>> skl-i5k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>>>> skl-i7k-2 total:135 pass:2 dwarn:0 dfail:132 fail:0 skip:1
>>>> snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
>>>> snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
>>>>
>>>> Results at /archive/results/CI_IGT_test/Patchwork_1094/
>>>>
>>>> _______________________________________________
>>>> Intel-gfx mailing list
>>>> Intel-gfx@lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>>
>>> Looks like the CI SKL doesn't have the GuC firmware installed?
>>
>> It's tons of:
>>
>> [ 38.169461] [drm:intel_lr_context_deferred_alloc [i915]] *ERROR* ring create req: -5
>>
>> If that gets fixed by installing the GuC firmware, the answer is *not*
>> to install the GuC firmware on the CI machines. The answer is to make
>> the driver handle missing firmware gracefully.
>
> I kinda don't want to support 2 different ways to run things on any given
> platform, because we can't even support one way properly.
>
> But since it took forever to get guc enabled people will indeed scream if
> guc isn't there, so either we enable this only for bxt and later or we
> indeed need to support both cases on skl :(
Yeah, we used to have that ability, until it was vetoed :(
See <20150706142822.GJ2156@phenom.ffwll.local> or
http://www.mail-archive.com/intel-gfx%40lists.freedesktop.org/msg63553.html
> Either way we do need to install guc firmware first on CI boxes, since
> otherwise coverage isn't there.
> -Daniel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Tune down rpm wakelock debug checks
@ 2016-01-05 16:54 Daniel Vetter
2016-01-06 7:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Daniel Vetter @ 2016-01-05 16:54 UTC (permalink / raw)
To: Intel Graphics Development; +Cc: Daniel Vetter, Daniel Vetter, drm-intel-fixes
They're causing massive amounts of dmesg noise and hence CI noise all
over the place. Enabling them for a bit was good enough to refresh our
task list of what's still needed to enable rpm by default.
To make sure we're not forgetting to make this noisy again add a FIXME
comment.
Fixes: da5827c36607 ("drm/i915: add assert_rpm_wakelock_held helper")
Cc: Imre Deak <imre.deak@intel.com>
Cc: drm-intel-fixes@lists.freedesktop.org
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 187f632aa0ee..d6a8a4730b91 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1453,8 +1453,10 @@ static inline void
assert_rpm_wakelock_held(struct drm_i915_private *dev_priv)
{
assert_rpm_device_not_suspended(dev_priv);
- WARN_ONCE(!atomic_read(&dev_priv->pm.wakeref_count),
- "RPM wakelock ref not held during HW access");
+ /* FIXME: Needs to be converted back to WARN_ONCE, but currently causes
+ * too much noise. */
+ if (!atomic_read(&dev_priv->pm.wakeref_count))
+ DRM_DEBUG_DRIVER("RPM wakelock ref not held during HW access");
}
static inline int
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-05 16:54 [PATCH] drm/i915: Tune down rpm wakelock debug checks Daniel Vetter
@ 2016-01-06 7:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-06 7:49 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
== Summary ==
Built on bc303261a81a96298b2f9e02734aeaa0a25421a6 drm-intel-nightly: 2016y-01m-05d-16h-47m-54s UTC integration manifest
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
Test kms_addfb_basic:
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-flip-vs-modeset:
dmesg-warn -> PASS (hsw-brixbox) UNSTABLE
Subgroup basic-flip-vs-wf_vblank:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (hsw-gt2) UNSTABLE
dmesg-warn -> PASS (bdw-ultra) UNSTABLE
dmesg-warn -> PASS (skl-i7k-2) UNSTABLE
dmesg-warn -> PASS (ivb-t430s) UNSTABLE
dmesg-warn -> PASS (byt-nuc) UNSTABLE
dmesg-warn -> PASS (snb-x220t) UNSTABLE
dmesg-warn -> PASS (snb-dellxps) UNSTABLE
dmesg-warn -> PASS (hsw-brixbox) UNSTABLE
Subgroup basic-plain-flip:
dmesg-warn -> PASS (ivb-t430s)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a:
dmesg-warn -> PASS (snb-x220t) UNSTABLE
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (skl-i5k-2) UNSTABLE
dmesg-warn -> PASS (snb-dellxps) UNSTABLE
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-c-frame-sequence:
dmesg-warn -> PASS (bsw-nuc-2) UNSTABLE
Test kms_psr_sink_crc:
Subgroup psr_basic:
dmesg-warn -> PASS (bdw-ultra)
Test pm_rpm:
Subgroup basic-rte:
pass -> DMESG-WARN (byt-nuc) UNSTABLE
bdw-ultra total:132 pass:126 dwarn:0 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:128 dwarn:0 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:131 dwarn:0 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:129 dwarn:0 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:125 dwarn:2 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:120 dwarn:6 dfail:1 fail:0 skip:8
snb-dellxps total:135 pass:123 dwarn:0 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:123 dwarn:0 dfail:0 fail:1 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_1090/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Force clean compilation with -Werror
@ 2016-01-04 10:13 Chris Wilson
2016-01-04 11:01 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Chris Wilson @ 2016-01-04 10:13 UTC (permalink / raw)
To: intel-gfx; +Cc: Jani Nikula
Our driver compiles clean (nowadays thanks to 0day) but for me, at least,
it would be beneficial if the compiler threw an error rather than a
warning when it found a piece of suspect code. (I use this to
compile-check patch series and want to break on the first compiler error
in order to fix the patch.)
v2: Kick off a new "Debugging" submenu for i915.ko
At this point, we applied it to the kernel and promptly kicked it out
again as it broke buildbots (due to a compiler warning on 32bits):
commit 908d759b210effb33d927a8cb6603a16448474e4
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date: Tue May 26 07:46:21 2015 +0200
Revert "drm/i915: Force clean compilation with -Werror"
v3: Avoid enabling -Werror for allyesconfig/allmodconfig builds, using
COMPILE_TEST as a suitable proxy suggested by Andrew Morton. (Damien)
Only make the option available for EXPERT to reinforce that the option
should not be casually enabled.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Damien Lespiau <damien.lespiau@intel.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
This is a test! I'm seeing whether I can route git send-email through gmail.
Thanks for your patience.
-Chris
---
drivers/gpu/drm/i915/Kconfig | 6 ++++++
drivers/gpu/drm/i915/Kconfig.debug | 12 ++++++++++++
drivers/gpu/drm/i915/Makefile | 2 ++
3 files changed, 20 insertions(+)
create mode 100644 drivers/gpu/drm/i915/Kconfig.debug
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index b979295aab82..33e8563c2f99 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -59,3 +59,9 @@ config DRM_I915_USERPTR
selected to enabled full userptr support.
If in doubt, say "Y".
+
+menu "drm/i915 Debugging"
+depends on DRM_I915
+depends on EXPERT
+source drivers/gpu/drm/i915/Kconfig.debug
+endmenu
diff --git a/drivers/gpu/drm/i915/Kconfig.debug b/drivers/gpu/drm/i915/Kconfig.debug
new file mode 100644
index 000000000000..1f10ee228eda
--- /dev/null
+++ b/drivers/gpu/drm/i915/Kconfig.debug
@@ -0,0 +1,12 @@
+config DRM_I915_WERROR
+ bool "Force GCC to throw an error instead of a warning when compiling"
+ default n
+ # As this may inadvertently break the build, only allow the user
+ # to shoot oneself in the foot iff they aim really hard
+ depends on EXPERT
+ # We use the dependency on !COMPILE_TEST to not be enabled in
+ # allmodconfig or allyesconfig configurations
+ depends on !COMPILE_TEST
+ ---help---
+ Add -Werror to the build flags for (and only for) i915.ko.
+ Do not enable this unless you are writing code for the i915.ko module.
diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index 0851de07bd13..1e9895b9a546 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -2,6 +2,8 @@
# Makefile for the drm device driver. This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
+subdir-ccflags-$(CONFIG_DRM_I915_WERROR) := -Werror
+
# Please keep these build lists sorted!
# core driver code
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 1/3] drm: Balance error path for GEM handle allocation
@ 2016-01-04 10:10 Chris Wilson
2016-01-04 10:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Chris Wilson @ 2016-01-04 10:10 UTC (permalink / raw)
To: dri-devel; +Cc: intel-gfx
The current error path for failure when establishing a handle for a GEM
object is unbalance, e.g. we call object_close() without calling first
object_open(). Use the typical onion structure to only undo what has
been set up prior to the error.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/drm_gem.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 2e10bba4468b..a08176debc0e 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -343,27 +343,32 @@ drm_gem_handle_create_tail(struct drm_file *file_priv,
spin_unlock(&file_priv->table_lock);
idr_preload_end();
mutex_unlock(&dev->object_name_lock);
- if (ret < 0) {
- drm_gem_object_handle_unreference_unlocked(obj);
- return ret;
- }
+ if (ret < 0)
+ goto err_unref;
+
*handlep = ret;
ret = drm_vma_node_allow(&obj->vma_node, file_priv->filp);
- if (ret) {
- drm_gem_handle_delete(file_priv, *handlep);
- return ret;
- }
+ if (ret)
+ goto err_remove;
if (dev->driver->gem_open_object) {
ret = dev->driver->gem_open_object(obj, file_priv);
- if (ret) {
- drm_gem_handle_delete(file_priv, *handlep);
- return ret;
- }
+ if (ret)
+ goto err_revoke;
}
return 0;
+
+err_revoke:
+ drm_vma_node_revoke(&obj->vma_node, file_priv->filp);
+err_remove:
+ spin_lock(&file_priv->table_lock);
+ idr_remove(&file_priv->object_idr, *handlep);
+ spin_unlock(&file_priv->table_lock);
+err_unref:
+ drm_gem_object_handle_unreference_unlocked(obj);
+ return ret;
}
/**
--
2.6.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2016-01-04 10:10 [PATCH 1/3] drm: Balance error path for GEM handle allocation Chris Wilson
@ 2016-01-04 10:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-04 10:49 UTC (permalink / raw)
To: Chris Wilson; +Cc: intel-gfx
== Summary ==
Built on c1e9dc2dcb577438a6350c7f1cb36ba8ad0e1dfd drm-intel-nightly: 2016y-01m-04d-09h-35m-16s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-plain-flip:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a-frame-sequence:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (snb-dellxps)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
pass -> DMESG-WARN (snb-dellxps)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i7k-2)
bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:120 dwarn:2 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:126 dwarn:2 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:130 dwarn:1 dfail:0 fail:0 skip:4
hsw-xps12 total:132 pass:125 dwarn:3 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:99 dwarn:1 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:124 dwarn:3 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:101 dwarn:22 dfail:3 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:121 dwarn:2 dfail:0 fail:1 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_1063/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Add RPM references in the *_get_hw_state functions
@ 2015-12-31 12:45 Gabriel Feceoru
2015-12-31 13:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Gabriel Feceoru @ 2015-12-31 12:45 UTC (permalink / raw)
To: intel-gfx
This gets rid of errors like:
[ 906.286213] ------------[ cut here ]------------
[ 906.286233] WARNING: CPU: 0 PID: 12252 at drivers/gpu/drm/i915/intel_drv.h:1457 gen6_read32+0x1ca/0x1e0 [i915]()
[ 906.286234] RPM wakelock ref not held during HW access
[ 906.286235] Modules linked in:
[ 906.286236] snd_hda_intel i915 drm_kms_helper drm msr snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic snd_hda_codec snd_hwdep x86_pkg_temp_thermal snd_hda_core i2c_algo_bit ehci_pci syscopyarea sysfillrect sysimgblt fb_sys_fops ehci_hcd r8169 xhci_pci mii xhci_hcd video [last unloaded: drm]
[ 906.286246] CPU: 0 PID: 12252 Comm: kms_pipe_crc_ba Tainted: G U W 4.4.0-rc6+ #45
[ 906.286247] Hardware name: Dell Inc. Inspiron 3847/088DT1 , BIOS A06 01/15/2015
[ 906.286248] ffffffffc022c098 ffff880210dbbae0 ffffffff813e0e4f ffff880210dbbb28
[ 906.286250] ffff880210dbbb18 ffffffff8105f5f2 ffff8801fff40000 0000000000046040
[ 906.286251] ffff8801fff49170 ffff8801fff49170 ffff8801fff40000 ffff880210dbbb78
[ 906.286253] Call Trace:
[ 906.286256] [<ffffffff813e0e4f>] dump_stack+0x44/0x55
[ 906.286259] [<ffffffff8105f5f2>] warn_slowpath_common+0x82/0xc0
[ 906.286261] [<ffffffff8105f67c>] warn_slowpath_fmt+0x4c/0x50
[ 906.286270] [<ffffffffc007e29c>] ? drm_property_free_blob+0x8c/0xb0 [drm]
[ 906.286280] [<ffffffffc01a32ea>] gen6_read32+0x1ca/0x1e0 [i915]
[ 906.286283] [<ffffffff8172cd12>] ? mutex_lock+0x12/0x30
[ 906.286294] [<ffffffffc01e0ef0>] hsw_ddi_wrpll_get_hw_state+0x40/0x50 [i915]
[ 906.286304] [<ffffffffc01c3fa1>] intel_atomic_commit+0xd41/0x1740 [i915]
[ 906.286312] [<ffffffffc008c597>] drm_atomic_commit+0x37/0x60 [drm]
[ 906.286316] [<ffffffffc01373e6>] drm_atomic_helper_set_config+0x76/0xb0 [drm_kms_helper]
[ 906.286323] [<ffffffffc008ac0a>] ? drm_modeset_lock_all_ctx+0x9a/0xb0 [drm]
[ 906.286329] [<ffffffffc007b852>] drm_mode_set_config_internal+0x62/0x100 [drm]
[ 906.286335] [<ffffffffc007fcfd>] drm_mode_setcrtc+0x3cd/0x4e0 [drm]
[ 906.286339] [<ffffffffc0071762>] drm_ioctl+0x152/0x540 [drm]
[ 906.286341] [<ffffffff8109d914>] ? __wake_up+0x44/0x50
[ 906.286346] [<ffffffffc007f930>] ? drm_mode_setplane+0x1b0/0x1b0 [drm]
[ 906.286348] [<ffffffff811dc844>] ? mntput+0x24/0x40
[ 906.286350] [<ffffffff811bfe22>] ? __fput+0x172/0x1e0
[ 906.286352] [<ffffffff811d0758>] do_vfs_ioctl+0x288/0x460
[ 906.286353] [<ffffffff811bfece>] ? ____fput+0xe/0x10
Signed-off-by: Gabriel Feceoru <gabriel.feceoru@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 48 ++++++++++++++++++++++++++++++----------
1 file changed, 36 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index e6408e5..4ba9f2c 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2014,15 +2014,18 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
enum intel_display_power_domain power_domain;
u32 tmp;
int i;
+ bool ret = false;
power_domain = intel_display_port_power_domain(encoder);
if (!intel_display_power_is_enabled(dev_priv, power_domain))
- return false;
+ return ret;
+
+ intel_runtime_pm_get(dev_priv);
tmp = I915_READ(DDI_BUF_CTL(port));
if (!(tmp & DDI_BUF_CTL_ENABLE))
- return false;
+ goto out;
if (port == PORT_A) {
tmp = I915_READ(TRANS_DDI_FUNC_CTL(TRANSCODER_EDP));
@@ -2040,7 +2043,8 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
break;
}
- return true;
+ ret = true;
+ goto out;
} else {
for (i = TRANSCODER_A; i <= TRANSCODER_C; i++) {
tmp = I915_READ(TRANS_DDI_FUNC_CTL(i));
@@ -2048,17 +2052,19 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder,
if ((tmp & TRANS_DDI_PORT_MASK)
== TRANS_DDI_SELECT_PORT(port)) {
if ((tmp & TRANS_DDI_MODE_SELECT_MASK) == TRANS_DDI_MODE_SELECT_DP_MST)
- return false;
+ goto out;
*pipe = i;
- return true;
+ ret = true;
+ goto out;
}
}
}
DRM_DEBUG_KMS("No pipe for ddi port %c found\n", port_name(port));
-
- return false;
+out:
+ intel_runtime_pm_put(dev_priv);
+ return ret;
}
void intel_ddi_enable_pipe_clock(struct intel_crtc *intel_crtc)
@@ -2510,7 +2516,10 @@ static bool hsw_ddi_wrpll_get_hw_state(struct drm_i915_private *dev_priv,
if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
return false;
+ intel_runtime_pm_get(dev_priv);
val = I915_READ(WRPLL_CTL(pll->id));
+ intel_runtime_pm_put(dev_priv);
+
hw_state->wrpll = val;
return val & WRPLL_PLL_ENABLE;
@@ -2525,7 +2534,10 @@ static bool hsw_ddi_spll_get_hw_state(struct drm_i915_private *dev_priv,
if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
return false;
+ intel_runtime_pm_get(dev_priv);
val = I915_READ(SPLL_CTL);
+ intel_runtime_pm_put(dev_priv);
+
hw_state->spll = val;
return val & SPLL_PLL_ENABLE;
@@ -2644,16 +2656,19 @@ static bool skl_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
uint32_t val;
unsigned int dpll;
const struct skl_dpll_regs *regs = skl_dpll_regs;
+ bool ret = false;
if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
- return false;
+ return ret;
/* DPLL0 is not part of the shared DPLLs, so pll->id is 0 for DPLL1 */
dpll = pll->id + 1;
+ intel_runtime_pm_get(dev_priv);
+
val = I915_READ(regs[pll->id].ctl);
if (!(val & LCPLL_PLL_ENABLE))
- return false;
+ goto out;
val = I915_READ(DPLL_CTRL1);
hw_state->ctrl1 = (val >> (dpll * 6)) & 0x3f;
@@ -2664,6 +2679,9 @@ static bool skl_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
hw_state->cfgcr2 = I915_READ(regs[pll->id].cfgcr2);
}
+ ret = true;
+out:
+ intel_runtime_pm_put(dev_priv);
return true;
}
@@ -2931,13 +2949,16 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
{
enum port port = (enum port)pll->id; /* 1:1 port->PLL mapping */
uint32_t val;
+ bool ret = false;
if (!intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_PLLS))
- return false;
+ return ret;
+
+ intel_runtime_pm_get(dev_priv);
val = I915_READ(BXT_PORT_PLL_ENABLE(port));
if (!(val & PORT_PLL_ENABLE))
- return false;
+ goto out;
hw_state->ebb0 = I915_READ(BXT_PORT_PLL_EBB_0(port));
hw_state->ebb0 &= PORT_PLL_P1_MASK | PORT_PLL_P2_MASK;
@@ -2984,7 +3005,10 @@ static bool bxt_ddi_pll_get_hw_state(struct drm_i915_private *dev_priv,
I915_READ(BXT_PORT_PCS_DW12_LN23(port)));
hw_state->pcsdw12 &= LANE_STAGGER_MASK | LANESTAGGER_STRAP_OVRD;
- return true;
+ ret = true;
+out:
+ intel_runtime_pm_put(dev_priv);
+ return ret;
}
static void bxt_shared_dplls_init(struct drm_i915_private *dev_priv)
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-31 12:45 [PATCH] drm/i915: Add RPM references in the *_get_hw_state functions Gabriel Feceoru
@ 2015-12-31 13:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-31 13:20 UTC (permalink / raw)
To: Feceoru, Gabriel; +Cc: intel-gfx
== Summary ==
Built on 79686f613b3955a4ed09cee936e7f70ec4e61b67 drm-intel-nightly: 2015y-12m-30d-11h-59m-54s UTC integration manifest
Test gem_basic:
Subgroup create-close:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_cpu_reloc:
Subgroup basic:
pass -> DMESG-FAIL (skl-i7k-2)
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup non-root-set-no-zeromap:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup root-set-no-zeromap-disabled:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-read:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2)
dmesg-warn -> PASS (skl-i7k-2)
Test kms_addfb_basic:
Subgroup addfb25-modifier-no-flag:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup addfb25-x-tiled-mismatch:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-1024:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-63:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup bad-pitch-999:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup clobberred-modifier:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-high:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup unused-offsets:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
dmesg-warn -> PASS (bsw-nuc-2)
dmesg-warn -> PASS (hsw-brixbox)
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-plain-flip:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (snb-x220t)
pass -> DMESG-WARN (bdw-ultra)
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_force_connector_basic:
Subgroup force-connector-state:
pass -> SKIP (snb-x220t)
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup hang-read-crc-pipe-b:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup hang-read-crc-pipe-c:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-a:
pass -> DMESG-WARN (skl-i5k-2)
dmesg-warn -> PASS (snb-x220t)
pass -> DMESG-WARN (skl-i7k-2)
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (snb-dellxps)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-FAIL (skl-i7k-2)
Subgroup read-crc-pipe-c:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-c-frame-sequence:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup suspend-read-crc-pipe-a:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup suspend-read-crc-pipe-c:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Test kms_psr_sink_crc:
Subgroup psr_basic:
dmesg-warn -> PASS (bdw-ultra)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
dmesg-warn -> PASS (snb-dellxps)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup basic-rte:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (skl-i7k-2)
Test prime_self_import:
Subgroup basic-with_two_bos:
pass -> DMESG-WARN (skl-i7k-2)
bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:120 dwarn:2 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:127 dwarn:1 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:130 dwarn:1 dfail:0 fail:0 skip:4
hsw-xps12 total:132 pass:125 dwarn:3 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:108 dwarn:19 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:89 dwarn:34 dfail:3 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:120 dwarn:2 dfail:0 fail:1 skip:12
Results at /archive/results/CI_IGT_test/Patchwork_981/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/bxt: Fix eDP panel power save/restore
@ 2015-12-30 22:56 Matt Roper
2015-12-31 7:43 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Matt Roper @ 2015-12-30 22:56 UTC (permalink / raw)
To: intel-gfx; +Cc: drm-intel-fixes
Broxton-specific panel power sequencing was added in commit
commit b0a08bec96318be54db97c3f0b9e37b52561f9ea
Author: Vandana Kannan <vandana.kannan@intel.com>
Date: Thu Jun 18 11:00:55 2015 +0530
drm/i915/bxt: eDP Panel Power sequencing
As noted in that commit, Broxton has two sets of registers (and we're
supposed to read which to use from the VBT, although we're punting on
that part at the moment) and also doesn't have a divisor register.
Although we take the BXT-specific details into account at initial system
init, we fail to save/restore the appropriate registers around system
suspend/resume, which leads to unclaimed register warnings at the
moment, and may also fail to save the proper registers once we start
actually paying attention to the VBT.
Cc: Vandana Kannan <vandana.kannan@intel.com>
Cc: drm-intel-fixes@lists.freedesktop.org
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/i915/i915_suspend.c | 24 ++++++++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
index bf582fe..61bec8e 100644
--- a/drivers/gpu/drm/i915/i915_suspend.c
+++ b/drivers/gpu/drm/i915/i915_suspend.c
@@ -44,7 +44,18 @@ static void i915_save_display(struct drm_device *dev)
dev_priv->regfile.saveLVDS = I915_READ(LVDS);
/* Panel power sequencer */
- if (HAS_PCH_SPLIT(dev)) {
+ if (IS_BROXTON(dev)) {
+ /*
+ * TODO: BXT has 2 sets of PPS registers.
+ * Correct Register for Broxton need to be identified
+ * using VBT. hardcoding for now.
+ *
+ * There's also no divisor register on Broxton.
+ */
+ dev_priv->regfile.savePP_CONTROL = I915_READ(BXT_PP_CONTROL(0));
+ dev_priv->regfile.savePP_ON_DELAYS = I915_READ(BXT_PP_ON_DELAYS(0));
+ dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(BXT_PP_OFF_DELAYS(0));
+ } else if (HAS_PCH_SPLIT(dev)) {
dev_priv->regfile.savePP_CONTROL = I915_READ(PCH_PP_CONTROL);
dev_priv->regfile.savePP_ON_DELAYS = I915_READ(PCH_PP_ON_DELAYS);
dev_priv->regfile.savePP_OFF_DELAYS = I915_READ(PCH_PP_OFF_DELAYS);
@@ -83,7 +94,16 @@ static void i915_restore_display(struct drm_device *dev)
I915_WRITE(LVDS, dev_priv->regfile.saveLVDS & mask);
/* Panel power sequencer */
- if (HAS_PCH_SPLIT(dev)) {
+ if (IS_BROXTON(dev)) {
+ /*
+ * TODO: BXT has 2 sets of PPS registers.
+ * Correct Register for Broxton need to be identified
+ * using VBT. hardcoding for now
+ */
+ I915_WRITE(BXT_PP_ON_DELAYS(0), dev_priv->regfile.savePP_ON_DELAYS);
+ I915_WRITE(BXT_PP_OFF_DELAYS(0), dev_priv->regfile.savePP_OFF_DELAYS);
+ I915_WRITE(BXT_PP_CONTROL(0), dev_priv->regfile.savePP_CONTROL);
+ } else if (HAS_PCH_SPLIT(dev)) {
I915_WRITE(PCH_PP_ON_DELAYS, dev_priv->regfile.savePP_ON_DELAYS);
I915_WRITE(PCH_PP_OFF_DELAYS, dev_priv->regfile.savePP_OFF_DELAYS);
I915_WRITE(PCH_PP_DIVISOR, dev_priv->regfile.savePP_DIVISOR);
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-30 22:56 [PATCH] drm/i915/bxt: Fix eDP panel power save/restore Matt Roper
@ 2015-12-31 7:43 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-31 7:43 UTC (permalink / raw)
To: Matt Roper; +Cc: intel-gfx
== Summary ==
Built on 79686f613b3955a4ed09cee936e7f70ec4e61b67 drm-intel-nightly: 2015y-12m-30d-11h-59m-54s UTC integration manifest
Test gem_ctx_param_basic:
Subgroup basic:
pass -> DMESG-WARN (skl-i7k-2)
Subgroup invalid-param-set:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_mmap_gtt:
Subgroup basic-write:
pass -> DMESG-WARN (skl-i7k-2)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2)
Test kms_addfb_basic:
Subgroup too-wide:
pass -> DMESG-WARN (skl-i7k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
dmesg-warn -> PASS (bsw-nuc-2)
dmesg-warn -> PASS (hsw-xps12)
dmesg-warn -> PASS (hsw-brixbox)
dmesg-warn -> PASS (bdw-nuci7)
dmesg-warn -> PASS (ilk-hp8440p)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a:
dmesg-warn -> PASS (snb-x220t)
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (snb-dellxps)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-FAIL (skl-i7k-2)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
dmesg-warn -> PASS (snb-dellxps)
Test pm_rpm:
Subgroup basic-rte:
dmesg-warn -> PASS (byt-nuc)
bdw-nuci7 total:132 pass:122 dwarn:1 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:121 dwarn:1 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:127 dwarn:1 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:130 dwarn:1 dfail:0 fail:0 skip:4
hsw-xps12 total:132 pass:126 dwarn:2 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:124 dwarn:3 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:119 dwarn:7 dfail:1 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:122 dwarn:1 dfail:0 fail:1 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_970/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: increase the tries for HDMI hotplug live status checking
@ 2015-12-23 8:11 Gary Wang
2015-12-23 8:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Gary Wang @ 2015-12-23 8:11 UTC (permalink / raw)
To: intel-gfx; +Cc: Shobhit Kumar
The total delay of HDMI hotplug detecting with 30ms is sometimes not
enoughtfor HDMI live status up with specific HDMI monitors in BSW platform.
After doing experiments for following monitors, it needs 80ms at least
for those worst cases.
Lenovo L246 1xwA (4 failed, necessary hot-plug delay: 58/40/60/40ms)
Philips HH2AP (9 failed, necessary hot-plug delay: 80/50/50/60/46/40/58/58/39ms)
BENQ ET-0035-N (6 failed, necessary hot-plug delay: 60/50/50/80/80/40ms)
DELL U2713HM (2 failed, necessary hot-plug delay: 58/59ms)
HP HP-LP2475w (5 failed, necessary hot-plug delay: 70/50/40/60/40ms)
It looks like 70-80 ms is BSW platform needs in some bad cases of the
monitors at this end (8 times delay at most). Keep less than 100ms for
HDCP pulse HPD low (with at least 100ms) to respond a plug out.
Reviewed-by: Cooper Chiou <cooper.chiou@intel.com>
Tested-by: Gary Wang <gary.c.wang@intel.com>
Cc: Gavin Hindman <gavin.hindman@intel.com>
Cc: Sonika Jindal <sonika.jindal@intel.com>
Cc: Shashank Sharma <shashank.sharma@intel.com>
Cc: Shobhit Kumar <shobhit.kumar@intel.com>
Signed-off-by: Gary Wang <gary.c.wang@intel.com>
---
drivers/gpu/drm/i915/intel_hdmi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
mode change 100644 => 100755 drivers/gpu/drm/i915/intel_hdmi.c
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
old mode 100644
new mode 100755
index 6214175..4a77639
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1392,7 +1392,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);
- for (try = 0; !live_status && try < 4; try++) {
+ for (try = 0; !live_status && try < 9; try++) {
if (try)
msleep(10);
live_status = intel_digital_port_connected(dev_priv,
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-23 8:11 [PATCH] drm/i915: increase the tries for HDMI hotplug live status checking Gary Wang
@ 2015-12-23 8:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-23 8:49 UTC (permalink / raw)
To: Gary Wang; +Cc: intel-gfx
== Summary ==
Built on 7e671e69deffb88d60687dacffe6e34a5d046500 drm-intel-nightly: 2015y-12m-22d-13h-28m-34s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
dmesg-warn -> PASS (bsw-nuc-2)
dmesg-warn -> PASS (hsw-xps12)
pass -> DMESG-WARN (hsw-brixbox)
dmesg-warn -> PASS (ilk-hp8440p)
dmesg-warn -> PASS (byt-nuc)
Subgroup basic-flip-vs-wf_vblank:
dmesg-warn -> PASS (snb-x220t)
Subgroup basic-plain-flip:
pass -> DMESG-WARN (hsw-xps12)
pass -> DMESG-WARN (bdw-nuci7)
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> DMESG-WARN (snb-x220t)
Subgroup read-crc-pipe-a:
pass -> DMESG-WARN (snb-x220t)
Subgroup read-crc-pipe-a-frame-sequence:
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (skl-i5k-2)
Subgroup read-crc-pipe-c:
pass -> DMESG-WARN (skl-i5k-2)
Test kms_psr_sink_crc:
Subgroup psr_basic:
dmesg-warn -> PASS (bdw-ultra)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> DMESG-WARN (bdw-ultra)
bdw-nuci7 total:132 pass:121 dwarn:2 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:120 dwarn:2 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:126 dwarn:2 dfail:0 fail:0 skip:7
hsw-xps12 total:132 pass:125 dwarn:3 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:123 dwarn:4 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:124 dwarn:3 dfail:0 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:121 dwarn:2 dfail:0 fail:1 skip:11
HANGED hsw-gt2 in igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c
Results at /archive/results/CI_IGT_test/Patchwork_801/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm, i915: Fix pointer size cast
@ 2015-12-21 18:53 Borislav Petkov
2015-12-22 7:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Borislav Petkov @ 2015-12-21 18:53 UTC (permalink / raw)
To: LKML; +Cc: Daniel Vetter, Jani Nikula, David Airlie, intel-gfx, dri-devel
From: Borislav Petkov <bp@suse.de>
gcc complains on 32-bit like this:
drivers/gpu/drm/i915/intel_display.c: In function ‘intel_plane_obj_offset’:
drivers/gpu/drm/i915/intel_display.c:2954:11: warning: cast to pointer from \
integer of different size [-Wint-to-pointer-cast]
offset = (unsigned char *)vma->node.start;
^
because vma->node.start is u64 but a pointer on 32-bit is 4 bytes.
Do the calculations with an unsigned long directly and save us the
casts.
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Borislav Petkov <bp@suse.de>
---
drivers/gpu/drm/i915/intel_display.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 62211abe4922..640cb7c9b7f3 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2941,7 +2941,7 @@ unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
{
const struct i915_ggtt_view *view = &i915_ggtt_view_normal;
struct i915_vma *vma;
- unsigned char *offset;
+ unsigned long offset;
if (intel_rotation_90_or_270(intel_plane->base.state->rotation))
view = &i915_ggtt_view_rotated;
@@ -2951,14 +2951,14 @@ unsigned long intel_plane_obj_offset(struct intel_plane *intel_plane,
view->type))
return -1;
- offset = (unsigned char *)vma->node.start;
+ offset = vma->node.start;
if (plane == 1) {
offset += vma->ggtt_view.rotation_info.uv_start_page *
PAGE_SIZE;
}
- return (unsigned long)offset;
+ return offset;
}
static void skl_detach_scaler(struct intel_crtc *intel_crtc, int id)
--
2.3.5
^ permalink raw reply related [flat|nested] 123+ messages in thread
* improve handling of the driver's internal default context
@ 2015-12-21 16:04 Dave Gordon
2015-12-22 7:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Dave Gordon @ 2015-12-21 16:04 UTC (permalink / raw)
To: intel-gfx
A collection of patches to simplify the creation, use, and destruction
of the driver's global default context.
The first two simplify the many places where the code treats the
global default context differently from any other context:
[1/6] drm/i915: mark the global default (intel_)context as such
[2/6] drm/i915: simplify testing for the global default context
Then we hide the use of the global-default-context from callers who
don't need to know how non-batch-related requests are implemented
internally:
[3/6] drm/i915: simplify allocation of driver-internal requests
And get rid of the multiple references to the default context, one
from each engine (but all pointing to the same structure). This
allows the refcount and the number of references to match!
[4/6] drm/i915: abolish separate per-engine default_context
Finally, fix some incorrect failure paths and tidy up the
corresponding teardown code:
[5/6] drm/i915: tidy up initialisation failure paths (legacy)
[6/6] drm/i915: tidy up initialisation failure paths (GEM &
These should make subsequent reorganisation of other startup/teardown
code easier and safer.
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-21 16:04 improve handling of the driver's internal default context Dave Gordon
@ 2015-12-22 7:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-22 7:20 UTC (permalink / raw)
To: Dave Gordon; +Cc: intel-gfx
== Summary ==
Built on 78deeec98b10627fe2050ce8ebfa2ea2d5b9e6c7 drm-intel-nightly: 2015y-12m-21d-16h-03m-57s UTC integration manifest
Test gem_mmap_gtt:
Subgroup basic-small-bo:
dmesg-warn -> PASS (bdw-nuci7)
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (bdw-nuci7)
Test kms_flip:
Subgroup basic-flip-vs-modeset:
pass -> DMESG-WARN (skl-i5k-2)
pass -> DMESG-WARN (hsw-xps12)
dmesg-warn -> PASS (hsw-brixbox)
skip -> DMESG-WARN (bdw-nuci7)
Subgroup basic-plain-flip:
skip -> PASS (bdw-nuci7)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a:
pass -> DMESG-WARN (snb-x220t)
skip -> PASS (bdw-nuci7)
dmesg-warn -> PASS (byt-nuc)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> FAIL (snb-x220t)
skip -> PASS (bdw-nuci7)
pass -> DMESG-WARN (ilk-hp8440p)
Subgroup read-crc-pipe-b:
dmesg-warn -> PASS (skl-i5k-2)
dmesg-warn -> PASS (hsw-xps12)
pass -> DMESG-WARN (snb-dellxps)
skip -> PASS (bdw-nuci7)
Subgroup read-crc-pipe-b-frame-sequence:
skip -> PASS (bdw-nuci7)
Subgroup read-crc-pipe-c:
skip -> PASS (bdw-nuci7)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
dmesg-warn -> PASS (snb-dellxps)
Test pm_rpm:
Subgroup basic-pci-d3-state:
skip -> PASS (bdw-nuci7)
pass -> DMESG-WARN (bdw-ultra)
Subgroup basic-rte:
skip -> PASS (bdw-nuci7)
dmesg-warn -> PASS (bdw-ultra)
bdw-nuci7 total:132 pass:120 dwarn:3 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:120 dwarn:2 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:127 dwarn:1 dfail:0 fail:0 skip:7
hsw-xps12 total:132 pass:125 dwarn:3 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:99 dwarn:1 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:121 dwarn:6 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:122 dwarn:5 dfail:0 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:120 dwarn:2 dfail:0 fail:2 skip:11
HANGED hsw-gt2 in igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b
Results at /archive/results/CI_IGT_test/Patchwork_783/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [RFC v2] drm/i915/bdw+: Do not emit user interrupts when not needed
@ 2015-12-21 15:33 Tvrtko Ursulin
2015-12-21 17:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Tvrtko Ursulin @ 2015-12-21 15:33 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Currently a single request submission in execlist mode results
in two emitted interrupts. First the user interrupt arrives and
is then followed by the context complete interrupt. (This time
delay is caused by the time taken by the GPU to write out the
context and update the CSB.)
This also means every individual batch submission, and also the
end of the coalesced request submission, will result in two
interrupts instead of potentially one.
If we make sure that the last or solitary request does not emit
the MI_USER_INTERRUPT, but instead rely on context complete to
wake up the waiters, we can reduce the CPU time spent in
interrupt handlers.
In some interrupt heavy benchmarks this can be even 50% fewer
interrupts and 1-2% reduced CPU usage (it halved the time spent
in interrupt handlers on an i7 BDW). But on the other hand this
also has the theoretical potential of increasing the wake-up
latency (see earlier reference for the delay between emitting
the user interrupt and context complete).
v2: Clear MI_USER_INTERRUPT instructions when applicable
rather than emitting them for potentially more robustness
and not breaking GuC submission.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
I failed to find a benchmark, or a test, which would reliably
show a win (or lose) with this patch.
Therefore I do not think it is worth the complexity and am
filing it for reference only.
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_irq.c | 24 ++++++++++++------------
drivers/gpu/drm/i915/intel_lrc.c | 37 +++++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9b82c4532893..94d1084a090b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2825,6 +2825,7 @@ ibx_disable_display_interrupt(struct drm_i915_private *dev_priv, uint32_t bits)
ibx_display_interrupt_update(dev_priv, bits, 0);
}
+void intel_notify_ring(struct intel_engine_cs *ring);
/* i915_gem.c */
int i915_gem_create_ioctl(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 3f8c753997ba..a2087bad0d64 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -994,7 +994,7 @@ static void ironlake_rps_change_irq_handler(struct drm_device *dev)
return;
}
-static void notify_ring(struct intel_engine_cs *ring)
+void intel_notify_ring(struct intel_engine_cs *ring)
{
if (!intel_ring_initialized(ring))
return;
@@ -1291,9 +1291,9 @@ static void ilk_gt_irq_handler(struct drm_device *dev,
{
if (gt_iir &
(GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (gt_iir & ILK_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
}
static void snb_gt_irq_handler(struct drm_device *dev,
@@ -1303,11 +1303,11 @@ static void snb_gt_irq_handler(struct drm_device *dev,
if (gt_iir &
(GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (gt_iir & GT_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
if (gt_iir & GT_BLT_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[BCS]);
+ intel_notify_ring(&dev_priv->ring[BCS]);
if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
GT_BSD_CS_ERROR_INTERRUPT |
@@ -1322,7 +1322,7 @@ static __always_inline void
gen8_cs_irq_handler(struct intel_engine_cs *ring, u32 iir, int test_shift)
{
if (iir & (GT_RENDER_USER_INTERRUPT << test_shift))
- notify_ring(ring);
+ intel_notify_ring(ring);
if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << test_shift))
intel_lrc_irq_handler(ring);
}
@@ -1629,7 +1629,7 @@ static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
if (HAS_VEBOX(dev_priv->dev)) {
if (pm_iir & PM_VEBOX_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VECS]);
+ intel_notify_ring(&dev_priv->ring[VECS]);
if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
@@ -3961,7 +3961,7 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
new_iir = I915_READ16(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
for_each_pipe(dev_priv, pipe) {
int plane = pipe;
@@ -4157,7 +4157,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
for_each_pipe(dev_priv, pipe) {
int plane = pipe;
@@ -4387,9 +4387,9 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (iir & I915_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
for_each_pipe(dev_priv, pipe) {
if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS &&
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 27f06198a51e..173b3faf5a2a 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -359,6 +359,20 @@ static void execlists_elsp_write(struct drm_i915_gem_request *rq0,
spin_unlock(&dev_priv->uncore.lock);
}
+static void execlists_clear_user_interrupt(struct drm_i915_gem_request *req)
+{
+ struct intel_ringbuffer *ringbuf = req->ringbuf;
+
+ iowrite32(MI_NOOP, ringbuf->virtual_start + req->tail - 8);
+}
+
+static void execlists_emit_user_interrupt(struct drm_i915_gem_request *req)
+{
+ struct intel_ringbuffer *ringbuf = req->ringbuf;
+
+ iowrite32(MI_USER_INTERRUPT, ringbuf->virtual_start + req->tail - 8);
+}
+
static int execlists_update_context(struct drm_i915_gem_request *rq)
{
struct intel_engine_cs *ring = rq->ring;
@@ -433,6 +447,14 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
cursor->elsp_submitted = req0->elsp_submitted;
list_move_tail(&req0->execlist_link,
&ring->execlist_retired_req_list);
+ /*
+ * When coalescing previosly submitted request,
+ * it might have been the last one in the previous
+ * submission so had its user interrupt cleared.
+ * Put it back in.
+ */
+ if (req0->elsp_submitted)
+ execlists_emit_user_interrupt(req0);
req0 = cursor;
} else {
req1 = cursor;
@@ -440,6 +462,15 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
}
}
+ /*
+ * Last requests submitted on each port do not need to generate
+ * user interrupts since we will get context complete.
+ */
+ if (req0->elsp_submitted == 0)
+ execlists_clear_user_interrupt(req0);
+ if (req1 && req1->elsp_submitted == 0)
+ execlists_clear_user_interrupt(req1);
+
if (IS_GEN8(ring->dev) || IS_GEN9(ring->dev)) {
/*
* WaIdleLiteRestore: make sure we never cause a lite
@@ -472,6 +503,12 @@ static bool execlists_check_remove_request(struct intel_engine_cs *ring,
assert_spin_locked(&ring->execlist_lock);
+ /*
+ * This is effectively a context complete interrupt so wake
+ * up potential waiters on this ring.
+ */
+ intel_notify_ring(ring);
+
head_req = list_first_entry_or_null(&ring->execlist_queue,
struct drm_i915_gem_request,
execlist_link);
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 00/15] drm/i915/bios: mipi sequence block v3, etc.
@ 2015-12-21 13:10 Jani Nikula
2016-01-05 16:01 ` ✗ failure: Fi.CI.BAT Patchwork
` (2 more replies)
0 siblings, 3 replies; 123+ messages in thread
From: Jani Nikula @ 2015-12-21 13:10 UTC (permalink / raw)
To: intel-gfx; +Cc: jani.nikula, Deepak M
Hi all, this is follow-up to my earlier opregion/vbt series [1]. This
covers patches 1 and 7 of Deepak's series [2], but does quite a bunch of
rework to make everything as neat as it can be given the spec. There's
also some generic VBT documentation.
Unfortunately I haven't been able to test this on a machine that
actually has MIPI sequence block v3. However most of the series does not
touch that yet.
BR,
Jani.
[1] http://mid.gmane.org/cover.1450089383.git.jani.nikula@intel.com
[2] http://mid.gmane.org/1448923632-16760-1-git-send-email-m.deepak@intel.com
Jani Nikula (14):
drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
drm/i915/bios: fix header define name for intel_bios.h
drm/i915/bios: split the MIPI DSI VBT block parsing to two
drm/i915/bios: have get_blocksize() support MIPI sequence block v3+
drm/i915/bios: abstract finding the panel sequence block
drm/i915/bios: rewrite sequence block parsing
drm/i915/dsi: be defensive about out of bounds sequence id
drm/i915/dsi: be defensive about out of bounds operation byte
drm/i915/bios: interpret the i2c element
drm/i915/bios: add sequences for MIPI sequence block v2
drm/i915/bios: add defines for v3 sequence block
drm/i915/bios: add support for MIPI sequence block v3
drm/i915/dsi: skip unknown elements for sequence block v3+
drm/i915/dsi: reduce tedious repetition
vkorjani (1):
drm/i915: Adding the parsing logic for the i2c element
Documentation/DocBook/gpu.tmpl | 6 +
drivers/gpu/drm/i915/i915_drv.h | 2 +-
drivers/gpu/drm/i915/intel_bios.c | 376 +++++++++++++++++------------
drivers/gpu/drm/i915/intel_bios.h | 60 +++--
drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 198 +++++++++------
5 files changed, 397 insertions(+), 245 deletions(-)
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-21 13:10 [PATCH 00/15] drm/i915/bios: mipi sequence block v3, etc Jani Nikula
@ 2016-01-05 16:01 ` Patchwork
2016-01-11 13:30 ` Patchwork
2016-01-11 14:01 ` Patchwork
2 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-05 16:01 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Summary ==
HEAD is now at 865e245 drm-intel-nightly: 2016y-01m-05d-15h-23m-53s UTC integration manifest
Applying: drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
Using index info to reconstruct a base tree...
M Documentation/DocBook/gpu.tmpl
M drivers/gpu/drm/i915/intel_bios.c
M drivers/gpu/drm/i915/intel_bios.h
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_bios.h
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.h
Auto-merging drivers/gpu/drm/i915/intel_bios.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.c
Patch failed at 0001 drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-21 13:10 [PATCH 00/15] drm/i915/bios: mipi sequence block v3, etc Jani Nikula
2016-01-05 16:01 ` ✗ failure: Fi.CI.BAT Patchwork
@ 2016-01-11 13:30 ` Patchwork
2016-01-11 14:01 ` Patchwork
2 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 13:30 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Summary ==
HEAD is now at ff88655 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Applying: drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
Using index info to reconstruct a base tree...
M Documentation/DocBook/gpu.tmpl
M drivers/gpu/drm/i915/intel_bios.c
M drivers/gpu/drm/i915/intel_bios.h
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_bios.h
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.h
Auto-merging drivers/gpu/drm/i915/intel_bios.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.c
Patch failed at 0001 drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-21 13:10 [PATCH 00/15] drm/i915/bios: mipi sequence block v3, etc Jani Nikula
2016-01-05 16:01 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 13:30 ` Patchwork
@ 2016-01-11 14:01 ` Patchwork
2 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-11 14:01 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
== Summary ==
HEAD is now at ff88655 drm-intel-nightly: 2016y-01m-11d-07h-30m-16s UTC integration manifest
Applying: drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
Using index info to reconstruct a base tree...
M Documentation/DocBook/gpu.tmpl
M drivers/gpu/drm/i915/intel_bios.c
M drivers/gpu/drm/i915/intel_bios.h
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/intel_bios.h
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.h
Auto-merging drivers/gpu/drm/i915/intel_bios.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/intel_bios.c
Patch failed at 0001 drm/i915/bios: add proper documentation for the Video BIOS Table (VBT)
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v2 0/5] Add GuC ADS (Addition Data Structure)
@ 2015-12-18 20:00 yu.dai
2016-01-05 12:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-06 9:01 ` Patchwork
0 siblings, 2 replies; 123+ messages in thread
From: yu.dai @ 2015-12-18 20:00 UTC (permalink / raw)
To: intel-gfx
From: Alex Dai <yu.dai@intel.com>
The GuC firmware uses this for various purposes. The ADS itself is a chunk of
memory created by driver to share with GuC. This series creates the GuC ADS
object and setup some basic settings for it.
This version addresses some comments from Chris W. Tidy up some code; replace
kmap_atomic by kmap etc.
Alex Dai (4):
drm/i915/guc: Add GuC ADS (Addition Data Structure) - allocation
drm/i915/guc: Add GuC ADS - scheduler policies
drm/i915/guc: Add GuC ADS - MMIO reg state
drm/i915/guc: Add GuC ADS - enabling ADS
Dave Gordon (1):
drm/i915/guc: Expose (intel)_lr_context_size()
drivers/gpu/drm/i915/i915_guc_reg.h | 1 +
drivers/gpu/drm/i915/i915_guc_submission.c | 95 ++++++++++++++++++++++++
drivers/gpu/drm/i915/intel_guc.h | 2 +
drivers/gpu/drm/i915/intel_guc_fwif.h | 113 ++++++++++++++++++++++++++++-
drivers/gpu/drm/i915/intel_guc_loader.c | 7 ++
drivers/gpu/drm/i915/intel_lrc.c | 4 +-
drivers/gpu/drm/i915/intel_lrc.h | 1 +
7 files changed, 220 insertions(+), 3 deletions(-)
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: edp resume/On time optimization.
@ 2015-12-18 19:55 abhay.kumar
2015-12-19 7:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: abhay.kumar @ 2015-12-18 19:55 UTC (permalink / raw)
To: Intel-gfx
From: Abhay Kumar <abhay.kumar@intel.com>
Make resume/on codepath not to wait for panel_power_cycle_delay(t11_t12)
if this time is already spent in suspend/poweron time.
Change-Id: Ied0f10f82776af8e6e8ff561bb4e5c0ce1dad4b3
Signed-off-by: Abhay Kumar <abhay.kumar@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 3 +++
drivers/gpu/drm/i915/intel_dp.c | 22 ++++++++++++++--------
drivers/gpu/drm/i915/intel_drv.h | 2 +-
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index cbabcb4..fe99d72 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2347,6 +2347,9 @@ static void intel_ddi_post_disable(struct intel_encoder *intel_encoder)
intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
intel_edp_panel_vdd_on(intel_dp);
intel_edp_panel_off(intel_dp);
+
+ /* storing panel power off time */
+ intel_dp->panel_power_off_time = ktime_get_with_offset(TK_OFFS_BOOT);
}
if (IS_SKYLAKE(dev))
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index acda70e..845944d 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -38,7 +38,6 @@
#include "intel_drv.h"
#include <drm/i915_drm.h>
#include "i915_drv.h"
-
#define DP_LINK_CHECK_TIMEOUT (10 * 1000)
/* Compliance test status bits */
@@ -1654,13 +1653,22 @@ static void wait_panel_off(struct intel_dp *intel_dp)
static void wait_panel_power_cycle(struct intel_dp *intel_dp)
{
+ ktime_t panel_power_on_time;
+ u32 panel_power_off_duration;
+
DRM_DEBUG_KMS("Wait for panel power cycle\n");
- /* When we disable the VDD override bit last we have to do the manual
- * wait. */
- wait_remaining_ms_from_jiffies(intel_dp->last_power_cycle,
- intel_dp->panel_power_cycle_delay);
+ /* take the diffrence of currrent time and panel power off time
+ and then make panel wait for t11_t12 if needed */
+ panel_power_on_time = ktime_get_with_offset(TK_OFFS_BOOT);
+ panel_power_off_duration = (panel_power_on_time.tv64 - intel_dp->panel_power_off_time.tv64);
+ panel_power_off_duration = panel_power_off_duration / 1000000;
+ /* When we disable the VDD override bit last we have to do the manual
+ * wait */
+ if (panel_power_off_duration < intel_dp->panel_power_cycle_delay)
+ wait_remaining_ms_from_jiffies(jiffies,
+ (intel_dp->panel_power_cycle_delay - panel_power_off_duration));
wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
}
@@ -1811,7 +1819,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
I915_READ(pp_stat_reg), I915_READ(pp_ctrl_reg));
if ((pp & POWER_TARGET_ON) == 0)
- intel_dp->last_power_cycle = jiffies;
+ intel_dp->panel_power_off_time = ktime_get_with_offset(TK_OFFS_BOOT);
power_domain = intel_display_port_power_domain(intel_encoder);
intel_display_power_put(dev_priv, power_domain);
@@ -1960,7 +1968,6 @@ static void edp_panel_off(struct intel_dp *intel_dp)
I915_WRITE(pp_ctrl_reg, pp);
POSTING_READ(pp_ctrl_reg);
- intel_dp->last_power_cycle = jiffies;
wait_panel_off(intel_dp);
/* We got a reference when we enabled the VDD. */
@@ -5196,7 +5203,6 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
static void intel_dp_init_panel_power_timestamps(struct intel_dp *intel_dp)
{
- intel_dp->last_power_cycle = jiffies;
intel_dp->last_power_on = jiffies;
intel_dp->last_backlight_off = jiffies;
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d44f2f5..ef82e8f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -722,9 +722,9 @@ struct intel_dp {
int backlight_off_delay;
struct delayed_work panel_vdd_work;
bool want_panel_vdd;
- unsigned long last_power_cycle;
unsigned long last_power_on;
unsigned long last_backlight_off;
+ ktime_t panel_power_off_time;
struct notifier_block edp_notifier;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Workaround CHV pipe C cursor fail
@ 2015-12-18 17:24 ville.syrjala
2015-12-18 17:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: ville.syrjala @ 2015-12-18 17:24 UTC (permalink / raw)
To: intel-gfx; +Cc: Jason Plum, stable
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Turns out CHV pipe C was glued on somewhat poorly, and there's something
wrong with the cursor. If the cursor straddles the left screen edge,
and is then moved away from the edge or disabled, the pipe will often
underrun. If enough underruns are triggered quickly enough the pipe
will fall over and die (it just scans out a solid color and reports
a constant underrun). We need to turn the disp2d power well off and
on again to recover the pipe.
None of that is very nice for the user, so let's just refuse to place
the cursor in the compromised position. The ddx appears to fall back
to swcursor when the ioctl returns an error, so theoretically there's
no loss of functionality for the user (discounting swcursor bugs).
I suppose most cursors images actually have the hotspot not exactly
at 0,0 so under typical conditions the fallback will in fact kick in
as soon as the cursor touches the left edge of the screen.
Any atomic compositor should anyway be prepared to fall back to
GPU composition when things don't work out, so there should be no
problem with those.
Other things that I tried to solve this include flipping all
display related clock gating knobs I could find, increasing the
minimum gtt alignment all the way up to 512k. I also tried to see
if there are more specific screen coordinates that hit the bug, but
the findings were somewhat inconclusive. Sometimes the failures
happen almost across the whole left edge, sometimes more at the very
top and around the bottom half. I wasn't able to find any real pattern
to these variations, so it seems our only choice is to just refuse
to straddle the left screen edge at all.
Cc: stable@vger.kernel.org
Cc: Jason Plum <max@warheads.net>
Testcase: igt/kms_chv_cursor_fail
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92826
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index abd2d2944022..8acc66b95139 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14059,6 +14059,7 @@ intel_check_cursor_plane(struct drm_plane *plane,
struct drm_crtc *crtc = crtc_state->base.crtc;
struct drm_framebuffer *fb = state->base.fb;
struct drm_i915_gem_object *obj = intel_fb_obj(fb);
+ enum pipe pipe = to_intel_plane(plane)->pipe;
unsigned stride;
int ret;
@@ -14092,6 +14093,22 @@ intel_check_cursor_plane(struct drm_plane *plane,
return -EINVAL;
}
+ /*
+ * There's something wrong with the cursor on CHV pipe C.
+ * If it straddles the left edge of the screen then
+ * moving it away from the edge or disabling it often
+ * results in a pipe underrun, and often that can lead to
+ * dead pipe (constant underrun reported, and it scans
+ * out just a solid color). To recover from that, the
+ * display power well must be turned off and on again.
+ * Refuse the put the cursor into that compromised position.
+ */
+ if (IS_CHERRYVIEW(plane->dev) && pipe == PIPE_C &&
+ state->visible && state->base.crtc_x < 0) {
+ DRM_DEBUG_KMS("CHV cursor C not allowed to straddle the left screen edge\n");
+ return -EINVAL;
+ }
+
return 0;
}
--
2.4.10
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-18 17:24 [PATCH] drm/i915: Workaround CHV pipe C cursor fail ville.syrjala
@ 2015-12-18 17:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-18 17:49 UTC (permalink / raw)
To: ville.syrjala; +Cc: intel-gfx
== Summary ==
Built on deb496ede4fc5e7affe15640a113ea9b5f1189e0 drm-intel-nightly: 2015y-12m-18d-16h-12m-24s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2)
Test kms_flip:
Subgroup basic-flip-vs-modeset:
pass -> DMESG-WARN (ilk-hp8440p)
pass -> DMESG-WARN (byt-nuc)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a:
pass -> DMESG-WARN (snb-x220t)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> FAIL (snb-x220t)
Subgroup read-crc-pipe-c:
dmesg-warn -> PASS (bdw-ultra)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup suspend-read-crc-pipe-a:
dmesg-warn -> PASS (snb-x220t)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
dmesg-warn -> PASS (snb-dellxps)
Test pm_rpm:
Subgroup basic-pci-d3-state:
pass -> DMESG-WARN (bdw-ultra)
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:115 dwarn:0 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:120 dwarn:2 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:126 dwarn:2 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:130 dwarn:1 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:99 dwarn:1 dfail:0 fail:0 skip:35
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:122 dwarn:5 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:121 dwarn:6 dfail:0 fail:0 skip:8
snb-dellxps total:135 pass:122 dwarn:1 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:120 dwarn:2 dfail:0 fail:2 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_723/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] Allow userspace to set NULL blob on properties
@ 2015-12-18 15:17 Lionel Landwerlin
2015-12-18 15:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Lionel Landwerlin @ 2015-12-18 15:17 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter
Hi,
A couple of people told me I should be able to set a blob property to
NULL from user space using a blob id 0. I couldn't get that to work
(probably nobody's doing this at the moment). Here is a patch to make
that work.
Cheers,
-
Lionel
Lionel Landwerlin (1):
drm/atomic: allow setting a blob to NULL using id = 0
drivers/gpu/drm/drm_atomic.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
--
2.6.3
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH v9] drm/i915: Extend LRC pinning to cover GPU context writeback
@ 2015-12-18 14:41 Nick Hoath
2015-12-18 15:01 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Nick Hoath @ 2015-12-18 14:41 UTC (permalink / raw)
To: intel-gfx; +Cc: Daniel Vetter
Use the first retired request on a new context to unpin
the old context. This ensures that the hw context remains
bound until it has been written back to by the GPU.
Now that the context is pinned until later in the request/context
lifecycle, it no longer needs to be pinned from context_queue to
retire_requests.
This fixes an issue with GuC submission where the GPU might not
have finished writing back the context before it is unpinned. This
results in a GPU hang.
v2: Moved the new pin to cover GuC submission (Alex Dai)
Moved the new unpin to request_retire to fix coverage leak
v3: Added switch to default context if freeing a still pinned
context just in case the hw was actually still using it
v4: Unwrapped context unpin to allow calling without a request
v5: Only create a switch to idle context if the ring doesn't
already have a request pending on it (Alex Dai)
Rename unsaved to dirty to avoid double negatives (Dave Gordon)
Changed _no_req postfix to __ prefix for consistency (Dave Gordon)
Split out per engine cleanup from context_free as it
was getting unwieldy
Corrected locking (Dave Gordon)
v6: Removed some bikeshedding (Mika Kuoppala)
Added explanation of the GuC hang that this fixes (Daniel Vetter)
v7: Removed extra per request pinning from ring reset code (Alex Dai)
Added forced ring unpin/clean in error case in context free (Alex Dai)
v8: Renamed lrc specific last_context to lrc_last_context as there
were some reset cases where the codepaths leaked (Mika Kuoppala)
NULL'd last_context in reset case - there was a pointer leak
if someone did reset->close context.
v9: Rebase over "Fix context/engine cleanup order"
Signed-off-by: Nick Hoath <nicholas.hoath@intel.com>
Issue: VIZ-4277
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: David Gordon <david.s.gordon@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Alex Dai <yu.dai@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_gem.c | 7 +-
drivers/gpu/drm/i915/intel_lrc.c | 146 ++++++++++++++++++++++++++------
drivers/gpu/drm/i915/intel_lrc.h | 1 +
drivers/gpu/drm/i915/intel_ringbuffer.h | 1 +
5 files changed, 124 insertions(+), 32 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 27bb401..2f6f411 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -887,6 +887,7 @@ struct intel_context {
struct {
struct drm_i915_gem_object *state;
struct intel_ringbuffer *ringbuf;
+ bool dirty;
int pin_count;
} engine[I915_NUM_RINGS];
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 517676a..69e904f 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1362,6 +1362,9 @@ static void i915_gem_request_retire(struct drm_i915_gem_request *request)
{
trace_i915_gem_request_retire(request);
+ if (i915.enable_execlists)
+ intel_lr_context_complete_check(request);
+
/* We know the GPU must have read the request to have
* sent us the seqno + interrupt, so use the position
* of tail of the request to update the last known position
@@ -2772,10 +2775,6 @@ static void i915_gem_reset_ring_cleanup(struct drm_i915_private *dev_priv,
struct drm_i915_gem_request,
execlist_link);
list_del(&submit_req->execlist_link);
-
- if (submit_req->ctx != ring->default_context)
- intel_lr_context_unpin(submit_req);
-
i915_gem_request_unreference(submit_req);
}
spin_unlock_irq(&ring->execlist_lock);
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index d542a8d..01063f7 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -570,9 +570,6 @@ static int execlists_context_queue(struct drm_i915_gem_request *request)
struct drm_i915_gem_request *cursor;
int num_elements = 0;
- if (request->ctx != ring->default_context)
- intel_lr_context_pin(request);
-
i915_gem_request_reference(request);
spin_lock_irq(&ring->execlist_lock);
@@ -736,6 +733,13 @@ intel_logical_ring_advance_and_submit(struct drm_i915_gem_request *request)
if (intel_ring_stopped(ring))
return;
+ if (request->ctx != ring->default_context) {
+ if (!request->ctx->engine[ring->id].dirty) {
+ intel_lr_context_pin(request);
+ request->ctx->engine[ring->id].dirty = true;
+ }
+ }
+
if (dev_priv->guc.execbuf_client)
i915_guc_submit(dev_priv->guc.execbuf_client, request);
else
@@ -962,12 +966,6 @@ void intel_execlists_retire_requests(struct intel_engine_cs *ring)
spin_unlock_irq(&ring->execlist_lock);
list_for_each_entry_safe(req, tmp, &retired_list, execlist_link) {
- struct intel_context *ctx = req->ctx;
- struct drm_i915_gem_object *ctx_obj =
- ctx->engine[ring->id].state;
-
- if (ctx_obj && (ctx != ring->default_context))
- intel_lr_context_unpin(req);
list_del(&req->execlist_link);
i915_gem_request_unreference(req);
}
@@ -1062,21 +1060,39 @@ reset_pin_count:
return ret;
}
-void intel_lr_context_unpin(struct drm_i915_gem_request *rq)
+static void __intel_lr_context_unpin(struct intel_engine_cs *ring,
+ struct intel_context *ctx)
{
- struct intel_engine_cs *ring = rq->ring;
- struct drm_i915_gem_object *ctx_obj = rq->ctx->engine[ring->id].state;
- struct intel_ringbuffer *ringbuf = rq->ringbuf;
-
+ struct drm_i915_gem_object *ctx_obj = ctx->engine[ring->id].state;
+ struct intel_ringbuffer *ringbuf = ctx->engine[ring->id].ringbuf;
if (ctx_obj) {
WARN_ON(!mutex_is_locked(&ring->dev->struct_mutex));
- if (--rq->ctx->engine[ring->id].pin_count == 0) {
+ if (--ctx->engine[ring->id].pin_count == 0) {
intel_unpin_ringbuffer_obj(ringbuf);
i915_gem_object_ggtt_unpin(ctx_obj);
}
}
}
+void intel_lr_context_unpin(struct drm_i915_gem_request *rq)
+{
+ __intel_lr_context_unpin(rq->ring, rq->ctx);
+}
+
+void intel_lr_context_complete_check(struct drm_i915_gem_request *req)
+{
+ struct intel_engine_cs *ring = req->ring;
+
+ if (ring->lrc_last_context && ring->lrc_last_context != req->ctx &&
+ ring->lrc_last_context->engine[ring->id].dirty) {
+ __intel_lr_context_unpin(
+ ring,
+ ring->lrc_last_context);
+ ring->lrc_last_context->engine[ring->id].dirty = false;
+ }
+ ring->lrc_last_context = req->ctx;
+}
+
static int intel_logical_ring_workarounds_emit(struct drm_i915_gem_request *req)
{
int ret, i;
@@ -2350,6 +2366,81 @@ populate_lr_context(struct intel_context *ctx, struct drm_i915_gem_object *ctx_o
}
/**
+ * intel_lr_context_clean_ring() - clean the ring specific parts of an LRC
+ * @ctx: the LR context being freed.
+ * @ring: the engine being cleaned
+ * @ctx_obj: the hw context being unreferenced
+ * @ringbuf: the ringbuf being freed
+ *
+ * Take care of cleaning up the per-engine backing
+ * objects and the logical ringbuffer.
+ */
+static void
+intel_lr_context_clean_ring(struct intel_context *ctx,
+ struct drm_i915_gem_object *ctx_obj,
+ struct intel_ringbuffer *ringbuf)
+{
+ int ret;
+ struct intel_engine_cs *ring = ringbuf->ring;
+
+ WARN_ON(!mutex_is_locked(&ring->dev->struct_mutex));
+
+ if (ctx->is_global_default) {
+ /*
+ * The HWSP is part of the default context
+ * object in LRC mode.
+ */
+ lrc_teardown_hardware_status_page(ring);
+ intel_unpin_ringbuffer_obj(ringbuf);
+ i915_gem_object_ggtt_unpin(ctx_obj);
+ }
+
+ if (ctx->engine[ring->id].dirty) {
+ struct drm_i915_gem_request *req = NULL;
+
+ /**
+ * If there is already a request pending on
+ * this ring, wait for that to complete,
+ * otherwise create a switch to idle request
+ */
+ if (list_empty(&ring->request_list)) {
+ int ret;
+
+ ret = i915_gem_request_alloc(
+ ring,
+ ring->default_context,
+ &req);
+ if (!ret)
+ i915_add_request(req);
+ else
+ DRM_DEBUG("Failed to ensure context saved");
+ } else {
+ req = list_first_entry(
+ &ring->request_list,
+ typeof(*req), list);
+ }
+ if (req) {
+ ret = i915_wait_request(req);
+ if (ret != 0) {
+ /**
+ * If we get here, there's probably been a ring
+ * reset, so we just clean up the dirty flag.&
+ * pin count.
+ */
+ ctx->engine[ring->id].dirty = false;
+ __intel_lr_context_unpin(
+ ring,
+ ctx);
+ }
+ }
+ }
+
+ WARN_ON(ctx->engine[ring->id].pin_count);
+ intel_ringbuffer_free(ringbuf);
+ drm_gem_object_unreference(&ctx_obj->base);
+}
+
+/**
* intel_lr_context_free() - free the LRC specific bits of a context
* @ctx: the LR context to free.
*
@@ -2368,19 +2459,9 @@ void intel_lr_context_free(struct intel_context *ctx)
if (!ctx_obj)
continue;
- if (ctx->is_global_default) {
- /*
- * The HWSP is part of the default context
- * object in LRC mode.
- */
- lrc_teardown_hardware_status_page(ringbuf->ring);
- intel_unpin_ringbuffer_obj(ringbuf);
- i915_gem_object_ggtt_unpin(ctx_obj);
- }
-
- WARN_ON(ctx->engine[i].pin_count);
- intel_ringbuffer_free(ringbuf);
- drm_gem_object_unreference(&ctx_obj->base);
+ intel_lr_context_clean_ring(ctx,
+ ctx_obj,
+ ringbuf);
}
}
@@ -2562,5 +2643,14 @@ void intel_lr_context_reset(struct drm_device *dev,
ringbuf->head = 0;
ringbuf->tail = 0;
+
+ if (ctx->engine[ring->id].dirty) {
+ __intel_lr_context_unpin(
+ ring,
+ ctx);
+ ctx->engine[ring->id].dirty = false;
+ if (ring->lrc_last_context == ctx)
+ ring->lrc_last_context = NULL;
+ }
}
}
diff --git a/drivers/gpu/drm/i915/intel_lrc.h b/drivers/gpu/drm/i915/intel_lrc.h
index 0b821b9..fd1b6b4 100644
--- a/drivers/gpu/drm/i915/intel_lrc.h
+++ b/drivers/gpu/drm/i915/intel_lrc.h
@@ -91,6 +91,7 @@ void intel_lr_context_reset(struct drm_device *dev,
struct intel_context *ctx);
uint64_t intel_lr_context_descriptor(struct intel_context *ctx,
struct intel_engine_cs *ring);
+void intel_lr_context_complete_check(struct drm_i915_gem_request *req);
/* Execlists */
int intel_sanitize_enable_execlists(struct drm_device *dev, int enable_execlists);
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 49574ff..9bd98db 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -275,6 +275,7 @@ struct intel_engine_cs {
u32 flush_domains);
int (*emit_bb_start)(struct drm_i915_gem_request *req,
u64 offset, unsigned dispatch_flags);
+ struct intel_context *lrc_last_context;
/**
* List of objects currently involved in rendering from the
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [RFC] drm/i915/bdw+: Do not emit user interrupts when not needed
@ 2015-12-18 11:59 Tvrtko Ursulin
2015-12-18 12:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Tvrtko Ursulin @ 2015-12-18 11:59 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
We can rely on context complete interrupt to wake up the waiters
apart in the case where requests are merged into a single ELSP
submission. In this case we inject MI_USER_INTERRUPTS in the
ring buffer to ensure prompt wake-ups.
This optimization has the effect on for example GLBenchmark
Egypt off-screen test of decreasing the number of generated
interrupts per second by a factor of two, and context switched
by factor of five to six.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
---
drivers/gpu/drm/i915/i915_drv.h | 1 +
drivers/gpu/drm/i915/i915_irq.c | 24 ++++++++++++------------
drivers/gpu/drm/i915/intel_lrc.c | 26 +++++++++++++++++++++++++-
3 files changed, 38 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 1d28d90ed901..f6fd2023aaf0 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2811,6 +2811,7 @@ ibx_disable_display_interrupt(struct drm_i915_private *dev_priv, uint32_t bits)
ibx_display_interrupt_update(dev_priv, bits, 0);
}
+void intel_notify_ring(struct intel_engine_cs *ring);
/* i915_gem.c */
int i915_gem_create_ioctl(struct drm_device *dev, void *data,
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 3f8c753997ba..a2087bad0d64 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -994,7 +994,7 @@ static void ironlake_rps_change_irq_handler(struct drm_device *dev)
return;
}
-static void notify_ring(struct intel_engine_cs *ring)
+void intel_notify_ring(struct intel_engine_cs *ring)
{
if (!intel_ring_initialized(ring))
return;
@@ -1291,9 +1291,9 @@ static void ilk_gt_irq_handler(struct drm_device *dev,
{
if (gt_iir &
(GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (gt_iir & ILK_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
}
static void snb_gt_irq_handler(struct drm_device *dev,
@@ -1303,11 +1303,11 @@ static void snb_gt_irq_handler(struct drm_device *dev,
if (gt_iir &
(GT_RENDER_USER_INTERRUPT | GT_RENDER_PIPECTL_NOTIFY_INTERRUPT))
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (gt_iir & GT_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
if (gt_iir & GT_BLT_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[BCS]);
+ intel_notify_ring(&dev_priv->ring[BCS]);
if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
GT_BSD_CS_ERROR_INTERRUPT |
@@ -1322,7 +1322,7 @@ static __always_inline void
gen8_cs_irq_handler(struct intel_engine_cs *ring, u32 iir, int test_shift)
{
if (iir & (GT_RENDER_USER_INTERRUPT << test_shift))
- notify_ring(ring);
+ intel_notify_ring(ring);
if (iir & (GT_CONTEXT_SWITCH_INTERRUPT << test_shift))
intel_lrc_irq_handler(ring);
}
@@ -1629,7 +1629,7 @@ static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
if (HAS_VEBOX(dev_priv->dev)) {
if (pm_iir & PM_VEBOX_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VECS]);
+ intel_notify_ring(&dev_priv->ring[VECS]);
if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
@@ -3961,7 +3961,7 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
new_iir = I915_READ16(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
for_each_pipe(dev_priv, pipe) {
int plane = pipe;
@@ -4157,7 +4157,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
for_each_pipe(dev_priv, pipe) {
int plane = pipe;
@@ -4387,9 +4387,9 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
new_iir = I915_READ(IIR); /* Flush posted writes */
if (iir & I915_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[RCS]);
+ intel_notify_ring(&dev_priv->ring[RCS]);
if (iir & I915_BSD_USER_INTERRUPT)
- notify_ring(&dev_priv->ring[VCS]);
+ intel_notify_ring(&dev_priv->ring[VCS]);
for_each_pipe(dev_priv, pipe) {
if (pipe_stats[pipe] & PIPE_START_VBLANK_INTERRUPT_STATUS &&
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 27f06198a51e..d9be878dbde7 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -359,6 +359,13 @@ static void execlists_elsp_write(struct drm_i915_gem_request *rq0,
spin_unlock(&dev_priv->uncore.lock);
}
+static void execlists_emit_user_interrupt(struct drm_i915_gem_request *req)
+{
+ struct intel_ringbuffer *ringbuf = req->ringbuf;
+
+ iowrite32(MI_USER_INTERRUPT, ringbuf->virtual_start + req->tail - 8);
+}
+
static int execlists_update_context(struct drm_i915_gem_request *rq)
{
struct intel_engine_cs *ring = rq->ring;
@@ -433,6 +440,12 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
cursor->elsp_submitted = req0->elsp_submitted;
list_move_tail(&req0->execlist_link,
&ring->execlist_retired_req_list);
+ /*
+ * When merging requests make sure there is still
+ * something after each batch buffer to wake up waiters.
+ */
+ if (cursor != req0)
+ execlists_emit_user_interrupt(req0);
req0 = cursor;
} else {
req1 = cursor;
@@ -472,6 +485,12 @@ static bool execlists_check_remove_request(struct intel_engine_cs *ring,
assert_spin_locked(&ring->execlist_lock);
+ /*
+ * This is effectively a context complete interrupt so wake
+ * up potential waiters on this ring.
+ */
+ intel_notify_ring(ring);
+
head_req = list_first_entry_or_null(&ring->execlist_queue,
struct drm_i915_gem_request,
execlist_link);
@@ -1812,7 +1831,12 @@ static int gen8_emit_request(struct drm_i915_gem_request *request)
(I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT)));
intel_logical_ring_emit(ringbuf, 0);
intel_logical_ring_emit(ringbuf, i915_gem_request_get_seqno(request));
- intel_logical_ring_emit(ringbuf, MI_USER_INTERRUPT);
+ /*
+ * Following noop is a placeholder for an optional MI_USER_INTERRUPT
+ * which will be patched in at ELSP submission time if this request
+ * will not be ending with a context complete interrupt.
+ */
+ intel_logical_ring_emit(ringbuf, MI_NOOP);
intel_logical_ring_emit(ringbuf, MI_NOOP);
intel_logical_ring_advance_and_submit(request);
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail
@ 2015-12-18 10:53 Tvrtko Ursulin
2015-12-18 11:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Tvrtko Ursulin @ 2015-12-18 10:53 UTC (permalink / raw)
To: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Same effect for slightly less source code and resulting binary.
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
drivers/gpu/drm/i915/intel_lrc.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
Compile tested only!
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 3aa614731d7e..27f06198a51e 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -431,9 +431,8 @@ static void execlists_context_unqueue(struct intel_engine_cs *ring)
/* Same ctx: ignore first request, as second request
* will update tail past first request's workload */
cursor->elsp_submitted = req0->elsp_submitted;
- list_del(&req0->execlist_link);
- list_add_tail(&req0->execlist_link,
- &ring->execlist_retired_req_list);
+ list_move_tail(&req0->execlist_link,
+ &ring->execlist_retired_req_list);
req0 = cursor;
} else {
req1 = cursor;
@@ -485,9 +484,8 @@ static bool execlists_check_remove_request(struct intel_engine_cs *ring,
"Never submitted head request\n");
if (--head_req->elsp_submitted <= 0) {
- list_del(&head_req->execlist_link);
- list_add_tail(&head_req->execlist_link,
- &ring->execlist_retired_req_list);
+ list_move_tail(&head_req->execlist_link,
+ &ring->execlist_retired_req_list);
return true;
}
}
@@ -592,9 +590,8 @@ static int execlists_context_queue(struct drm_i915_gem_request *request)
if (request->ctx == tail_req->ctx) {
WARN(tail_req->elsp_submitted != 0,
"More than 2 already-submitted reqs queued\n");
- list_del(&tail_req->execlist_link);
- list_add_tail(&tail_req->execlist_link,
- &ring->execlist_retired_req_list);
+ list_move_tail(&tail_req->execlist_link,
+ &ring->execlist_retired_req_list);
}
}
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-18 10:53 [PATCH] drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail Tvrtko Ursulin
@ 2015-12-18 11:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-18 11:49 UTC (permalink / raw)
To: Tvrtko Ursulin; +Cc: intel-gfx
== Summary ==
Built on 3c71db89fc37b6061ce6b070ce73f89155da5f20 drm-intel-nightly: 2015y-12m-18d-09h-42m-49s UTC integration manifest
Test igt@kms_flip@basic-flip-vs-wf_vblank on ivb-t430s pass -> dmesg-warn
Test igt@kms_flip@basic-flip-vs-wf_vblank on byt-nuc dmesg-warn -> pass
Test igt@kms_pipe_crc_basic@read-crc-pipe-c-frame-sequence on bsw-nuc-2 pass -> dmesg-warn
Test igt@kms_pipe_crc_basic@hang-read-crc-pipe-a on ivb-t430s dmesg-warn -> pass
Test igt@gem_mmap@basic on byt-nuc dmesg-warn -> pass
Test igt@pm_rpm@basic-rte on byt-nuc dmesg-warn -> pass (UNSTABLE)
Test igt@gem_mmap_gtt@basic-write on bsw-nuc-2 dmesg-warn -> pass
Test igt@kms_pipe_crc_basic@read-crc-pipe-a on byt-nuc dmesg-warn -> pass
Test igt@kms_pipe_crc_basic@read-crc-pipe-c on skl-i5k-2 dmesg-warn -> pass
Test igt@kms_flip@basic-flip-vs-modeset on hsw-brixbox dmesg-warn -> pass
Test igt@kms_flip@basic-flip-vs-modeset on skl-i5k-2 pass -> dmesg-warn
Test igt@kms_pipe_crc_basic@read-crc-pipe-a-frame-sequence on snb-x220t pass -> fail
bsw-nuc-2 total:135 pass:114 dwarn:1 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:122 dwarn:0 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:127 dwarn:1 dfail:0 fail:0 skip:7
hsw-gt2 total:135 pass:130 dwarn:1 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:100 dwarn:0 dfail:0 fail:2 skip:33
ivb-t430s total:135 pass:128 dwarn:1 dfail:1 fail:1 skip:4
skl-i5k-2 total:135 pass:122 dwarn:5 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:123 dwarn:4 dfail:0 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:120 dwarn:2 dfail:0 fail:2 skip:11
Results at /archive/results/CI_IGT_test/Patchwork_714/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915/vlv: Modifying RC6 Promotion timer for Media workloads.
@ 2015-12-18 10:14 Namrta Salonie
2015-12-18 10:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Namrta Salonie @ 2015-12-18 10:14 UTC (permalink / raw)
To: intel-gfx; +Cc: akash.goel, Satyanantha, Rama Gopal M
In normal cases, RC6 promotion timer is 1700us. This will result in more
time spent in C1 state. For more residency in C6 in case of media workloads,
this is changed to 250us. Not doing this for 3D workloads as too many C6-C0
transition delays can result in performance impact. Tracking the media
workloads based on command submission to MFX engine.
Signed-off-by: Namrta Salonie <namrta.salonie@intel.com>
Signed-off-by: Satyanantha, Rama Gopal M <rama.gopal.m.satyanantha@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 3 +++
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 14 +++++++++++++
drivers/gpu/drm/i915/i915_reg.h | 2 ++
drivers/gpu/drm/i915/intel_drv.h | 2 ++
drivers/gpu/drm/i915/intel_pm.c | 30 +++++++++++++++++++++++++++-
5 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index bc865e23..74c9f86 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1147,6 +1147,9 @@ struct intel_gen6_power_mgmt {
* talking to hw - so only take it when talking to hw!
*/
struct mutex hw_lock;
+
+ /* Delayed work to adjust RC6 promotion timer */
+ struct delayed_work vlv_media_timeout_work;
};
/* defined intel_pm.c */
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index a4c243c..af7fbf8 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1254,6 +1254,20 @@ i915_gem_ringbuffer_submission(struct i915_execbuffer_params *params,
return ret;
}
+ /* For VLV, modify RC6 promotion timer upon hitting Media workload only
+ This will help in better power savings with media scenarios.
+ */
+ if (((args->flags & I915_EXEC_RING_MASK) == I915_EXEC_BSD) &&
+ !IS_CHERRYVIEW(dev) && IS_VALLEYVIEW(dev) &&
+ dev_priv->rps.enabled) {
+ vlv_modify_rc6_promotion_timer(dev_priv, true);
+
+ /*Start a timer for 1 sec to reset this value to original*/
+ mod_delayed_work(dev_priv->wq,
+ &dev_priv->rps.vlv_media_timeout_work,
+ msecs_to_jiffies(1000));
+ }
+
exec_len = args->batch_len;
exec_start = params->batch_obj_vm_offset +
params->args_batch_start_offset;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 4872245..3f66f5d 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -6905,6 +6905,8 @@ enum skl_disp_power_wells {
#define GEN6_RCUBMABDTMR _MMIO(0xA0B0)
#define GEN6_RC1e_THRESHOLD _MMIO(0xA0B4)
#define GEN6_RC6_THRESHOLD _MMIO(0xA0B8)
+#define GEN6_RC6_RENDER_PROMOTION_TIMER_TO 0x0557
+#define GEN6_RC6_MEDIA_PROMOTION_TIMER_TO 0x00C3
#define GEN6_RC6p_THRESHOLD _MMIO(0xA0BC)
#define VLV_RCEDATA _MMIO(0xA0BC)
#define GEN6_RC6pp_THRESHOLD _MMIO(0xA0C0)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 8fae824..e563d65 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1283,6 +1283,8 @@ void intel_dsi_init(struct drm_device *dev);
/* intel_dvo.c */
void intel_dvo_init(struct drm_device *dev);
+extern void vlv_modify_rc6_promotion_timer(struct drm_i915_private *dev_priv,
+ bool media_active);
/* legacy fbdev emulation in intel_fbdev.c */
#ifdef CONFIG_DRM_FBDEV_EMULATION
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 1c1ea63..149b944 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4492,6 +4492,26 @@ static void valleyview_disable_rps(struct drm_device *dev)
intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
}
+void vlv_modify_rc6_promotion_timer(struct drm_i915_private *dev_priv,
+ bool media_active)
+{
+ /* Update RC6 promotion timers */
+ if (media_active)
+ I915_WRITE(GEN6_RC6_THRESHOLD,
+ GEN6_RC6_MEDIA_PROMOTION_TIMER_TO);
+ else
+ I915_WRITE(GEN6_RC6_THRESHOLD,
+ GEN6_RC6_RENDER_PROMOTION_TIMER_TO);
+}
+
+static void vlv_media_timeout_work_func(struct work_struct *work)
+{
+ struct drm_i915_private *dev_priv = container_of(work, struct drm_i915_private,
+ rps.vlv_media_timeout_work.work);
+
+ vlv_modify_rc6_promotion_timer(dev_priv, false);
+}
+
static void intel_print_rc6_info(struct drm_device *dev, u32 mode)
{
if (IS_VALLEYVIEW(dev)) {
@@ -6050,7 +6070,9 @@ static void gen6_suspend_rps(struct drm_device *dev)
struct drm_i915_private *dev_priv = dev->dev_private;
flush_delayed_work(&dev_priv->rps.delayed_resume_work);
-
+ /*Cancel any pending work-item*/
+ cancel_delayed_work_sync(&dev_priv->rps.vlv_media_timeout_work);
+
gen6_disable_rps_interrupts(dev);
}
@@ -7258,6 +7280,12 @@ void intel_pm_setup(struct drm_device *dev)
INIT_DELAYED_WORK(&dev_priv->rps.delayed_resume_work,
intel_gen6_powersave_work);
+ /* Initialize a work item to modify RC6 promotion timer
+ * based on MFX engine activity
+ */
+ INIT_DELAYED_WORK(&dev_priv->rps.vlv_media_timeout_work,
+ vlv_media_timeout_work_func);
+
INIT_LIST_HEAD(&dev_priv->rps.clients);
INIT_LIST_HEAD(&dev_priv->rps.semaphores.link);
INIT_LIST_HEAD(&dev_priv->rps.mmioflips.link);
--
1.7.9.5
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: edp resume/On time optimization.
@ 2015-12-18 6:27 abhay.kumar
2015-12-18 9:01 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: abhay.kumar @ 2015-12-18 6:27 UTC (permalink / raw)
To: Intel-gfx
From: Abhay Kumar <abhay.kumar@intel.com>
Make resume codepath not to wait for panel_power_cycle_delay(t11_t12)
if this time is already spent in suspend/poweron time.
Change-Id: Ied0f10f82776af8e6e8ff561bb4e5c0ce1dad4b3
Signed-off-by: Abhay Kumar <abhay.kumar@intel.com>
---
drivers/gpu/drm/i915/intel_ddi.c | 3 +++
drivers/gpu/drm/i915/intel_dp.c | 21 +++++++++++++--------
drivers/gpu/drm/i915/intel_drv.h | 2 +-
3 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index cbabcb4..fe99d72 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -2347,6 +2347,9 @@ static void intel_ddi_post_disable(struct intel_encoder *intel_encoder)
intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF);
intel_edp_panel_vdd_on(intel_dp);
intel_edp_panel_off(intel_dp);
+
+ /* storing panel power off time */
+ intel_dp->panel_power_off_time = ktime_get_with_offset(TK_OFFS_BOOT);
}
if (IS_SKYLAKE(dev))
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index acda70e..509da67 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -38,7 +38,6 @@
#include "intel_drv.h"
#include <drm/i915_drm.h>
#include "i915_drv.h"
-
#define DP_LINK_CHECK_TIMEOUT (10 * 1000)
/* Compliance test status bits */
@@ -1654,13 +1653,21 @@ static void wait_panel_off(struct intel_dp *intel_dp)
static void wait_panel_power_cycle(struct intel_dp *intel_dp)
{
+ ktime_t panel_power_on_time;
+ u32 panel_power_off_duration;
+
DRM_DEBUG_KMS("Wait for panel power cycle\n");
- /* When we disable the VDD override bit last we have to do the manual
- * wait. */
- wait_remaining_ms_from_jiffies(intel_dp->last_power_cycle,
- intel_dp->panel_power_cycle_delay);
+ /* take the diffrence of currrent time and panel power off time
+ and then make panel wait for t11_t12 if needed */
+ panel_power_on_time = ktime_get_with_offset(TK_OFFS_BOOT);
+ panel_power_off_duration = (panel_power_on_time.tv64 - intel_dp->panel_power_off_time.tv64) / 1000000;
+ /* When we disable the VDD override bit last we have to do the manual
+ * wait */
+ if (panel_power_off_duration < intel_dp->panel_power_cycle_delay)
+ wait_remaining_ms_from_jiffies(jiffies,
+ (intel_dp->panel_power_cycle_delay - panel_power_off_duration));
wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
}
@@ -1811,7 +1818,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp)
I915_READ(pp_stat_reg), I915_READ(pp_ctrl_reg));
if ((pp & POWER_TARGET_ON) == 0)
- intel_dp->last_power_cycle = jiffies;
+ intel_dp->panel_power_off_time = ktime_get_with_offset(TK_OFFS_BOOT);
power_domain = intel_display_port_power_domain(intel_encoder);
intel_display_power_put(dev_priv, power_domain);
@@ -1960,7 +1967,6 @@ static void edp_panel_off(struct intel_dp *intel_dp)
I915_WRITE(pp_ctrl_reg, pp);
POSTING_READ(pp_ctrl_reg);
- intel_dp->last_power_cycle = jiffies;
wait_panel_off(intel_dp);
/* We got a reference when we enabled the VDD. */
@@ -5196,7 +5202,6 @@ intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect
static void intel_dp_init_panel_power_timestamps(struct intel_dp *intel_dp)
{
- intel_dp->last_power_cycle = jiffies;
intel_dp->last_power_on = jiffies;
intel_dp->last_backlight_off = jiffies;
}
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index d44f2f5..ef82e8f 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -722,9 +722,9 @@ struct intel_dp {
int backlight_off_delay;
struct delayed_work panel_vdd_work;
bool want_panel_vdd;
- unsigned long last_power_cycle;
unsigned long last_power_on;
unsigned long last_backlight_off;
+ ktime_t panel_power_off_time;
struct notifier_block edp_notifier;
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: HWSTAM is not a thing on SKL+
@ 2015-12-18 1:16 Ben Widawsky
2015-12-18 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Ben Widawsky @ 2015-12-18 1:16 UTC (permalink / raw)
To: Intel GFX; +Cc: Ben Widawsky
Compile tested only.
Signed-off-by: Ben Widawsky <benjamin.widawsky@intel.com>
---
drivers/gpu/drm/i915/intel_lrc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 42a7be1..a9bc207 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1466,7 +1466,8 @@ static int gen8_init_common_ring(struct intel_engine_cs *ring)
u8 next_context_status_buffer_hw;
I915_WRITE_IMR(ring, ~(ring->irq_enable_mask | ring->irq_keep_mask));
- I915_WRITE(RING_HWSTAM(ring->mmio_base), 0xffffffff);
+ if (INTEL_INFO(ring->dev)->gen == 8)
+ I915_WRITE(RING_HWSTAM(ring->mmio_base), 0xffffffff);
if (ring->status_page.obj) {
I915_WRITE(RING_HWS_PGA(ring->mmio_base),
--
2.6.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* [PATCH 00/10] drm/i915: Fixes from my attempt at running igt on gen2
@ 2015-12-14 16:23 ville.syrjala
2016-01-12 7:49 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: ville.syrjala @ 2015-12-14 16:23 UTC (permalink / raw)
To: intel-gfx
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
It's been a while since I last ran igt on gen2, so I figured I'd
give it a shot. 855 had some failures, 830 no longer worked at
all. So I went ahead and fixed them, and here's the result.
The first three patches are not even gen2 specific bugs I caught
with this effort. The rest is for gen2.
I have some fixes for igt as well, which I'll post separately.
The good news is that with these patches (and the igt fixes) my
855 completes a full kms_flip run without failures, and the BAT
set has only one failure (gem_render_tiled_blits). 830 is fairly
good too, but it does have a lot of underruns and pipe_assert()
dmesg warnings. Lot of those are due to the pipe enable quirks
since we implement those quite haphazardly.
The series is available here:
git://github.com/vsyrjala/linux.git gen2_igt_fixes
Ville Syrjälä (10):
drm/i915: Release mmaps on partial ggtt vma unbind
drm/i915: Cleanup phys status page too
drm/i915: Write out crc frame counts in hex
drm/i915: Wait for pipe to start before sampling vblank timestamps on
gen2
drm/i915: Use drm_vblank_count() on gen2 for crc frame count
drm/i915: Enable vblank_disable_immediate on gen2
drm/i915: Allow 27 bytes child_dev for VBT <109
drm/i915: Expect child dev size of 22 bytes for VBT < 106
drm/i915: Reject < 8 byte batches on 830/845
drm/i915: Use MI_BATCH_BUFFER_START on 830/845
drivers/gpu/drm/i915/i915_debugfs.c | 13 ++++++++++++-
drivers/gpu/drm/i915/i915_gem.c | 3 +++
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 3 +++
drivers/gpu/drm/i915/i915_irq.c | 14 +++++---------
drivers/gpu/drm/i915/intel_bios.c | 21 ++++++++++++--------
drivers/gpu/drm/i915/intel_display.c | 11 +++++++++++
drivers/gpu/drm/i915/intel_ringbuffer.c | 31 +++++++++++++++++++++++-------
7 files changed, 71 insertions(+), 25 deletions(-)
--
2.4.10
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-14 16:23 [PATCH 00/10] drm/i915: Fixes from my attempt at running igt on gen2 ville.syrjala
@ 2016-01-12 7:49 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2016-01-12 7:49 UTC (permalink / raw)
To: ville.syrjala; +Cc: intel-gfx
== Summary ==
Built on a90796840c30dac6d9907439bf98d1d08046c49d drm-intel-nightly: 2016y-01m-11d-17h-22m-54s UTC integration manifest
Test gem_storedw_loop:
Subgroup basic-render:
pass -> DMESG-WARN (skl-i5k-2) UNSTABLE
Test kms_pipe_crc_basic:
Subgroup hang-read-crc-pipe-a:
pass -> FAIL (hsw-gt2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (bdw-ultra)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (ilk-hp8440p)
Subgroup hang-read-crc-pipe-b:
pass -> FAIL (hsw-gt2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (ilk-hp8440p)
Subgroup hang-read-crc-pipe-c:
pass -> DMESG-WARN (bsw-nuc-2)
pass -> FAIL (skl-i5k-2)
pass -> FAIL (hsw-gt2)
pass -> FAIL (skl-i7k-2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
Subgroup nonblocking-crc-pipe-a:
pass -> FAIL (skl-i5k-2)
pass -> FAIL (hsw-gt2)
pass -> FAIL (bdw-ultra)
pass -> FAIL (skl-i7k-2)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
pass -> FAIL (ilk-hp8440p)
Subgroup nonblocking-crc-pipe-a-frame-sequence:
pass -> FAIL (hsw-gt2)
pass -> FAIL (bdw-ultra)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
pass -> FAIL (ilk-hp8440p)
Subgroup nonblocking-crc-pipe-b:
dmesg-warn -> DMESG-FAIL (snb-x220t)
dmesg-warn -> DMESG-FAIL (snb-dellxps)
pass -> FAIL (hsw-gt2)
pass -> FAIL (ilk-hp8440p)
Subgroup nonblocking-crc-pipe-b-frame-sequence:
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-gt2)
pass -> FAIL (ilk-hp8440p)
Subgroup nonblocking-crc-pipe-c:
pass -> FAIL (hsw-gt2)
Subgroup nonblocking-crc-pipe-c-frame-sequence:
pass -> FAIL (bsw-nuc-2)
pass -> FAIL (skl-i5k-2)
pass -> FAIL (hsw-gt2)
pass -> FAIL (skl-i7k-2)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
Subgroup read-crc-pipe-a:
pass -> FAIL (hsw-gt2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (bdw-ultra)
pass -> FAIL (skl-i7k-2)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
pass -> FAIL (ilk-hp8440p)
Subgroup read-crc-pipe-a-frame-sequence:
pass -> FAIL (hsw-gt2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (bdw-ultra)
pass -> FAIL (byt-nuc)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
pass -> FAIL (ilk-hp8440p)
Subgroup read-crc-pipe-b:
dmesg-warn -> DMESG-FAIL (snb-x220t)
dmesg-warn -> DMESG-FAIL (snb-dellxps)
pass -> FAIL (hsw-gt2)
pass -> FAIL (ilk-hp8440p)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-gt2)
pass -> FAIL (ilk-hp8440p)
pass -> FAIL (ivb-t430s)
Subgroup read-crc-pipe-c:
pass -> FAIL (hsw-gt2)
Subgroup read-crc-pipe-c-frame-sequence:
dmesg-warn -> FAIL (bsw-nuc-2)
pass -> FAIL (skl-i5k-2)
pass -> FAIL (hsw-gt2)
pass -> FAIL (skl-i7k-2)
pass -> FAIL (ivb-t430s)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (bdw-nuci7)
Subgroup suspend-read-crc-pipe-a:
pass -> FAIL (skl-i5k-2)
pass -> FAIL (hsw-gt2)
pass -> FAIL (snb-x220t)
pass -> FAIL (snb-dellxps)
pass -> FAIL (hsw-brixbox)
pass -> FAIL (ilk-hp8440p)
Subgroup suspend-read-crc-pipe-b:
dmesg-warn -> DMESG-FAIL (snb-x220t)
dmesg-warn -> DMESG-FAIL (snb-dellxps)
dmesg-warn -> DMESG-FAIL (ilk-hp8440p)
bdw-nuci7 total:138 pass:122 dwarn:0 dfail:0 fail:7 skip:9
bdw-ultra total:138 pass:126 dwarn:0 dfail:0 fail:6 skip:6
bsw-nuc-2 total:141 pass:113 dwarn:2 dfail:0 fail:2 skip:24
byt-nuc total:141 pass:117 dwarn:3 dfail:0 fail:6 skip:15
hsw-brixbox total:141 pass:125 dwarn:0 dfail:0 fail:9 skip:7
hsw-gt2 total:141 pass:121 dwarn:0 dfail:0 fail:16 skip:4
ilk-hp8440p total:141 pass:90 dwarn:2 dfail:1 fail:11 skip:37
ivb-t430s total:135 pass:115 dwarn:3 dfail:4 fail:7 skip:6
skl-i5k-2 total:141 pass:126 dwarn:2 dfail:0 fail:5 skip:8
skl-i7k-2 total:141 pass:127 dwarn:1 dfail:0 fail:5 skip:8
snb-dellxps total:141 pass:113 dwarn:2 dfail:3 fail:9 skip:14
snb-x220t total:141 pass:113 dwarn:2 dfail:3 fail:10 skip:13
Results at /archive/results/CI_IGT_test/Patchwork_1137/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
* [PATCH] drm/i915: Avoid writing relocs with addresses in non-canonical form
@ 2015-12-04 11:33 Michał Winiarski
2015-12-29 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
0 siblings, 1 reply; 123+ messages in thread
From: Michał Winiarski @ 2015-12-04 11:33 UTC (permalink / raw)
To: intel-gfx
According to bspec, some parts of HW expect the addresses to be in
a canonical form, where bits [63:48] == [47]. Let's convert addresses to
canonical form prior to relocating and return converted offsets to
userspace.
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Michel Thierry <michel.thierry@intel.com>
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
---
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 9 ++++++---
drivers/gpu/drm/i915/i915_gem_gtt.h | 5 +++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index a4c243c..9f27be9 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -395,7 +395,7 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
target_i915_obj = target_vma->obj;
target_obj = &target_vma->obj->base;
- target_offset = target_vma->node.start;
+ target_offset = gen8_canonical_addr(target_vma->node.start);
/* Sandybridge PPGTT errata: We need a global gtt mapping for MI and
* pipe_control writes because the gpu doesn't properly redirect them
@@ -583,6 +583,7 @@ i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
struct drm_i915_gem_object *obj = vma->obj;
struct drm_i915_gem_exec_object2 *entry = vma->exec_entry;
uint64_t flags;
+ uint64_t offset;
int ret;
flags = PIN_USER;
@@ -623,8 +624,10 @@ i915_gem_execbuffer_reserve_vma(struct i915_vma *vma,
entry->flags |= __EXEC_OBJECT_HAS_FENCE;
}
- if (entry->offset != vma->node.start) {
- entry->offset = vma->node.start;
+ offset = gen8_canonical_addr(vma->node.start);
+
+ if (entry->offset != offset) {
+ entry->offset = offset;
*need_reloc = true;
}
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 877c32c..65e8f88 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -507,6 +507,11 @@ static inline size_t gen8_pte_count(uint64_t address, uint64_t length)
return i915_pte_count(address, length, GEN8_PDE_SHIFT);
}
+static inline uint64_t gen8_canonical_addr(uint64_t address)
+{
+ return ((int64_t)address << 16) >> 16;
+}
+
static inline dma_addr_t
i915_page_dir_dma_addr(const struct i915_hw_ppgtt *ppgtt, const unsigned n)
{
--
2.5.0
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 123+ messages in thread
* ✗ failure: Fi.CI.BAT
2015-12-04 11:33 [PATCH] drm/i915: Avoid writing relocs with addresses in non-canonical form Michał Winiarski
@ 2015-12-29 16:20 ` Patchwork
0 siblings, 0 replies; 123+ messages in thread
From: Patchwork @ 2015-12-29 16:20 UTC (permalink / raw)
To: Michał Winiarski; +Cc: intel-gfx
== Summary ==
Built on ec0382c73cb1adc972bebdd94afad3f0ea117114 drm-intel-nightly: 2015y-12m-23d-22h-28m-25s UTC integration manifest
Test gem_ctx_param_basic:
Subgroup root-set:
skip -> PASS (ilk-hp8440p)
Test gem_storedw_loop:
Subgroup basic-render:
dmesg-warn -> PASS (skl-i5k-2)
dmesg-warn -> PASS (bdw-nuci7)
Test kms_flip:
Subgroup basic-flip-vs-dpms:
dmesg-warn -> PASS (ilk-hp8440p)
Subgroup basic-flip-vs-modeset:
dmesg-warn -> PASS (skl-i5k-2)
pass -> DMESG-WARN (hsw-xps12)
pass -> DMESG-WARN (hsw-brixbox)
pass -> DMESG-WARN (bdw-nuci7)
Subgroup basic-plain-flip:
pass -> DMESG-WARN (snb-x220t)
pass -> DMESG-WARN (snb-dellxps)
Test kms_pipe_crc_basic:
Subgroup read-crc-pipe-a:
dmesg-warn -> PASS (snb-x220t)
pass -> DMESG-WARN (skl-i7k-2)
Subgroup read-crc-pipe-b:
pass -> DMESG-WARN (skl-i5k-2)
Subgroup read-crc-pipe-b-frame-sequence:
pass -> DMESG-WARN (byt-nuc)
Test kms_setmode:
Subgroup basic-clone-single-crtc:
dmesg-warn -> PASS (snb-dellxps)
Test pm_rpm:
Subgroup basic-rte:
dmesg-warn -> PASS (hsw-xps12)
pass -> DMESG-WARN (byt-nuc)
bdw-nuci7 total:132 pass:121 dwarn:2 dfail:0 fail:0 skip:9
bdw-ultra total:132 pass:124 dwarn:2 dfail:0 fail:0 skip:6
bsw-nuc-2 total:135 pass:113 dwarn:2 dfail:0 fail:0 skip:20
byt-nuc total:135 pass:119 dwarn:3 dfail:0 fail:0 skip:13
hsw-brixbox total:135 pass:126 dwarn:2 dfail:0 fail:0 skip:7
hsw-xps12 total:132 pass:125 dwarn:3 dfail:0 fail:0 skip:4
ilk-hp8440p total:135 pass:101 dwarn:0 dfail:0 fail:0 skip:34
ivb-t430s total:135 pass:127 dwarn:2 dfail:0 fail:0 skip:6
skl-i5k-2 total:135 pass:124 dwarn:3 dfail:0 fail:0 skip:8
skl-i7k-2 total:135 pass:123 dwarn:4 dfail:0 fail:0 skip:8
snb-dellxps total:135 pass:121 dwarn:2 dfail:0 fail:0 skip:12
snb-x220t total:135 pass:121 dwarn:2 dfail:0 fail:1 skip:11
HANGED hsw-gt2 in igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c
Results at /archive/results/CI_IGT_test/Patchwork_945/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 123+ messages in thread
end of thread, other threads:[~2016-01-19 16:43 UTC | newest]
Thread overview: 123+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-08 20:36 [PATCH 00/21] drm_event cleanup Daniel Vetter
2016-01-08 20:36 ` [PATCH 01/21] drm: kerneldoc for drm_fops.c Daniel Vetter
2016-01-08 20:36 ` [PATCH 02/21] drm: Add functions to setup/tear down drm_events Daniel Vetter
2016-01-08 21:10 ` Alex Deucher
2016-01-09 13:27 ` [PATCH] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 03/21] drm/exynos: Use the new event init/free functions Daniel Vetter
2016-01-08 20:36 ` [PATCH 04/21] drm/vmwgfx: " Daniel Vetter
2016-01-08 20:36 ` [PATCH 05/21] drm: Create drm_send_event helpers Daniel Vetter
2016-01-09 13:28 ` [PATCH] " Daniel Vetter
2016-01-08 20:36 ` [PATCH 06/21] drm/fsl: Remove preclose hook Daniel Vetter
2016-01-08 20:36 ` [PATCH 07/21] drm/armada: Remove NULL open/pre/postclose hooks Daniel Vetter
2016-01-08 20:36 ` [PATCH 08/21] drm/gma500: Remove empty preclose hook Daniel Vetter
2016-01-08 20:36 ` [PATCH 09/21] drm: Clean up pending events in the core Daniel Vetter
2016-01-09 13:28 ` [PATCH] " Daniel Vetter
2016-01-10 23:48 ` Laurent Pinchart
2016-01-11 14:51 ` [Intel-gfx] " Daniel Stone
2016-01-14 18:49 ` Laurent Pinchart
2016-01-08 20:36 ` [PATCH 10/21] drm/i915: Nuke intel_modeset_preclose Daniel Vetter
2016-01-08 20:36 ` [PATCH 11/21] drm/atmel: Nuke preclose Daniel Vetter
2016-01-08 20:36 ` [PATCH 12/21] drm/exynos: Remove event cancelling from postclose Daniel Vetter
2016-01-08 20:36 ` [PATCH 13/21] drm/imx: Unconfuse preclose logic Daniel Vetter
2016-01-08 20:36 ` [PATCH 14/21] drm/msm: Nuke preclose hooks Daniel Vetter
2016-01-08 20:36 ` [PATCH 15/21] drm/omap: Nuke close hooks Daniel Vetter
2016-01-11 0:03 ` Laurent Pinchart
2016-01-11 7:10 ` Daniel Vetter
2016-01-08 20:36 ` [PATCH 16/21] drm/rcar: Nuke preclose hook Daniel Vetter
2016-01-11 0:01 ` Laurent Pinchart
2016-01-08 20:36 ` [PATCH 17/21] drm/shmob: " Daniel Vetter
2016-01-10 22:26 ` [PATCH 1/5] " Daniel Vetter
2016-01-10 22:26 ` [PATCH 2/5] drm/tegra: Stop cancelling page flip events Daniel Vetter
2016-01-10 22:26 ` [PATCH 3/5] drm/tilcdc: Nuke preclose hook Daniel Vetter
2016-01-10 22:26 ` [PATCH 4/5] drm/vc4: " Daniel Vetter
2016-01-10 22:26 ` [PATCH 5/5] drm/vmwgfx: " Daniel Vetter
2016-01-11 10:20 ` Thomas Hellstrom
2016-01-11 0:00 ` [PATCH 1/5] drm/shmob: " Laurent Pinchart
2016-01-08 20:36 ` [PATCH 18/21] drm/tegra: Stop cancelling page flip events Daniel Vetter
2016-01-08 20:36 ` [PATCH 19/21] drm/tilcdc: Nuke preclose hook Daniel Vetter
2016-01-08 20:36 ` [PATCH 20/21] drm/vc4: " Daniel Vetter
2016-01-08 20:36 ` [PATCH 21/21] drm/vmwgfx: " Daniel Vetter
2016-01-08 20:53 ` Thomas Hellstrom
2016-01-09 10:43 ` Daniel Vetter
2016-01-10 20:52 ` Thomas Hellstrom
2016-01-10 21:59 ` Daniel Vetter
2016-01-10 22:02 ` [PATCH] " Daniel Vetter
2016-01-10 22:17 ` Thomas Hellstrom
2016-01-10 22:22 ` Daniel Vetter
2016-01-08 21:47 ` [PATCH 00/21] drm_event cleanup Alex Deucher
2016-01-09 13:32 ` Daniel Vetter
2016-01-11 11:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-12 16:24 ` Daniel Vetter
-- strict thread matches above, loose matches on Subject: below --
2016-01-14 15:56 [PATCH v5 1/1] drm/i915/bxt: Check BIOS RC6 setup before enabling RC6 Sagar Arun Kamble
2016-01-14 16:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 15:12 [PATCH] drm/i915/bios: Fix the sequence size calculations for MIPI seq v3 Jani Nikula
2016-01-14 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 15:02 [PATCH] drm/i915: Decouple execbuf uAPI from internal implementation Tvrtko Ursulin
2016-01-14 15:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 13:22 [PATCH 0/8] drm/i915: Some more fb offsets[] prep stuff ville.syrjala
2016-01-14 14:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 15:00 ` Ville Syrjälä
2016-01-15 12:03 ` Chris Wilson
2016-01-14 12:53 [PATCH 1/2] drm/i915: Start WM computation from scratch on ILK-BDW ville.syrjala
2016-01-14 14:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 14:29 ` Ville Syrjälä
2016-01-19 13:58 ` Daniel Vetter
2016-01-19 14:09 ` Ville Syrjälä
2016-01-19 16:43 ` Daniel Vetter
2016-01-14 10:49 [PATCH] drm/i915: Clear pending reset requests during suspend Arun Siluvery
2016-01-14 12:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 6:16 [PATCH v14 0/11] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-01-14 11:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-13 17:28 [PATCH 00/20] TDR/watchdog support for gen8 Arun Siluvery
2016-01-14 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-13 16:19 [PATCH v10] drm/i915: Extend LRC pinning to cover GPU context writeback Nick Hoath
2016-01-14 7:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-14 11:31 ` Nick Hoath
2016-01-19 9:08 ` Daniel Vetter
2016-01-13 14:35 [PATCH] drm/i915/dp: fall back to 18 bpp when sink capability is unknown Jani Nikula
2016-01-13 15:13 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-13 16:17 ` Daniel Vetter
2016-01-13 18:03 ` Chris Wilson
2016-01-13 12:52 [PATCH] drm/i915: Fix for reserved space WARN_ON when ring begin fails John.C.Harrison
2016-01-13 13:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-12 15:28 [PATCH 1/1] drm/i915: Reorder shadow registers on gen8 for faster lookup Mika Kuoppala
2016-01-12 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 21:40 [PATCH 00/22] drm_event cleanup, round 2 Daniel Vetter
2016-01-12 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 12:27 [PATCH v2 0/9] Kill off intel_crtc->atomic! Maarten Lankhorst
2016-01-11 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 14:30 ` Patchwork
2016-01-08 21:40 [PATCH] drm/i915: Reject invalid-pad for context-destroy ioctl Chris Wilson
2016-01-11 11:07 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-08 16:58 [PATCH 1/2] drm/i915: Store edram capabilities instead of fixed size Mika Kuoppala
2016-01-11 10:27 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-08 13:51 [PATCH 1/2] drm/i915: Enable mmio_debug for vlv/chv Mika Kuoppala
2016-01-11 9:59 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 12:50 ` Mika Kuoppala
2016-01-12 16:22 ` Daniel Vetter
2016-01-13 9:16 ` Mika Kuoppala
2016-01-13 9:20 ` Mika Kuoppala
2016-01-13 9:39 ` Daniel Vetter
2016-01-13 9:39 ` Daniel Vetter
2016-01-08 11:29 [PATCH v2 00/13] Misc cleanups and locking fixes Tvrtko Ursulin
2016-01-11 9:44 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-07 10:54 [PATCH 0/7] Explicitly pass crtc_state and plane_state to plane update functions Maarten Lankhorst
2016-01-11 8:53 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-07 9:10 [PATCH] drm/i915: Init power domains early in driver load Daniel Vetter
2016-01-11 9:12 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-06 20:53 [PATCH] drm/i915/guc: Fix a memory leak where guc->execbuf_client is not freed yu.dai
2016-01-13 8:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-06 11:09 [PATCH 1/3] drm: Defer disabling the vblank IRQ until the next interrupt (for instant-off) Chris Wilson
2016-01-06 13:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-06 2:26 [PATCH 1/2] drm/i915: fix get digital port issue in intel_audio libin.yang
2016-01-06 12:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-05 19:18 [PATCH] drm/i915: Cleaning up DDI translation tables Rodrigo Vivi
2016-01-06 11:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-05 19:10 [PATCH] drm/i915/guc: Enable GuC submission, where supported yu.dai
2016-01-06 10:20 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-07 10:27 ` Dave Gordon
2016-01-07 13:06 ` Jani Nikula
2016-01-07 14:36 ` Daniel Vetter
2016-01-07 14:51 ` Jani Nikula
2016-01-07 15:37 ` Dave Gordon
2016-01-05 16:54 [PATCH] drm/i915: Tune down rpm wakelock debug checks Daniel Vetter
2016-01-06 7:49 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-04 10:13 [PATCH] drm/i915: Force clean compilation with -Werror Chris Wilson
2016-01-04 11:01 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-04 10:10 [PATCH 1/3] drm: Balance error path for GEM handle allocation Chris Wilson
2016-01-04 10:49 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-31 12:45 [PATCH] drm/i915: Add RPM references in the *_get_hw_state functions Gabriel Feceoru
2015-12-31 13:20 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-30 22:56 [PATCH] drm/i915/bxt: Fix eDP panel power save/restore Matt Roper
2015-12-31 7:43 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-23 8:11 [PATCH] drm/i915: increase the tries for HDMI hotplug live status checking Gary Wang
2015-12-23 8:49 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-21 18:53 [PATCH] drm, i915: Fix pointer size cast Borislav Petkov
2015-12-22 7:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-21 16:04 improve handling of the driver's internal default context Dave Gordon
2015-12-22 7:20 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-21 15:33 [RFC v2] drm/i915/bdw+: Do not emit user interrupts when not needed Tvrtko Ursulin
2015-12-21 17:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-21 13:10 [PATCH 00/15] drm/i915/bios: mipi sequence block v3, etc Jani Nikula
2016-01-05 16:01 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-11 13:30 ` Patchwork
2016-01-11 14:01 ` Patchwork
2015-12-18 20:00 [PATCH v2 0/5] Add GuC ADS (Addition Data Structure) yu.dai
2016-01-05 12:30 ` ✗ failure: Fi.CI.BAT Patchwork
2016-01-06 9:01 ` Patchwork
2015-12-18 19:55 [PATCH] drm/i915: edp resume/On time optimization abhay.kumar
2015-12-19 7:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 17:24 [PATCH] drm/i915: Workaround CHV pipe C cursor fail ville.syrjala
2015-12-18 17:49 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 15:17 [PATCH] Allow userspace to set NULL blob on properties Lionel Landwerlin
2015-12-18 15:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 14:41 [PATCH v9] drm/i915: Extend LRC pinning to cover GPU context writeback Nick Hoath
2015-12-18 15:01 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-21 13:44 ` Daniel Vetter
2015-12-18 11:59 [RFC] drm/i915/bdw+: Do not emit user interrupts when not needed Tvrtko Ursulin
2015-12-18 12:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 10:53 [PATCH] drm/i915/bdw+: Replace list_del+list_add_tail with list_move_tail Tvrtko Ursulin
2015-12-18 11:49 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 10:14 [PATCH] drm/i915/vlv: Modifying RC6 Promotion timer for Media workloads Namrta Salonie
2015-12-18 10:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 6:27 [PATCH] drm/i915: edp resume/On time optimization abhay.kumar
2015-12-18 9:01 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-18 1:16 [PATCH] drm/i915: HWSTAM is not a thing on SKL+ Ben Widawsky
2015-12-18 8:30 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-14 16:23 [PATCH 00/10] drm/i915: Fixes from my attempt at running igt on gen2 ville.syrjala
2016-01-12 7:49 ` ✗ failure: Fi.CI.BAT Patchwork
2015-12-04 11:33 [PATCH] drm/i915: Avoid writing relocs with addresses in non-canonical form Michał Winiarski
2015-12-29 16:20 ` ✗ failure: Fi.CI.BAT Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).