All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: oscar.mateo@intel.com
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 36/53] drm/i915: Abstract the workload submission mechanism away
Date: Wed, 18 Jun 2014 22:40:23 +0200	[thread overview]
Message-ID: <20140618204023.GC5821@phenom.ffwll.local> (raw)
In-Reply-To: <1402673891-14618-37-git-send-email-oscar.mateo@intel.com>

On Fri, Jun 13, 2014 at 04:37:54PM +0100, oscar.mateo@intel.com wrote:
> From: Oscar Mateo <oscar.mateo@intel.com>
> 
> As suggested by Daniel.
> 
> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h            | 26 ++++++++++++++++
>  drivers/gpu/drm/i915/i915_gem.c            | 48 +++++++++++++++++++-----------
>  drivers/gpu/drm/i915/i915_gem_execbuffer.c | 25 +++++++---------
>  3 files changed, 67 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 3e9983c..89b6d5c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1554,6 +1554,23 @@ struct drm_i915_private {
>  	/* Old ums support infrastructure, same warning applies. */
>  	struct i915_ums_state ums;
>  
> +	/* Abstract the submission mechanism (legacy ringbuffer or execlists) away */
> +	struct {
> +		int (*do_execbuf) (struct drm_device *dev, struct drm_file *file,
> +				   struct intel_engine_cs *ring,
> +				   struct intel_context *ctx,
> +				   struct drm_i915_gem_execbuffer2 *args,
> +				   struct list_head *vmas,
> +				   struct drm_i915_gem_object *batch_obj,
> +				   u64 exec_start, u32 flags);
> +		int (*add_request) (struct intel_engine_cs *ring,
> +				    struct drm_file *file,
> +				    struct drm_i915_gem_object *obj,
> +				    u32 *out_seqno);

Hm, what do we need add_request for? With the clean split in command
submission I'd expect every function to know whether it'll submit to an
lrc (everything in intel_lrc.c) or whether it'll submit to a legacy ring
(existing code), so I don't see a need for an add_request vfunc.

Au contraire that looks a bit dangerous since code might get run with
execlist that assumes we have a legcy ring ...

A bit confused, but let's hope this clears up in further patches.
-Daniel

> +		int (*init_rings) (struct drm_device *dev);
> +		void (*cleanup_ring) (struct intel_engine_cs *ring);
> +	} gt;
> +
>  	/*
>  	 * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
>  	 * will be rejected. Instead look for a better place.
> @@ -2131,6 +2148,14 @@ void i915_gem_execbuffer_retire_commands(struct drm_device *dev,
>  					 struct drm_file *file,
>  					 struct intel_engine_cs *ring,
>  					 struct drm_i915_gem_object *obj);
> +int i915_gem_ringbuffer_submission(struct drm_device *dev,
> +				   struct drm_file *file,
> +				   struct intel_engine_cs *ring,
> +				   struct intel_context *ctx,
> +				   struct drm_i915_gem_execbuffer2 *args,
> +				   struct list_head *vmas,
> +				   struct drm_i915_gem_object *batch_obj,
> +				   u64 exec_start, u32 flags);
>  int i915_gem_execbuffer(struct drm_device *dev, void *data,
>  			struct drm_file *file_priv);
>  int i915_gem_execbuffer2(struct drm_device *dev, void *data,
> @@ -2281,6 +2306,7 @@ void i915_gem_reset(struct drm_device *dev);
>  bool i915_gem_clflush_object(struct drm_i915_gem_object *obj, bool force);
>  int __must_check i915_gem_object_finish_gpu(struct drm_i915_gem_object *obj);
>  int __must_check i915_gem_init(struct drm_device *dev);
> +int i915_gem_init_rings(struct drm_device *dev);
>  int __must_check i915_gem_init_hw(struct drm_device *dev);
>  int i915_gem_l3_remap(struct intel_engine_cs *ring, int slice);
>  void i915_gem_init_swizzling(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 69db71a..7c10540 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -2310,19 +2310,16 @@ i915_gem_get_seqno(struct drm_device *dev, u32 *seqno)
>  	return 0;
>  }
>  
> -int __i915_add_request(struct intel_engine_cs *ring,
> -		       struct drm_file *file,
> -		       struct drm_i915_gem_object *obj,
> -		       u32 *out_seqno)
> +static int i915_gem_add_request(struct intel_engine_cs *ring,
> +				struct drm_file *file,
> +				struct drm_i915_gem_object *obj,
> +				u32 *out_seqno)
>  {
>  	struct drm_i915_private *dev_priv = ring->dev->dev_private;
>  	struct drm_i915_gem_request *request;
>  	u32 request_ring_position, request_start;
>  	int ret;
>  
> -	if (intel_enable_execlists(ring->dev))
> -		return intel_logical_ring_add_request(ring, file, obj, out_seqno);
> -
>  	request_start = intel_ring_get_tail(ring->buffer);
>  	/*
>  	 * Emit any outstanding flushes - execbuf can fail to emit the flush
> @@ -2403,6 +2400,16 @@ int __i915_add_request(struct intel_engine_cs *ring,
>  	return 0;
>  }
>  
> +int __i915_add_request(struct intel_engine_cs *ring,
> +		       struct drm_file *file,
> +		       struct drm_i915_gem_object *obj,
> +		       u32 *out_seqno)
> +{
> +	struct drm_i915_private *dev_priv = ring->dev->dev_private;
> +
> +	return dev_priv->gt.add_request(ring, file, obj, out_seqno);
> +}
> +
>  static inline void
>  i915_gem_request_remove_from_client(struct drm_i915_gem_request *request)
>  {
> @@ -4627,7 +4634,7 @@ intel_enable_blt(struct drm_device *dev)
>  	return true;
>  }
>  
> -static int i915_gem_init_rings(struct drm_device *dev)
> +int i915_gem_init_rings(struct drm_device *dev)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	int ret;
> @@ -4710,10 +4717,7 @@ i915_gem_init_hw(struct drm_device *dev)
>  
>  	i915_gem_init_swizzling(dev);
>  
> -	if (intel_enable_execlists(dev))
> -		ret = intel_logical_rings_init(dev);
> -	else
> -		ret = i915_gem_init_rings(dev);
> +	ret = dev_priv->gt.init_rings(dev);
>  	if (ret)
>  		return ret;
>  
> @@ -4751,6 +4755,18 @@ int i915_gem_init(struct drm_device *dev)
>  			DRM_DEBUG_DRIVER("allow wake ack timed out\n");
>  	}
>  
> +	if (intel_enable_execlists(dev)) {
> +		dev_priv->gt.do_execbuf = intel_execlists_submission;
> +		dev_priv->gt.add_request = intel_logical_ring_add_request;
> +		dev_priv->gt.init_rings = intel_logical_rings_init;
> +		dev_priv->gt.cleanup_ring = intel_logical_ring_cleanup;
> +	} else {
> +		dev_priv->gt.do_execbuf = i915_gem_ringbuffer_submission;
> +		dev_priv->gt.add_request = i915_gem_add_request;
> +		dev_priv->gt.init_rings = i915_gem_init_rings;
> +		dev_priv->gt.cleanup_ring = intel_cleanup_ring_buffer;
> +	}
> +
>  	i915_gem_init_userptr(dev);
>  	i915_gem_init_global_gtt(dev);
>  
> @@ -4785,12 +4801,8 @@ i915_gem_cleanup_ringbuffer(struct drm_device *dev)
>  	struct intel_engine_cs *ring;
>  	int i;
>  
> -	for_each_ring(ring, dev_priv, i) {
> -		if (intel_enable_execlists(dev))
> -			intel_logical_ring_cleanup(ring);
> -		else
> -			intel_cleanup_ring_buffer(ring);
> -	}
> +	for_each_ring(ring, dev_priv, i)
> +		dev_priv->gt.cleanup_ring(ring);
>  }
>  
>  int
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 36c7f0c..f0dd31f 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -1005,14 +1005,15 @@ i915_reset_gen7_sol_offsets(struct drm_device *dev,
>  	return 0;
>  }
>  
> -static int
> -legacy_ringbuffer_submission(struct drm_device *dev, struct drm_file *file,
> -			     struct intel_engine_cs *ring,
> -			     struct intel_context *ctx,
> -			     struct drm_i915_gem_execbuffer2 *args,
> -			     struct list_head *vmas,
> -			     struct drm_i915_gem_object *batch_obj,
> -			     u64 exec_start, u32 flags)
> +int
> +i915_gem_ringbuffer_submission(struct drm_device *dev,
> +			       struct drm_file *file,
> +			       struct intel_engine_cs *ring,
> +			       struct intel_context *ctx,
> +			       struct drm_i915_gem_execbuffer2 *args,
> +			       struct list_head *vmas,
> +			       struct drm_i915_gem_object *batch_obj,
> +			       u64 exec_start, u32 flags)
>  {
>  	struct drm_clip_rect *cliprects = NULL;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> @@ -1379,12 +1380,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
>  	else
>  		exec_start += i915_gem_obj_offset(batch_obj, vm);
>  
> -	if (intel_enable_execlists(dev))
> -		ret = intel_execlists_submission(dev, file, ring, ctx,
> -				args, &eb->vmas, batch_obj, exec_start, flags);
> -	else
> -		ret = legacy_ringbuffer_submission(dev, file, ring, ctx,
> -				args, &eb->vmas, batch_obj, exec_start, flags);
> +	ret = dev_priv->gt.do_execbuf(dev, file, ring, ctx, args,
> +			&eb->vmas, batch_obj, exec_start, flags);
>  	if (ret)
>  		goto err;
>  
> -- 
> 1.9.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

  reply	other threads:[~2014-06-18 20:40 UTC|newest]

Thread overview: 156+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-13 15:37 [PATCH 00/53] Execlists v3 oscar.mateo
2014-06-13 15:37 ` [PATCH 01/53] drm/i915: Extract context backing object allocation oscar.mateo
2014-06-13 15:37 ` [PATCH 02/53] drm/i915: Rename ctx->obj to ctx->render_obj oscar.mateo
2014-06-13 17:00   ` Daniel Vetter
2014-06-16 15:20     ` Mateo Lozano, Oscar
2014-06-13 17:15   ` Chris Wilson
2014-06-13 15:37 ` [PATCH 03/53] drm/i915: Add a dev pointer to the context oscar.mateo
2014-06-13 15:37 ` [PATCH 04/53] drm/i915: Extract ringbuffer destroy & make alloc outside accesible oscar.mateo
2014-06-18 21:39   ` Volkin, Bradley D
2014-06-19 10:42     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 05/53] drm/i915: Move i915_gem_validate_context() to i915_gem_context.c oscar.mateo
2014-06-13 17:11   ` Chris Wilson
2014-06-16 15:18     ` Mateo Lozano, Oscar
2014-06-18 20:00       ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 06/53] drm/i915/bdw: Introduce one context backing object per engine oscar.mateo
2014-06-18 20:16   ` Daniel Vetter
2014-06-19  8:52     ` Mateo Lozano, Oscar
2014-06-19 10:57       ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 07/53] drm/i915/bdw: New file for Logical Ring Contexts and Execlists oscar.mateo
2014-06-18 20:17   ` Daniel Vetter
2014-06-19  9:01     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 08/53] drm/i915/bdw: Macro for LRCs and module option for Execlists oscar.mateo
2014-06-18 20:19   ` Daniel Vetter
2014-06-19  9:04     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 09/53] drm/i915/bdw: Initialization for Logical Ring Contexts oscar.mateo
2014-06-18 20:24   ` Daniel Vetter
2014-06-19  9:23     ` Mateo Lozano, Oscar
2014-06-19 10:08       ` Daniel Vetter
2014-06-19 10:10         ` Mateo Lozano, Oscar
2014-06-19 10:34           ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 10/53] drm/i915/bdw: A bit more advanced context init/fini oscar.mateo
2014-06-18 22:13   ` Volkin, Bradley D
2014-06-19  6:13     ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 11/53] drm/i915/bdw: Allocate ringbuffers for Logical Ring Contexts oscar.mateo
2014-06-18 22:19   ` Volkin, Bradley D
2014-06-23 12:07     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 12/53] drm/i915/bdw: Populate LR contexts (somewhat) oscar.mateo
2014-06-18 23:24   ` Volkin, Bradley D
2014-06-23 12:42     ` Mateo Lozano, Oscar
2014-06-23 15:05       ` Volkin, Bradley D
2014-06-23 15:11         ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 13/53] drm/i915/bdw: Deferred creation of user-created LRCs oscar.mateo
2014-06-18 20:27   ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 14/53] drm/i915/bdw: Render moot context reset and switch when LRCs are enabled oscar.mateo
2014-06-13 15:37 ` [PATCH 15/53] drm/i915/bdw: Don't write PDP in the legacy way when using LRCs oscar.mateo
2014-06-18 23:42   ` Volkin, Bradley D
2014-06-23 12:45     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 16/53] drm/i915/bdw: Skeleton for the new logical rings submission path oscar.mateo
2014-06-13 15:37 ` [PATCH 17/53] drm/i915/bdw: Generic logical ring init and cleanup oscar.mateo
2014-06-13 15:37 ` [PATCH 18/53] drm/i915/bdw: New header file for LRs, LRCs and Execlists oscar.mateo
2014-06-13 15:37 ` [PATCH 19/53] drm/i915: Extract pipe control fini & make init outside accesible oscar.mateo
2014-06-18 20:31   ` Daniel Vetter
2014-06-19  0:04   ` Volkin, Bradley D
2014-06-19 10:58     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 20/53] drm/i915/bdw: GEN-specific logical ring init oscar.mateo
2014-06-13 15:37 ` [PATCH 21/53] drm/i915/bdw: GEN-specific logical ring set/get seqno oscar.mateo
2014-06-13 15:37 ` [PATCH 22/53] drm/i915: Make ring_space more generic and outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 23/53] drm/i915: Generalize intel_ring_get_tail oscar.mateo
2014-06-20 20:17   ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 24/53] drm/i915: Make intel_ring_stopped outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 25/53] drm/i915/bdw: GEN-specific logical ring submit context (somewhat) oscar.mateo
2014-06-20 20:28   ` Volkin, Bradley D
2014-06-23 12:49     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 26/53] drm/i915/bdw: New logical ring submission mechanism oscar.mateo
2014-06-20 21:00   ` Volkin, Bradley D
2014-06-23 13:09     ` Mateo Lozano, Oscar
2014-06-23 13:13       ` Chris Wilson
2014-06-23 13:18         ` Mateo Lozano, Oscar
2014-06-23 13:27           ` Chris Wilson
2014-06-23 13:36             ` Mateo Lozano, Oscar
2014-06-23 13:41               ` Chris Wilson
2014-06-23 14:35                 ` Mateo Lozano, Oscar
2014-06-23 19:10                   ` Volkin, Bradley D
2014-06-24 12:29                     ` Mateo Lozano, Oscar
2014-07-07 12:39                       ` Daniel Vetter
2014-06-24  0:23                   ` Ben Widawsky
2014-06-24 11:45                     ` Mateo Lozano, Oscar
2014-06-24 14:41                       ` Volkin, Bradley D
2014-06-24 17:19         ` Jesse Barnes
2014-06-26 13:28           ` Mateo Lozano, Oscar
2014-07-07 12:41         ` Daniel Vetter
2014-06-13 15:37 ` [PATCH 27/53] drm/i915/bdw: GEN-specific logical ring emit request oscar.mateo
2014-06-20 21:18   ` Volkin, Bradley D
2014-06-23 15:48     ` Mateo Lozano, Oscar
2014-06-13 15:37 ` [PATCH 28/53] drm/i915/bdw: GEN-specific logical ring emit flush oscar.mateo
2014-06-20 21:39   ` Volkin, Bradley D
2014-06-13 15:37 ` [PATCH 29/53] drm/i915/bdw: Emission of requests with logical rings oscar.mateo
2014-06-13 15:37 ` [PATCH 30/53] drm/i915/bdw: Ring idle and stop " oscar.mateo
2014-06-13 15:37 ` [PATCH 31/53] drm/i915/bdw: Interrupts " oscar.mateo
2014-06-13 15:37 ` [PATCH 32/53] drm/i915/bdw: GEN-specific logical ring emit batchbuffer start oscar.mateo
2014-06-13 15:37 ` [PATCH 33/53] drm/i915: Extract the actual workload submission mechanism from execbuffer oscar.mateo
2014-06-13 15:37 ` [PATCH 34/53] drm/i915: Make move_to_active and retire_commands outside accesible oscar.mateo
2014-06-13 15:37 ` [PATCH 35/53] drm/i915/bdw: Workload submission mechanism for Execlists oscar.mateo
2014-06-13 15:37 ` [PATCH 36/53] drm/i915: Abstract the workload submission mechanism away oscar.mateo
2014-06-18 20:40   ` Daniel Vetter [this message]
2014-06-13 15:37 ` [PATCH 37/53] drm/i915/bdw: Implement context switching (somewhat) oscar.mateo
2014-06-13 17:00   ` Chris Wilson
2014-06-13 15:37 ` [PATCH 38/53] drm/i915/bdw: Write the tail pointer, LRC style oscar.mateo
2014-06-13 15:37 ` [PATCH 39/53] drm/i915/bdw: Two-stage execlist submit process oscar.mateo
2014-06-13 15:37 ` [PATCH 40/53] drm/i915/bdw: Handle context switch events oscar.mateo
2014-06-13 15:37 ` [PATCH 41/53] drm/i915/bdw: Avoid non-lite-restore preemptions oscar.mateo
2014-06-18 20:49   ` Daniel Vetter
2014-06-23 11:52     ` Mateo Lozano, Oscar
2014-07-07 12:47       ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 42/53] drm/i915/bdw: Make sure gpu reset still works with Execlists oscar.mateo
2014-06-18 20:50   ` Daniel Vetter
2014-06-19  9:37     ` Mateo Lozano, Oscar
2014-06-13 15:38 ` [PATCH 43/53] drm/i915/bdw: Make sure error capture keeps working " oscar.mateo
2014-06-13 16:54   ` Chris Wilson
2014-06-18 20:52   ` Daniel Vetter
2014-06-18 20:53     ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 44/53] drm/i915/bdw: Help out the ctx switch interrupt handler oscar.mateo
2014-06-13 15:38 ` [PATCH 45/53] drm/i915/bdw: Do not call intel_runtime_pm_get() in an interrupt oscar.mateo
2014-06-18 20:54   ` Daniel Vetter
2014-07-26 10:27     ` Chris Wilson
2014-07-28  8:54       ` Daniel Vetter
2014-07-29  7:37         ` Chris Wilson
2014-07-29 10:26           ` Daniel Vetter
2014-08-08  9:20             ` Chris Wilson
2014-08-08  9:37               ` [Intel-gfx] " Daniel Vetter
2014-08-08  9:37                 ` Daniel Vetter
2014-08-08 13:41                 ` [Intel-gfx] " Greg KH
2014-08-08 13:41                   ` Greg KH
2014-08-09  0:18                   ` [Intel-gfx] " Rafael J. Wysocki
2014-08-09  0:18                     ` Rafael J. Wysocki
2014-08-09  0:14                 ` [Intel-gfx] " Rafael J. Wysocki
2014-08-09  0:14                   ` Rafael J. Wysocki
2014-08-09  1:21                   ` [Intel-gfx] " Alan Stern
2014-08-09  1:21                     ` Alan Stern
2014-08-09  8:53                     ` Daniel Vetter
2014-08-09  8:53                       ` Daniel Vetter
2014-08-10  1:55                       ` [Intel-gfx] " Rafael J. Wysocki
2014-08-10  1:55                         ` Rafael J. Wysocki
2014-06-13 15:38 ` [PATCH 46/53] drm/i915/bdw: Display execlists info in debugfs oscar.mateo
2014-06-18 20:59   ` Daniel Vetter
2014-06-13 15:38 ` [PATCH 47/53] drm/i915/bdw: Display context backing obj & ringbuffer " oscar.mateo
2014-06-13 15:38 ` [PATCH 48/53] drm/i915/bdw: Print context state " oscar.mateo
2014-06-13 15:38 ` [PATCH 49/53] drm/i915: Extract render state preparation oscar.mateo
2014-06-13 15:38 ` [PATCH 50/53] drm/i915/bdw: Render state init for Execlists oscar.mateo
2014-06-13 15:38 ` [PATCH 51/53] drm/i915/bdw: Document Logical Rings, LR contexts and Execlists oscar.mateo
2014-06-13 16:51   ` Chris Wilson
2014-06-16 15:24     ` Mateo Lozano, Oscar
2014-06-16 17:56       ` Daniel Vetter
2014-06-17  8:22         ` Mateo Lozano, Oscar
2014-06-17  9:39           ` Daniel Vetter
2014-06-17  9:46             ` Mateo Lozano, Oscar
2014-06-17 10:08               ` Daniel Vetter
2014-06-17 10:12                 ` Mateo Lozano, Oscar
2014-06-13 15:38 ` [PATCH 52/53] drm/i915/bdw: Enable logical ring contexts oscar.mateo
2014-06-13 15:38 ` [PATCH 53/53] !UPSTREAM: drm/i915: Use MMIO flips oscar.mateo
2014-06-18 21:01   ` Daniel Vetter
2014-06-19  9:50     ` Mateo Lozano, Oscar
2014-06-19 10:04       ` Daniel Vetter
2014-06-19 10:13       ` Chris Wilson
2014-06-19 10:33         ` Mateo Lozano, Oscar
2014-06-18 21:26 ` [PATCH 00/53] Execlists v3 Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140618204023.GC5821@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=oscar.mateo@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.