diff mbox series

[v2,2/3] drm/gma500: Fix WARN_ON(lock->magic != lock) error

Message ID 20220906203852.527663-3-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show
Series drm/gma500: Fix 2 locking related WARNs + IRQ handling | expand

Commit Message

Hans de Goede Sept. 6, 2022, 8:38 p.m. UTC
psb_gem_unpin() calls dma_resv_lock() but the underlying ww_mutex
gets destroyed by drm_gem_object_release() move the
drm_gem_object_release() call in psb_gem_free_object() to after
the unpin to fix the below warning:

[   79.693962] ------------[ cut here ]------------
[   79.693992] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
[   79.694015] WARNING: CPU: 0 PID: 240 at kernel/locking/mutex.c:582 __ww_mutex_lock.constprop.0+0x569/0xfb0
[   79.694052] Modules linked in: rfcomm snd_seq_dummy snd_hrtimer qrtr bnep ath9k ath9k_common ath9k_hw snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel ath3k snd_intel_dspcfg mac80211 snd_intel_sdw_acpi btusb snd_hda_codec btrtl btbcm btintel btmtk bluetooth at24 snd_hda_core snd_hwdep uvcvideo snd_seq libarc4 videobuf2_vmalloc ath videobuf2_memops videobuf2_v4l2 videobuf2_common snd_seq_device videodev acer_wmi intel_powerclamp coretemp mc snd_pcm joydev sparse_keymap ecdh_generic pcspkr wmi_bmof cfg80211 i2c_i801 i2c_smbus snd_timer snd r8169 rfkill lpc_ich soundcore acpi_cpufreq zram rtsx_pci_sdmmc mmc_core serio_raw rtsx_pci gma500_gfx(E) video wmi ip6_tables ip_tables i2c_dev fuse
[   79.694436] CPU: 0 PID: 240 Comm: plymouthd Tainted: G        W   E      6.0.0-rc3+ #490
[   79.694457] Hardware name: Packard Bell dot s/SJE01_CT, BIOS V1.10 07/23/2013
[   79.694469] RIP: 0010:__ww_mutex_lock.constprop.0+0x569/0xfb0
[   79.694496] Code: ff 85 c0 0f 84 15 fb ff ff 8b 05 ca 3c 11 01 85 c0 0f 85 07 fb ff ff 48 c7 c6 30 cb 84 aa 48 c7 c7 a3 e1 82 aa e8 ac 29 f8 ff <0f> 0b e9 ed fa ff ff e8 5b 83 8a ff 85 c0 74 10 44 8b 0d 98 3c 11
[   79.694513] RSP: 0018:ffffad1dc048bbe0 EFLAGS: 00010282
[   79.694623] RAX: 0000000000000028 RBX: 0000000000000000 RCX: 0000000000000000
[   79.694636] RDX: 0000000000000001 RSI: ffffffffaa8b0ffc RDI: 00000000ffffffff
[   79.694650] RBP: ffffad1dc048bc80 R08: 0000000000000000 R09: ffffad1dc048ba90
[   79.694662] R10: 0000000000000003 R11: ffffffffaad62fe8 R12: ffff9ff302103138
[   79.694675] R13: ffff9ff306ec8000 R14: ffff9ff307779078 R15: ffff9ff3014c0270
[   79.694690] FS:  00007ff1cccf1740(0000) GS:ffff9ff3bc200000(0000) knlGS:0000000000000000
[   79.694705] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   79.694719] CR2: 0000559ecbcb4420 CR3: 0000000013210000 CR4: 00000000000006f0
[   79.694734] Call Trace:
[   79.694749]  <TASK>
[   79.694761]  ? __schedule+0x47f/0x1670
[   79.694796]  ? psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
[   79.694830]  ? lock_is_held_type+0xe3/0x140
[   79.694864]  ? ww_mutex_lock+0x38/0xa0
[   79.694885]  ? __cond_resched+0x1c/0x30
[   79.694902]  ww_mutex_lock+0x38/0xa0
[   79.694925]  psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
[   79.694964]  psb_gem_unpin+0x199/0x1a0 [gma500_gfx]
[   79.694996]  drm_gem_object_release_handle+0x50/0x60
[   79.695020]  ? drm_gem_object_handle_put_unlocked+0xf0/0xf0
[   79.695042]  idr_for_each+0x4b/0xb0
[   79.695066]  ? _raw_spin_unlock_irqrestore+0x30/0x60
[   79.695095]  drm_gem_release+0x1c/0x30
[   79.695118]  drm_file_free.part.0+0x1ea/0x260
[   79.695150]  drm_release+0x6a/0x120
[   79.695175]  __fput+0x9f/0x260
[   79.695203]  task_work_run+0x59/0xa0
[   79.695227]  do_exit+0x387/0xbe0
[   79.695250]  ? seqcount_lockdep_reader_access.constprop.0+0x82/0x90
[   79.695275]  ? lockdep_hardirqs_on+0x7d/0x100
[   79.695304]  do_group_exit+0x33/0xb0
[   79.695331]  __x64_sys_exit_group+0x14/0x20
[   79.695353]  do_syscall_64+0x58/0x80
[   79.695376]  ? up_read+0x17/0x20
[   79.695401]  ? lock_is_held_type+0xe3/0x140
[   79.695429]  ? asm_exc_page_fault+0x22/0x30
[   79.695450]  ? lockdep_hardirqs_on+0x7d/0x100
[   79.695473]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
[   79.695493] RIP: 0033:0x7ff1ccefe3f1
[   79.695516] Code: Unable to access opcode bytes at RIP 0x7ff1ccefe3c7.
[   79.695607] RSP: 002b:00007ffed4413378 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
[   79.695629] RAX: ffffffffffffffda RBX: 00007ff1cd0159e0 RCX: 00007ff1ccefe3f1
[   79.695644] RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000000
[   79.695656] RBP: 0000000000000000 R08: ffffffffffffff80 R09: 00007ff1cd020b20
[   79.695671] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ff1cd0159e0
[   79.695684] R13: 0000000000000000 R14: 00007ff1cd01aee8 R15: 00007ff1cd01af00
[   79.695733]  </TASK>
[   79.695746] irq event stamp: 725979
[   79.695757] hardirqs last  enabled at (725979): [<ffffffffa9132d54>] finish_task_switch.isra.0+0xe4/0x3f0
[   79.695780] hardirqs last disabled at (725978): [<ffffffffa9eb4113>] __schedule+0xdd3/0x1670
[   79.695803] softirqs last  enabled at (725974): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
[   79.695825] softirqs last disabled at (725969): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
[   79.695845] ---[ end trace 0000000000000000 ]---

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/gpu/drm/gma500/gem.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Patrik Jakobsson Sept. 9, 2022, 8:20 a.m. UTC | #1
On Tue, Sep 6, 2022 at 10:38 PM Hans de Goede <hdegoede@redhat.com> wrote:
>
> psb_gem_unpin() calls dma_resv_lock() but the underlying ww_mutex
> gets destroyed by drm_gem_object_release() move the
> drm_gem_object_release() call in psb_gem_free_object() to after
> the unpin to fix the below warning:

Looks good. I'll apply this to drm-misc-fixes. Let me know if it
should go somewhere else.

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>

>
> [   79.693962] ------------[ cut here ]------------
> [   79.693992] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
> [   79.694015] WARNING: CPU: 0 PID: 240 at kernel/locking/mutex.c:582 __ww_mutex_lock.constprop.0+0x569/0xfb0
> [   79.694052] Modules linked in: rfcomm snd_seq_dummy snd_hrtimer qrtr bnep ath9k ath9k_common ath9k_hw snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel ath3k snd_intel_dspcfg mac80211 snd_intel_sdw_acpi btusb snd_hda_codec btrtl btbcm btintel btmtk bluetooth at24 snd_hda_core snd_hwdep uvcvideo snd_seq libarc4 videobuf2_vmalloc ath videobuf2_memops videobuf2_v4l2 videobuf2_common snd_seq_device videodev acer_wmi intel_powerclamp coretemp mc snd_pcm joydev sparse_keymap ecdh_generic pcspkr wmi_bmof cfg80211 i2c_i801 i2c_smbus snd_timer snd r8169 rfkill lpc_ich soundcore acpi_cpufreq zram rtsx_pci_sdmmc mmc_core serio_raw rtsx_pci gma500_gfx(E) video wmi ip6_tables ip_tables i2c_dev fuse
> [   79.694436] CPU: 0 PID: 240 Comm: plymouthd Tainted: G        W   E      6.0.0-rc3+ #490
> [   79.694457] Hardware name: Packard Bell dot s/SJE01_CT, BIOS V1.10 07/23/2013
> [   79.694469] RIP: 0010:__ww_mutex_lock.constprop.0+0x569/0xfb0
> [   79.694496] Code: ff 85 c0 0f 84 15 fb ff ff 8b 05 ca 3c 11 01 85 c0 0f 85 07 fb ff ff 48 c7 c6 30 cb 84 aa 48 c7 c7 a3 e1 82 aa e8 ac 29 f8 ff <0f> 0b e9 ed fa ff ff e8 5b 83 8a ff 85 c0 74 10 44 8b 0d 98 3c 11
> [   79.694513] RSP: 0018:ffffad1dc048bbe0 EFLAGS: 00010282
> [   79.694623] RAX: 0000000000000028 RBX: 0000000000000000 RCX: 0000000000000000
> [   79.694636] RDX: 0000000000000001 RSI: ffffffffaa8b0ffc RDI: 00000000ffffffff
> [   79.694650] RBP: ffffad1dc048bc80 R08: 0000000000000000 R09: ffffad1dc048ba90
> [   79.694662] R10: 0000000000000003 R11: ffffffffaad62fe8 R12: ffff9ff302103138
> [   79.694675] R13: ffff9ff306ec8000 R14: ffff9ff307779078 R15: ffff9ff3014c0270
> [   79.694690] FS:  00007ff1cccf1740(0000) GS:ffff9ff3bc200000(0000) knlGS:0000000000000000
> [   79.694705] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   79.694719] CR2: 0000559ecbcb4420 CR3: 0000000013210000 CR4: 00000000000006f0
> [   79.694734] Call Trace:
> [   79.694749]  <TASK>
> [   79.694761]  ? __schedule+0x47f/0x1670
> [   79.694796]  ? psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
> [   79.694830]  ? lock_is_held_type+0xe3/0x140
> [   79.694864]  ? ww_mutex_lock+0x38/0xa0
> [   79.694885]  ? __cond_resched+0x1c/0x30
> [   79.694902]  ww_mutex_lock+0x38/0xa0
> [   79.694925]  psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
> [   79.694964]  psb_gem_unpin+0x199/0x1a0 [gma500_gfx]
> [   79.694996]  drm_gem_object_release_handle+0x50/0x60
> [   79.695020]  ? drm_gem_object_handle_put_unlocked+0xf0/0xf0
> [   79.695042]  idr_for_each+0x4b/0xb0
> [   79.695066]  ? _raw_spin_unlock_irqrestore+0x30/0x60
> [   79.695095]  drm_gem_release+0x1c/0x30
> [   79.695118]  drm_file_free.part.0+0x1ea/0x260
> [   79.695150]  drm_release+0x6a/0x120
> [   79.695175]  __fput+0x9f/0x260
> [   79.695203]  task_work_run+0x59/0xa0
> [   79.695227]  do_exit+0x387/0xbe0
> [   79.695250]  ? seqcount_lockdep_reader_access.constprop.0+0x82/0x90
> [   79.695275]  ? lockdep_hardirqs_on+0x7d/0x100
> [   79.695304]  do_group_exit+0x33/0xb0
> [   79.695331]  __x64_sys_exit_group+0x14/0x20
> [   79.695353]  do_syscall_64+0x58/0x80
> [   79.695376]  ? up_read+0x17/0x20
> [   79.695401]  ? lock_is_held_type+0xe3/0x140
> [   79.695429]  ? asm_exc_page_fault+0x22/0x30
> [   79.695450]  ? lockdep_hardirqs_on+0x7d/0x100
> [   79.695473]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
> [   79.695493] RIP: 0033:0x7ff1ccefe3f1
> [   79.695516] Code: Unable to access opcode bytes at RIP 0x7ff1ccefe3c7.
> [   79.695607] RSP: 002b:00007ffed4413378 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
> [   79.695629] RAX: ffffffffffffffda RBX: 00007ff1cd0159e0 RCX: 00007ff1ccefe3f1
> [   79.695644] RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000000
> [   79.695656] RBP: 0000000000000000 R08: ffffffffffffff80 R09: 00007ff1cd020b20
> [   79.695671] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ff1cd0159e0
> [   79.695684] R13: 0000000000000000 R14: 00007ff1cd01aee8 R15: 00007ff1cd01af00
> [   79.695733]  </TASK>
> [   79.695746] irq event stamp: 725979
> [   79.695757] hardirqs last  enabled at (725979): [<ffffffffa9132d54>] finish_task_switch.isra.0+0xe4/0x3f0
> [   79.695780] hardirqs last disabled at (725978): [<ffffffffa9eb4113>] __schedule+0xdd3/0x1670
> [   79.695803] softirqs last  enabled at (725974): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
> [   79.695825] softirqs last disabled at (725969): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
> [   79.695845] ---[ end trace 0000000000000000 ]---
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/gpu/drm/gma500/gem.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
> index dffe37490206..4b7627a72637 100644
> --- a/drivers/gpu/drm/gma500/gem.c
> +++ b/drivers/gpu/drm/gma500/gem.c
> @@ -112,12 +112,12 @@ static void psb_gem_free_object(struct drm_gem_object *obj)
>  {
>         struct psb_gem_object *pobj = to_psb_gem_object(obj);
>
> -       drm_gem_object_release(obj);
> -
>         /* Undo the mmap pin if we are destroying the object */
>         if (pobj->mmapping)
>                 psb_gem_unpin(pobj);
>
> +       drm_gem_object_release(obj);
> +
>         WARN_ON(pobj->in_gart && !pobj->stolen);
>
>         release_resource(&pobj->resource);
> --
> 2.37.2
>
Hans de Goede Sept. 9, 2022, 9:03 a.m. UTC | #2
Hi,

On 9/9/22 10:20, Patrik Jakobsson wrote:
> On Tue, Sep 6, 2022 at 10:38 PM Hans de Goede <hdegoede@redhat.com> wrote:
>>
>> psb_gem_unpin() calls dma_resv_lock() but the underlying ww_mutex
>> gets destroyed by drm_gem_object_release() move the
>> drm_gem_object_release() call in psb_gem_free_object() to after
>> the unpin to fix the below warning:
> 
> Looks good. I'll apply this to drm-misc-fixes. Let me know if it
> should go somewhere else.

drm-misc-fixes sounds good to me, thank you.

Regards,

Hans


> 
> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> 
>>
>> [   79.693962] ------------[ cut here ]------------
>> [   79.693992] DEBUG_LOCKS_WARN_ON(lock->magic != lock)
>> [   79.694015] WARNING: CPU: 0 PID: 240 at kernel/locking/mutex.c:582 __ww_mutex_lock.constprop.0+0x569/0xfb0
>> [   79.694052] Modules linked in: rfcomm snd_seq_dummy snd_hrtimer qrtr bnep ath9k ath9k_common ath9k_hw snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_codec_hdmi snd_hda_intel ath3k snd_intel_dspcfg mac80211 snd_intel_sdw_acpi btusb snd_hda_codec btrtl btbcm btintel btmtk bluetooth at24 snd_hda_core snd_hwdep uvcvideo snd_seq libarc4 videobuf2_vmalloc ath videobuf2_memops videobuf2_v4l2 videobuf2_common snd_seq_device videodev acer_wmi intel_powerclamp coretemp mc snd_pcm joydev sparse_keymap ecdh_generic pcspkr wmi_bmof cfg80211 i2c_i801 i2c_smbus snd_timer snd r8169 rfkill lpc_ich soundcore acpi_cpufreq zram rtsx_pci_sdmmc mmc_core serio_raw rtsx_pci gma500_gfx(E) video wmi ip6_tables ip_tables i2c_dev fuse
>> [   79.694436] CPU: 0 PID: 240 Comm: plymouthd Tainted: G        W   E      6.0.0-rc3+ #490
>> [   79.694457] Hardware name: Packard Bell dot s/SJE01_CT, BIOS V1.10 07/23/2013
>> [   79.694469] RIP: 0010:__ww_mutex_lock.constprop.0+0x569/0xfb0
>> [   79.694496] Code: ff 85 c0 0f 84 15 fb ff ff 8b 05 ca 3c 11 01 85 c0 0f 85 07 fb ff ff 48 c7 c6 30 cb 84 aa 48 c7 c7 a3 e1 82 aa e8 ac 29 f8 ff <0f> 0b e9 ed fa ff ff e8 5b 83 8a ff 85 c0 74 10 44 8b 0d 98 3c 11
>> [   79.694513] RSP: 0018:ffffad1dc048bbe0 EFLAGS: 00010282
>> [   79.694623] RAX: 0000000000000028 RBX: 0000000000000000 RCX: 0000000000000000
>> [   79.694636] RDX: 0000000000000001 RSI: ffffffffaa8b0ffc RDI: 00000000ffffffff
>> [   79.694650] RBP: ffffad1dc048bc80 R08: 0000000000000000 R09: ffffad1dc048ba90
>> [   79.694662] R10: 0000000000000003 R11: ffffffffaad62fe8 R12: ffff9ff302103138
>> [   79.694675] R13: ffff9ff306ec8000 R14: ffff9ff307779078 R15: ffff9ff3014c0270
>> [   79.694690] FS:  00007ff1cccf1740(0000) GS:ffff9ff3bc200000(0000) knlGS:0000000000000000
>> [   79.694705] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [   79.694719] CR2: 0000559ecbcb4420 CR3: 0000000013210000 CR4: 00000000000006f0
>> [   79.694734] Call Trace:
>> [   79.694749]  <TASK>
>> [   79.694761]  ? __schedule+0x47f/0x1670
>> [   79.694796]  ? psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
>> [   79.694830]  ? lock_is_held_type+0xe3/0x140
>> [   79.694864]  ? ww_mutex_lock+0x38/0xa0
>> [   79.694885]  ? __cond_resched+0x1c/0x30
>> [   79.694902]  ww_mutex_lock+0x38/0xa0
>> [   79.694925]  psb_gem_unpin+0x27/0x1a0 [gma500_gfx]
>> [   79.694964]  psb_gem_unpin+0x199/0x1a0 [gma500_gfx]
>> [   79.694996]  drm_gem_object_release_handle+0x50/0x60
>> [   79.695020]  ? drm_gem_object_handle_put_unlocked+0xf0/0xf0
>> [   79.695042]  idr_for_each+0x4b/0xb0
>> [   79.695066]  ? _raw_spin_unlock_irqrestore+0x30/0x60
>> [   79.695095]  drm_gem_release+0x1c/0x30
>> [   79.695118]  drm_file_free.part.0+0x1ea/0x260
>> [   79.695150]  drm_release+0x6a/0x120
>> [   79.695175]  __fput+0x9f/0x260
>> [   79.695203]  task_work_run+0x59/0xa0
>> [   79.695227]  do_exit+0x387/0xbe0
>> [   79.695250]  ? seqcount_lockdep_reader_access.constprop.0+0x82/0x90
>> [   79.695275]  ? lockdep_hardirqs_on+0x7d/0x100
>> [   79.695304]  do_group_exit+0x33/0xb0
>> [   79.695331]  __x64_sys_exit_group+0x14/0x20
>> [   79.695353]  do_syscall_64+0x58/0x80
>> [   79.695376]  ? up_read+0x17/0x20
>> [   79.695401]  ? lock_is_held_type+0xe3/0x140
>> [   79.695429]  ? asm_exc_page_fault+0x22/0x30
>> [   79.695450]  ? lockdep_hardirqs_on+0x7d/0x100
>> [   79.695473]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
>> [   79.695493] RIP: 0033:0x7ff1ccefe3f1
>> [   79.695516] Code: Unable to access opcode bytes at RIP 0x7ff1ccefe3c7.
>> [   79.695607] RSP: 002b:00007ffed4413378 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
>> [   79.695629] RAX: ffffffffffffffda RBX: 00007ff1cd0159e0 RCX: 00007ff1ccefe3f1
>> [   79.695644] RDX: 000000000000003c RSI: 00000000000000e7 RDI: 0000000000000000
>> [   79.695656] RBP: 0000000000000000 R08: ffffffffffffff80 R09: 00007ff1cd020b20
>> [   79.695671] R10: 0000000000000000 R11: 0000000000000246 R12: 00007ff1cd0159e0
>> [   79.695684] R13: 0000000000000000 R14: 00007ff1cd01aee8 R15: 00007ff1cd01af00
>> [   79.695733]  </TASK>
>> [   79.695746] irq event stamp: 725979
>> [   79.695757] hardirqs last  enabled at (725979): [<ffffffffa9132d54>] finish_task_switch.isra.0+0xe4/0x3f0
>> [   79.695780] hardirqs last disabled at (725978): [<ffffffffa9eb4113>] __schedule+0xdd3/0x1670
>> [   79.695803] softirqs last  enabled at (725974): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
>> [   79.695825] softirqs last disabled at (725969): [<ffffffffa90fbc9d>] __irq_exit_rcu+0xed/0x160
>> [   79.695845] ---[ end trace 0000000000000000 ]---
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>  drivers/gpu/drm/gma500/gem.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
>> index dffe37490206..4b7627a72637 100644
>> --- a/drivers/gpu/drm/gma500/gem.c
>> +++ b/drivers/gpu/drm/gma500/gem.c
>> @@ -112,12 +112,12 @@ static void psb_gem_free_object(struct drm_gem_object *obj)
>>  {
>>         struct psb_gem_object *pobj = to_psb_gem_object(obj);
>>
>> -       drm_gem_object_release(obj);
>> -
>>         /* Undo the mmap pin if we are destroying the object */
>>         if (pobj->mmapping)
>>                 psb_gem_unpin(pobj);
>>
>> +       drm_gem_object_release(obj);
>> +
>>         WARN_ON(pobj->in_gart && !pobj->stolen);
>>
>>         release_resource(&pobj->resource);
>> --
>> 2.37.2
>>
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
index dffe37490206..4b7627a72637 100644
--- a/drivers/gpu/drm/gma500/gem.c
+++ b/drivers/gpu/drm/gma500/gem.c
@@ -112,12 +112,12 @@  static void psb_gem_free_object(struct drm_gem_object *obj)
 {
 	struct psb_gem_object *pobj = to_psb_gem_object(obj);
 
-	drm_gem_object_release(obj);
-
 	/* Undo the mmap pin if we are destroying the object */
 	if (pobj->mmapping)
 		psb_gem_unpin(pobj);
 
+	drm_gem_object_release(obj);
+
 	WARN_ON(pobj->in_gart && !pobj->stolen);
 
 	release_resource(&pobj->resource);