<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/gpu/drm/i915/intel_wakeref.c, branch linux-5.18.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.18.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.18.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2020-03-23T12:51:05Z</updated>
<entry>
<title>drm/i915: Extend intel_wakeref to support delayed puts</title>
<updated>2020-03-23T12:51:05Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2020-03-23T10:32:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e9037e7f9a1681fca32e45e82d7b7f714b49a9e6'/>
<id>urn:sha1:e9037e7f9a1681fca32e45e82d7b7f714b49a9e6</id>
<content type='text'>
In some cases we want to hold onto the wakeref for a little after the
last user so that we can avoid having to drop and then immediately
reacquire it. Allow the last user to specify if they would like to keep
the wakeref alive for a short hysteresis.

v2: Embrace bitfield.h for adjustable flags.

Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Cc: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Reviewed-by: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20200323103221.14444-1-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915/gt: Flush ongoing retires during wait_for_idle</title>
<updated>2020-01-03T00:33:07Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2020-01-02T23:16:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=cdd280b1b9b15217b404276b3e703e2764cad8c3'/>
<id>urn:sha1:cdd280b1b9b15217b404276b3e703e2764cad8c3</id>
<content type='text'>
Synchronise with any background retires and parking we may have spawned,
so that all requests are accounted for.

Closes: https://gitlab.freedesktop.org/drm/intel/issues/878
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Acked-by: Andi Shyti &lt;andi.shyti@intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20200102231604.1669010-1-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: Mark up the calling context for intel_wakeref_put()</title>
<updated>2019-11-20T15:59:23Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2019-11-20T12:54:33Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=07779a76ee1f93f930cf697b22be73d16e14f50c'/>
<id>urn:sha1:07779a76ee1f93f930cf697b22be73d16e14f50c</id>
<content type='text'>
Previously, we assumed we could use mutex_trylock() within an atomic
context, falling back to a worker if contended. However, such trickery
is illegal inside interrupt context, and so we need to always use a
worker under such circumstances. As we normally are in process context,
we can typically use a plain mutex, and only defer to a work when we
know we are being called from an interrupt path.

Fixes: 51fbd8de87dc ("drm/i915/pmu: Atomically acquire the gt_pm wakeref")
References: a0855d24fc22d ("locking/mutex: Complain upon mutex API misuse in IRQ contexts")
References: https://bugs.freedesktop.org/show_bug.cgi?id=111626
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Cc: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Reviewed-by: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20191120125433.3767149-1-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: Wait until the intel_wakeref idle callback is complete</title>
<updated>2019-11-19T18:02:48Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2019-11-18T23:02:46Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f4ba0707c825d60f1d0f5ce7bd3d875e68f3e204'/>
<id>urn:sha1:f4ba0707c825d60f1d0f5ce7bd3d875e68f3e204</id>
<content type='text'>
When waiting for idle, serialise with any ongoing callback so that it
will have completed before completing the wait.

Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Reviewed-by: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20191118230254.2615942-12-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: Push the wakeref-&gt;count deferral to the backend</title>
<updated>2019-08-13T20:09:49Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2019-08-13T19:07:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a79ca656b648e6851dd2f1eb0dcef86b278a8908'/>
<id>urn:sha1:a79ca656b648e6851dd2f1eb0dcef86b278a8908</id>
<content type='text'>
If the backend wishes to defer the wakeref parking, make it responsible
for unlocking the wakeref (i.e. bumping the counter). This allows it to
time the unlock much more carefully in case it happens to needs the
wakeref to be active during its deferral.

For instance, during engine parking we may choose to emit an idle
barrier (a request). To do so, we borrow the engine-&gt;kernel_context
timeline and to ensure exclusive access we keep the
engine-&gt;wakeref.count as 0. However, to submit that request to HW may
require a intel_engine_pm_get() (e.g. to keep the submission tasklet
alive) and before we allow that we have to rewake our wakeref to avoid a
recursive deadlock.

