From: Ben Widawsky <benjamin.widawsky@intel.com>
To: keithp@keithp.com
Cc: Andi Kleen <andi@firstfloor.org>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
akpm@linux-foundation.org, Andi Kleen <ak@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 11/12] i915: Move i915_read/write out of line
Date: Mon, 17 Oct 2011 22:47:29 -0700 [thread overview]
Message-ID: <20111017224729.54e2dbc0@intel.com> (raw)
In-Reply-To: <1318547332-23155-11-git-send-email-andi@firstfloor.org>
On Thu, 13 Oct 2011 16:08:51 -0700
Andi Kleen <andi@firstfloor.org> wrote:
> From: Andi Kleen <ak@linux.intel.com>
>
> With the tracing code in there they are far too big to inline.
>
> .text savings compared to a non force inline kernel:
>
> i915_restore_display 4393 12036 +7643
> i915_save_display 4295 11459 +7164
> i915_handle_error 2979 6666 +3687
> i915_driver_irq_handler 2923 5086 +2163
> i915_ringbuffer_info 458 1661 +1203
> i915_save_vga - 1200 +1200
> i915_driver_irq_uninstall 453 1624 +1171
> i915_driver_irq_postinstall 913 2078 +1165
> ironlake_enable_drps 719 1872 +1153
> i915_restore_vga - 1142 +1142
> intel_display_capture_error_state 784 2030 +1246
> intel_init_emon 719 2016 +1297
>
> and more ...
>
> [AK: these are older numbers, with the new SNB forcewake checks
> it will be even worse]
>
> Cc: keithp@keithp.com
> Signed-off-by: Andi Kleen <ak@linux.intel.com>
> ---
> drivers/gpu/drm/i915/i915_drv.c | 40 +++++++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/i915/i915_drv.h | 22 ++------------------
> 2 files changed, 43 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index f07e425..c2de142 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -895,3 +895,43 @@ module_exit(i915_exit);
> MODULE_AUTHOR(DRIVER_AUTHOR);
> MODULE_DESCRIPTION(DRIVER_DESC);
> MODULE_LICENSE("GPL and additional rights");
> +
> +/* We give fast paths for the really cool registers */
> +#define NEEDS_FORCE_WAKE(dev_priv, reg) \
> + (((dev_priv)->info->gen >= 6) && \
> + ((reg) < 0x40000) && \
> + ((reg) != FORCEWAKE))
> +
> +#define __i915_read(x, y) \
> +u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
> + u##x val = 0; \
> + if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
> + gen6_gt_force_wake_get(dev_priv); \
> + val = read##y(dev_priv->regs + reg); \
> + gen6_gt_force_wake_put(dev_priv); \
> + } else { \
> + val = read##y(dev_priv->regs + reg); \
> + } \
> + trace_i915_reg_rw(false, reg, val, sizeof(val)); \
> + return val; \
> +}
> +
> +__i915_read(8, b)
> +__i915_read(16, w)
> +__i915_read(32, l)
> +__i915_read(64, q)
> +#undef __i915_read
> +
> +#define __i915_write(x, y) \
> +void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
> + trace_i915_reg_rw(true, reg, val, sizeof(val)); \
> + if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
> + __gen6_gt_wait_for_fifo(dev_priv); \
> + } \
> + write##y(val, dev_priv->regs + reg); \
> +}
> +__i915_write(8, b)
> +__i915_write(16, w)
> +__i915_write(32, l)
> +__i915_write(64, q)
> +#undef __i915_write
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 7916bd9..7d171ea 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1354,18 +1354,7 @@ void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
> ((reg) != FORCEWAKE))
>
> #define __i915_read(x, y) \
> -static inline u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
> - u##x val = 0; \
> - if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
> - gen6_gt_force_wake_get(dev_priv); \
> - val = read##y(dev_priv->regs + reg); \
> - gen6_gt_force_wake_put(dev_priv); \
> - } else { \
> - val = read##y(dev_priv->regs + reg); \
> - } \
> - trace_i915_reg_rw(false, reg, val, sizeof(val)); \
> - return val; \
> -}
> + u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
>
> __i915_read(8, b)
> __i915_read(16, w)
> @@ -1374,13 +1363,8 @@ __i915_read(64, q)
> #undef __i915_read
>
> #define __i915_write(x, y) \
> -static inline void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
> - trace_i915_reg_rw(true, reg, val, sizeof(val)); \
> - if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
> - __gen6_gt_wait_for_fifo(dev_priv); \
> - } \
> - write##y(val, dev_priv->regs + reg); \
> -}
> + void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val);
> +
> __i915_write(8, b)
> __i915_write(16, w)
> __i915_write(32, l)
Acked-by: Ben Widawsky <ben@bwidawsk.net>
The forcewake increased size should have been fixed a bit with the
forcewake struct encapsulation patch I posted to intel-gfx mailing list.
Keith, if you take this, could you also look into that patch?
<1315951648-5380-1-git-send-email-ben@bwidawsk.net>
next prev parent reply other threads:[~2011-10-18 5:48 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-13 23:08 [PATCH 01/12] RADEON: Drop inlines from evergreen_cs.c / r600_cs.c Andi Kleen
2011-10-13 23:08 ` [PATCH 02/12] RADEON: Move r100_*_*reg out of line Andi Kleen
2011-10-13 23:08 ` [PATCH 03/12] RADEON: drop inlines in r600_blit.c Andi Kleen
2011-10-13 23:08 ` [PATCH 04/12] RADEON: Remove now unused functions in radeon driver Andi Kleen
2011-10-13 23:08 ` [PATCH 05/12] FB_ATY: Move register accesses out of line Andi Kleen
2011-10-13 23:08 ` [PATCH 06/12] RADEON: Remove more bogus inlines in the radeon driver Andi Kleen
2011-10-13 23:08 ` [PATCH 07/12] RADEON: Move more code out of line Andi Kleen
2011-10-13 23:08 ` [PATCH 08/12] X86: Move alloc_intr_gate " Andi Kleen
2011-10-13 23:08 ` [PATCH 09/12] Don't use inline node_page_state for sysfs output functions Andi Kleen
2011-10-13 23:08 ` [PATCH 10/12] REISERFS: reiserfs drop unnecessary inlines Andi Kleen
2011-10-13 23:08 ` [PATCH 11/12] i915: Move i915_read/write out of line Andi Kleen
2011-10-15 13:49 ` Daniel Vetter
2011-10-18 5:47 ` Ben Widawsky [this message]
2011-10-13 23:08 ` [PATCH 12/12] Force always inline for gcc 4.5 when optimizing for size Andi Kleen
2011-10-18 8:59 ` [PATCH 01/12] RADEON: Drop inlines from evergreen_cs.c / r600_cs.c David Airlie
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=20111017224729.54e2dbc0@intel.com \
--to=benjamin.widawsky@intel.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=keithp@keithp.com \
--cc=linux-kernel@vger.kernel.org \
/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.