From: ankitprasad.r.sharma@intel.com
To: intel-gfx@lists.freedesktop.org
Cc: akash.goel@intel.com, shashidhar.hiremath@intel.com,
Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
Subject: [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present
Date: Tue, 26 Jan 2016 01:13:36 +0530 [thread overview]
Message-ID: <1453751016-8713-11-git-send-email-ankitprasad.r.sharma@intel.com> (raw)
In-Reply-To: <1453751016-8713-1-git-send-email-ankitprasad.r.sharma@intel.com>
From: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
The BIOS RapidStartTechnology may corrupt the stolen memory across S3
suspend due to unalarmed hibernation, in which case we will not be able
to preserve the User data stored in the stolen region. Hence this patch
tries to identify presence of the RST device on the ACPI bus, and
disables use of stolen memory (for persistent data) if found.
v2: Updated comment, updated/corrected new functions private to driver
(Chris/Tvrtko)
v3: Disabling stolen by default, wait till required acpi changes to
detect device presence are pulled in (Ankit)
Signed-off-by: Ankitprasad Sharma <ankitprasad.r.sharma@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 11 +++++++++++
drivers/gpu/drm/i915/i915_gem.c | 8 ++++++++
drivers/gpu/drm/i915/i915_gem_stolen.c | 14 ++++++++++++++
drivers/gpu/drm/i915/intel_acpi.c | 10 ++++++++++
4 files changed, 43 insertions(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index d77d2ed..8037609 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1311,6 +1311,16 @@ struct i915_gem_mm {
*/
bool busy;
+ /**
+ * Stolen will be lost upon hibernate (as the memory is unpowered).
+ * Across resume, we expect stolen to be intact - however, it may
+ * also be utililised by third parties (e.g. Intel RapidStart
+ * Technology) and if so we have to assume that any data stored in
+ * stolen across resume is lost and we set this flag to indicate that
+ * the stolen memory is volatile.
+ */
+ bool nonvolatile_stolen;
+
/* the indicator for dispatch video commands on two BSD rings */
unsigned int bsd_ring_dispatch_index;
@@ -3418,6 +3428,7 @@ intel_opregion_notify_adapter(struct drm_device *dev, pci_power_t state)
#endif
/* intel_acpi.c */
+bool intel_detect_acpi_rst(void);
#ifdef CONFIG_ACPI
extern void intel_register_dsm_handler(void);
extern void intel_unregister_dsm_handler(void);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 9dcefb1..f7c9420 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -396,8 +396,16 @@ static struct drm_i915_gem_object *
i915_gem_alloc_object_stolen(struct drm_device *dev, size_t size)
{
struct drm_i915_gem_object *obj;
+ struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
+ if (!dev_priv->mm.nonvolatile_stolen) {
+ /* Stolen may be overwritten by external parties
+ * so unsuitable for persistent user data.
+ */
+ return ERR_PTR(-ENODEV);
+ }
+
mutex_lock(&dev->struct_mutex);
obj = i915_gem_object_create_stolen(dev, size);
if (IS_ERR(obj))
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 335a1ef..4f44531 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -482,6 +482,20 @@ int i915_gem_init_stolen(struct drm_device *dev)
*/
drm_mm_init(&dev_priv->mm.stolen, 0, dev_priv->gtt.stolen_usable_size);
+ /* If the stolen region can be modified behind our backs upon suspend,
+ * then we cannot use it to store nonvolatile contents (i.e user data)
+ * as it will be corrupted upon resume.
+ */
+ dev_priv->mm.nonvolatile_stolen = true;
+#ifdef CONFIG_SUSPEND
+ if (intel_detect_acpi_rst()) {
+ /* BIOSes using RapidStart Technology have been reported
+ * to overwrite stolen across S3, not just S4.
+ */
+ dev_priv->mm.nonvolatile_stolen = false;
+ }
+#endif
+
return 0;
}
diff --git a/drivers/gpu/drm/i915/intel_acpi.c b/drivers/gpu/drm/i915/intel_acpi.c
index eb638a1..8add47d 100644
--- a/drivers/gpu/drm/i915/intel_acpi.c
+++ b/drivers/gpu/drm/i915/intel_acpi.c
@@ -23,6 +23,11 @@ static const u8 intel_dsm_guid[] = {
0x0f, 0x13, 0x17, 0xb0, 0x1c, 0x2c
};
+static const struct acpi_device_id irst_ids[] = {
+ {"INT3392", 0},
+ {"", 0}
+};
+
static char *intel_dsm_port_name(u8 id)
{
switch (id) {
@@ -162,3 +167,8 @@ void intel_register_dsm_handler(void)
void intel_unregister_dsm_handler(void)
{
}
+
+bool intel_detect_acpi_rst(void)
+{
+ return true;
+}
--
1.9.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2016-01-25 20:05 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-25 19:43 [PATCH v15 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-01-25 19:43 ` [PATCH 01/10] drm/i915: Add support for mapping an object page by page ankitprasad.r.sharma
2016-01-26 10:55 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 02/10] drm/i915: Introduce i915_gem_object_get_dma_address() ankitprasad.r.sharma
2016-01-25 19:43 ` [PATCH 03/10] drm/i915: Use insert_page for pwrite_fast ankitprasad.r.sharma
2016-01-26 10:57 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 04/10] drm/i915: Clearing buffer objects via CPU/GTT ankitprasad.r.sharma
2016-01-26 11:01 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 05/10] drm/i915: Support for creating Stolen memory backed objects ankitprasad.r.sharma
2016-01-26 10:53 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 06/10] drm/i915: Propagating correct error codes to the userspace ankitprasad.r.sharma
2016-01-26 11:04 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 07/10] drm/i915: Add support for stealing purgable stolen pages ankitprasad.r.sharma
2016-01-25 19:43 ` [PATCH 08/10] drm/i915: Support for pread/pwrite from/to non shmem backed objects ankitprasad.r.sharma
2016-01-26 10:49 ` Chris Wilson
2016-01-25 19:43 ` [PATCH 09/10] drm/i915: Migrate stolen objects before hibernation ankitprasad.r.sharma
2016-01-26 10:38 ` Chris Wilson
2016-01-25 19:43 ` ankitprasad.r.sharma [this message]
2016-01-26 11:36 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present Chris Wilson
-- strict thread matches above, loose matches on Subject: below --
2016-03-18 6:22 [PATCH v19 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-03-18 6:22 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present ankitprasad.r.sharma
2016-02-29 7:39 [PATCH v1 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-02-29 7:39 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present ankitprasad.r.sharma
2016-02-19 6:51 [PATCH v17 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-02-19 6:51 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present ankitprasad.r.sharma
2016-02-19 10:34 ` Tvrtko Ursulin
2016-02-04 9:30 [PATCH v16 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2016-02-04 9:30 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present ankitprasad.r.sharma
2016-02-04 15:46 ` Lukas Wunner
2016-02-04 16:05 ` Chris Wilson
2016-02-04 16:43 ` Lukas Wunner
2016-02-11 19:08 ` Lukas Wunner
2016-02-11 11:54 ` Tvrtko Ursulin
2015-12-22 6:20 [PATCH v13 0/10] Support for creating/using Stolen memory backed objects ankitprasad.r.sharma
2015-12-22 6:20 ` [PATCH 10/10] drm/i915: Disable use of stolen area by User when Intel RST is present ankitprasad.r.sharma
2015-12-22 12:44 ` Tvrtko Ursulin
2015-12-22 13:14 ` Chris Wilson
2016-01-06 7:52 ` 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=1453751016-8713-11-git-send-email-ankitprasad.r.sharma@intel.com \
--to=ankitprasad.r.sharma@intel.com \
--cc=akash.goel@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=shashidhar.hiremath@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 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).