&lt;4&gt; [257.742916] IRQs not enabled as expected
&lt;4&gt; [257.742930] WARNING: CPU: 0 PID: 0 at kernel/softirq.c:169 __local_bh_enable_ip+0xa9/0x100
&lt;4&gt; [257.742936] Modules linked in: vgem snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_codec_generic i915 btusb btrtl btbcm btintel snd_hda_intel snd_intel_nhlt bluetooth snd_hda_codec coretemp snd_hwdep crct10dif_pclmul snd_hda_core crc32_pclmul ecdh_generic ecc ghash_clmulni_intel snd_pcm r8169 realtek lpc_ich prime_numbers i2c_hid
&lt;4&gt; [257.742991] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G     U  W         5.3.0-rc3-g5d0a06cd532c-drmtip_340+ #1
&lt;4&gt; [257.742998] Hardware name: GIGABYTE GB-BXBT-1900/MZBAYAB-00, BIOS F6 02/17/2015
&lt;4&gt; [257.743008] RIP: 0010:__local_bh_enable_ip+0xa9/0x100
&lt;4&gt; [257.743017] Code: 37 5b 5d c3 8b 80 50 08 00 00 85 c0 75 a9 80 3d 0b be 25 01 00 75 a0 48 c7 c7 f3 0c 06 ac c6 05 fb bd 25 01 01 e8 77 84 ff ff &lt;0f&gt; 0b eb 89 48 89 ef e8 3b 41 06 00 eb 98 e8 e4 5c f4 ff 5b 5d c3
&lt;4&gt; [257.743025] RSP: 0018:ffffa78600003cb8 EFLAGS: 00010086
&lt;4&gt; [257.743035] RAX: 0000000000000000 RBX: 0000000000000200 RCX: 0000000000010302
&lt;4&gt; [257.743042] RDX: 0000000080010302 RSI: 0000000000000000 RDI: 00000000ffffffff
&lt;4&gt; [257.743050] RBP: ffffffffc0494bb3 R08: 0000000000000000 R09: 0000000000000001
&lt;4&gt; [257.743058] R10: 0000000014c8f0e9 R11: 00000000fee2ff8e R12: ffffa23ba8c38008
&lt;4&gt; [257.743065] R13: ffffa23bacc579c0 R14: ffffa23bb7db0f60 R15: ffffa23b9cc8c430
&lt;4&gt; [257.743074] FS:  0000000000000000(0000) GS:ffffa23bbba00000(0000) knlGS:0000000000000000
&lt;4&gt; [257.743082] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
&lt;4&gt; [257.743089] CR2: 00007fe477b20778 CR3: 000000011f72a000 CR4: 00000000001006f0
&lt;4&gt; [257.743096] Call Trace:
&lt;4&gt; [257.743104]  &lt;IRQ&gt;
&lt;4&gt; [257.743265]  __i915_request_commit+0x240/0x5d0 [i915]
&lt;4&gt; [257.743427]  ? __i915_request_create+0x228/0x4c0 [i915]
&lt;4&gt; [257.743584]  __engine_park+0x64/0x250 [i915]
&lt;4&gt; [257.743730]  ____intel_wakeref_put_last+0x1c/0x70 [i915]
&lt;4&gt; [257.743878]  i915_sample+0x2ee/0x310 [i915]
&lt;4&gt; [257.744030]  ? i915_pmu_cpu_offline+0xb0/0xb0 [i915]
&lt;4&gt; [257.744040]  __hrtimer_run_queues+0x11e/0x4b0
&lt;4&gt; [257.744068]  hrtimer_interrupt+0xea/0x250
&lt;4&gt; [257.744079]  ? lockdep_hardirqs_off+0x79/0xd0
&lt;4&gt; [257.744101]  smp_apic_timer_interrupt+0x96/0x280
&lt;4&gt; [257.744114]  apic_timer_interrupt+0xf/0x20
&lt;4&gt; [257.744125] RIP: 0010:__do_softirq+0xb3/0x4ae

v2: Keep the priority_hint assert
v3: That assert was desperately trying to point out my bug. Sorry, little
assert.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111378
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Cc: Daniele Ceraolo Spurio &lt;daniele.ceraolospurio@intel.com&gt;
Cc: Mika Kuoppala &lt;mika.kuoppala@linux.intel.com&gt;
Reviewed-by: Mika Kuoppala &lt;mika.kuoppala@linux.intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190813190705.23869-1-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: Defer final intel_wakeref_put to process context</title>
<updated>2019-08-08T20:28:51Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2019-08-08T20:27:58Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c7302f204490f3eb4ef839bec228315bcd3ba43f'/>
<id>urn:sha1:c7302f204490f3eb4ef839bec228315bcd3ba43f</id>
<content type='text'>
As we need to acquire a mutex to serialise the final
intel_wakeref_put, we need to ensure that we are in process context at
that time. However, we want to allow operation on the intel_wakeref from
inside timer and other hardirq context, which means that need to defer
that final put to a workqueue.

Inside the final wakeref puts, we are safe to operate in any context, as
we are simply marking up the HW and state tracking for the potential
sleep. It's only the serialisation with the potential sleeping getting
that requires careful wait avoidance. This allows us to retain the
immediate processing as before (we only need to sleep over the same
races as the current mutex_lock).

v2: Add a selftest to ensure we exercise the code while lockdep watches.
v3: That test was extremely loud and complained about many things!
v4: Not a whale!

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111295
References: https://bugs.freedesktop.org/show_bug.cgi?id=111245
References: https://bugs.freedesktop.org/show_bug.cgi?id=111256
Fixes: 18398904ca9e ("drm/i915: Only recover active engines")
Fixes: 51fbd8de87dc ("drm/i915/pmu: Atomically acquire the gt_pm wakeref")
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Cc: Tvrtko Ursulin &lt;tvrtko.ursulin@intel.com&gt;
Cc: Mika Kuoppala &lt;mika.kuoppala@linux.intel.com&gt;
Reviewed-by: Mika Kuoppala &lt;mika.kuoppala@linux.intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190808202758.10453-1-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: Local debug BUG_ON for intel_wakeref</title>
<updated>2019-06-21T18:48:00Z</updated>
<author>
<name>Chris Wilson</name>
</author>
<published>2019-06-21T18:38:01Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fb993aa7a4049263fc1a139daf89fadc79a0ecc7'/>
<id>urn:sha1:fb993aa7a4049263fc1a139daf89fadc79a0ecc7</id>
<content type='text'>
Avoid pulling in i915_gem.h just so that we can use a conditional BUG_ON
for debugging.

Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Reviewed-by: Matthew Auld &lt;matthew.auld@intel.com&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190621183801.23252-5-chris@chris-wilson.co.uk
</content>
</entry>
<entry>
<title>drm/i915: make intel_wakeref work on the rpm struct</title>
<updated>2019-06-14T14:58:33Z</updated>
<author>
<name>Daniele Ceraolo Spurio</name>
</author>
<published>2019-06-13T23:21:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=58a111f03a6e3f66f68260e09eb5cf1eefe2a387'/>
<id>urn:sha1:58a111f03a6e3f66f68260e09eb5cf1eefe2a387</id>
<content type='text'>
intel_runtime_pm is the only thing they use from the i915 structure,
so use that directly.

Signed-off-by: Daniele Ceraolo Spurio &lt;daniele.ceraolospurio@intel.com&gt;
Reviewed-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190613232156.34940-9-daniele.ceraolospurio@intel.com
</content>
</entry>
<entry>
<title>drm/i915: update rpm_get/put to use the rpm structure</title>
<updated>2019-06-14T14:58:33Z</updated>
<author>
<name>Daniele Ceraolo Spurio</name>
</author>
<published>2019-06-13T23:21:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d858d5695f3897d55df68452066a90d7560cb845'/>
<id>urn:sha1:d858d5695f3897d55df68452066a90d7560cb845</id>
<content type='text'>
The functions where internally already only using the structure, so we
need to just flip the interface.

v2: rebase

Signed-off-by: Daniele Ceraolo Spurio &lt;daniele.ceraolospurio@intel.com&gt;
Cc: Imre Deak &lt;imre.deak@intel.com&gt;
Reviewed-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Acked-by: Imre Deak &lt;imre.deak@intel.com&gt;
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190613232156.34940-7-daniele.ceraolospurio@intel.com
</content>
</entry>
<entry>
<title>drm/i915: Remove rpm asserts that use i915</title>
<updated>2019-06-14T14:58:33Z</updated>
<author>
<name>Daniele Ceraolo Spurio</name>
</author>
<published>2019-06-13T23:21:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=87b391b9518497ecdda7958c723ccd868afb9630'/>
<id>urn:sha1:87b391b9518497ecdda7958c723ccd868afb9630</id>
<content type='text'>
Quite a few of the call points have already switched to the version
working directly on the runtime_pm structure, so let's switch over the
rest and kill the i915-based asserts.

v2: rebase

Signed-off-by: Daniele Ceraolo Spurio &lt;daniele.ceraolospurio@intel.com&gt;
Cc: Imre Deak &lt;imre.deak@intel.com&gt;
Reviewed-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Acked-by: Imre Deak &lt;imre.deak@intel.com&gt;
Signed-off-by: Chris Wilson &lt;chris@chris-wilson.co.uk&gt;
Link: https://patchwork.freedesktop.org/patch/msgid/20190613232156.34940-3-daniele.ceraolospurio@intel.com
</content>
</entry>
</feed>
