lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Fri, 21 Jun 2024 09:29:38 +0200
From: Christian König <christian.koenig@....com>
To: Thomas Zimmermann <tzimmermann@...e.de>, Hoi Pok Wu <wuhoipok@...il.com>
Cc: Alex Deucher <alexander.deucher@....com>, "Pan, Xinhui"
 <Xinhui.Pan@....com>, David Airlie <airlied@...il.com>,
 Daniel Vetter <daniel@...ll.ch>,
 "open list:RADEON and AMDGPU DRM DRIVERS" <amd-gfx@...ts.freedesktop.org>,
 "open list:DRM DRIVERS" <dri-devel@...ts.freedesktop.org>,
 open list <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] drm/radeon: remove load callback

Am 21.06.24 um 09:16 schrieb Thomas Zimmermann:
> Hi
>
> Am 20.06.24 um 16:30 schrieb Hoi Pok Wu:
>> Dear Thomas,
>>
>> Thank you for testing my patch. The dev->dev_private is indeed the 
>> problem.
>>
>> However, most of the functions that uses dev->dev_private is passing
>> drm_device as parameter, and then uses dev->dev_private to retrieve
>> radeon_device,
>> contradicting what the patch intended. It should use radeon_device 
>> directly.
>> Should I send a follow up patch with the updated patch?
>
> Simply assign the radeon_device to dev_private as before and you'll be 
> fine. Reworking all function calls would be a patchset of its own.

Yeah, completely agree. Try to keep it as simply and stupid as possible 
for now, more extensive cleanups can come later.

And thanks a lot for looking into this and testing the stuff.

Regards,
Christian.

>
> Best regards
> Thomas
>
>>
>> Thank you.
>>
>> Best Regards
>> Wu
>>
>> On Wed, Jun 19, 2024 at 10:28 AM Thomas Zimmermann 
>> <tzimmermann@...e.de> wrote:
>>> Hi
>>>
>>> Am 07.06.24 um 03:14 schrieb wu hoi pok:
>>>> this patch is to remove the load callback from the kms_driver,
>>>> following closly to amdgpu, radeon_driver_load_kms and 
>>>> devm_drm_dev_alloc
>>>> are used, most of the changes here are rdev->ddev to rdev_to_drm,
>>>> which maps to adev_to_drm in amdgpu. however this patch is not 
>>>> tested on
>>>> hardware, so if you are free and have a gcn1 gcn2 card please do so.
>>>>
>>>> Signed-off-by: wu hoi pok <wuhoipok@...il.com>
>>> I volunteer for testing. The test device is
>>>
>>> 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc.
>>> [AMD/ATI] Turks PRO [Radeon HD 6570/7570/8550 / R5 230] (prog-if 00 
>>> [VGA
>>> controller])
>>>           Subsystem: PC Partner Limited / Sapphire Technology Device 
>>> e193
>>>           Flags: bus master, fast devsel, latency 0, IRQ 147
>>>           Memory at c0000000 (64-bit, prefetchable) [size=256M]
>>>           Memory at dfe20000 (64-bit, non-prefetchable) [size=128K]
>>>           I/O ports at e000 [size=256]
>>>           Expansion ROM at 000c0000 [disabled] [size=128K]
>>>           Capabilities: <access denied>
>>>           Kernel driver in use: radeon
>>>           Kernel modules: radeon, amdgpu
>>>
>>>
>>> With the current patch, the driver crashes upon booting. Here is your
>>> backtrace:
>>>
>>> [   24.013524] Console: switching to colour dummy device 80x25
>>> [   24.021093] radeon 0000:01:00.0: vgaarb: deactivate vga console
>>> [   24.031806] [drm] initializing kernel modesetting (TURKS
>>> 0x1002:0x6759 0x174B:0xE193 0x00).
>>> [   24.041066] ATOM BIOS: YODA
>>> [   24.043930]
>>> ==================================================================
>>> [   24.051195] BUG: KASAN: user-memory-access in
>>> radeon_atom_initialize_bios_scratch_regs+0x33/0x110 [radeon]
>>> [   24.061287] Read of size 4 at addr 0000000000001058 by task
>>> (udev-worker)/349
>>> [   24.061292]
>>> [   24.061295] CPU: 3 PID: 349 Comm: (udev-worker) Tainted: G U
>>> E      6.10.0-rc4-1-default+ #2977
>>> [   24.061301] Hardware name: System manufacturer System Product
>>> Name/Z170-A, BIOS 3802 03/15/2018
>>> [   24.061305] Call Trace:
>>> [  OK     24.061308]  <TASK>
>>> [   24.061313]  dump_stack_lvl+0x68/0x90
>>> [   24.061322]  ? radeon_atom_initialize_bios_scratch_regs+0x33/0x110
>>> [radeon]
>>> 0m] Finished    24.105026]  kasan_report+0xcf/0x1a0
>>> [   24.105039]  ? radeon_atom_initialize_bios_scratch_regs+0x33/0x110
>>> [radeon]
>>> ;1;39mCreate Vol[   24.117055]  ? __pfx_cail_ioreg_read+0x10/0x10 
>>> [radeon]
>>> atile Files and [   24.123698]
>>> radeon_atom_initialize_bios_scratch_regs+0x33/0x110 [radeon]
>>> Directories.[   24.131933]  radeon_atombios_init+0x192/0x220 [radeon]
>>>
>>> [   24.138506]  evergreen_init+0x57/0x400 [radeon]
>>> [   24.143473]  radeon_device_init+0x8f2/0x1040 [radeon]
>>> [   24.148897]  ? down_read_failed+0x7/0x410
>>> [   24.152936]  ? ksm_might_need_to_copy+0x10/0x280
>>> [   24.157594]  radeon_driver_load_kms+0xe3/0x330 [radeon]
>>> [   24.163198]  radeon_pci_probe+0x117/0x180 [radeon]
>>> [   24.168431]  ? __pfx_radeon_pci_probe+0x10/0x10 [radeon]
>>> [   24.174161]  local_pci_probe+0x74/0xc0
>>> [   24.177945]  pci_call_probe+0xc6/0x260
>>> [   24.181727]  ? __pfx_pci_call_probe+0x10/0x10
>>> [   24.186118]  ? do_raw_spin_trylock+0xb0/0xf0
>>> [   24.190439]  ? pci_match_device+0x1c5/0x240
>>> [   24.194651]  ? pci_match_id+0x102/0x150
>>> [   24.198522]  ? pci_match_device+0x1dd/0x240
>>> [   24.202752]  pci_device_probe+0x9d/0x150
>>> [   24.206705]  ? driver_sysfs_add+0xb0/0x130
>>> [   24.210838]  really_probe+0x13b/0x490
>>> [   24.214547]  __driver_probe_device+0xca/0x1b0
>>> [   24.218943]  driver_probe_device+0x4a/0xf0
>>> [   24.223073]  __driver_attach+0x136/0x290
>>> [   24.227032]  ? __pfx___driver_attach+0x10/0x10
>>> [   24.231508]  bus_for_each_dev+0xc0/0x110
>>> [   24.235465]  ? __pfx_bus_for_each_dev+0x10/0x10
>>> [   24.240032]  ? bus_add_driver+0x17a/0x2b0
>>> [   24.244079]  bus_add_driver+0x19a/0x2b0
>>> [   24.247950]  driver_register+0xc5/0x140
>>> [   24.251817]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
>>> [   24.257674]  do_one_initcall+0xbc/0x390
>>> [   24.261542]  ? __pfx_do_one_initcall+0x10/0x10
>>> [   24.266022]  ? kasan_unpoison+0x40/0x70
>>> [   24.269891]  ? rcu_is_watching+0x34/0x60
>>> [   24.273849]  ? kmalloc_trace_noprof+0x286/0x320
>>> [   24.278415]  ? do_init_module+0x38/0x3a0
>>> [   24.282387]  ? kasan_unpoison+0x40/0x70
>>> [   24.286264]  do_init_module+0x13a/0x3a0
>>> [   24.290133]  init_module_from_file+0xc0/0x100
>>> [   24.294523]  ? __pfx_init_module_from_file+0x10/0x10
>>> [   24.299522]  ? __lock_release.isra.0+0x132/0x4f0
>>> [   24.304185]  ? do_raw_spin_unlock+0x83/0xe0
>>> [   24.304209]  idempotent_init_module+0x1b7/0x3e0
>>> [   24.304217]  ? __pfx_idempotent_init_module+0x10/0x10
>>> [   24.304244]  ? security_capable+0x2e/0x80
>>> [   24.322122]  __x64_sys_finit_module+0x78/0xd0
>>> [   24.326527]  do_syscall_64+0x69/0x140
>>> [   24.330223]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>>> [   24.335316] RIP: 0033:0x7f23d81e0bcd
>>> [   24.338937] Code: 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 90 90
>>> 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f
>>> 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1b d2 0d 00 f7 d8 64 89 01 48
>>> [   24.357784] RSP: 002b:00007ffc0ab94858 EFLAGS: 00000246 ORIG_RAX:
>>> 0000000000000139
>>> [   24.365430] RAX: ffffffffffffffda RBX: 0000556312b67370 RCX:
>>> 00007f23d81e0bcd
>>> [   24.372610] RDX: 0000000000000000 RSI: 00007f23d82ea061 RDI:
>>> 0000000000000025
>>> [   24.379787] RBP: 00007f23d82ea061 R08: 0000000000000001 R09:
>>> 0000556312b65820
>>> [   24.386960] R10: 0000000000000050 R11: 0000000000000246 R12:
>>> 0000000000020000
>>> [   24.394138] R13: 0000000000000000 R14: 0000556312b70880 R15:
>>> 0000000000000000
>>> [   24.401323]  </TASK>
>>> [   24.403530]
>>> ==================================================================
>>> [   24.410813] Disabling lock debugging due to kernel taint
>>> [   24.416165] BUG: unable to handle page fault for address:
>>> 0000000000001058
>>> [   24.423072] #PF: supervisor read access in kernel mode
>>> [   24.428245] #PF: error_code(0x0000) - not-present page
>>> [   24.433416] PGD 0 P4D 0
>>> [   24.435984] Oops: Oops: 0000 [#1] PREEMPT SMP KASAN PTI
>>> [   24.441240] CPU: 3 PID: 349 Comm: (udev-worker) Tainted: G BU
>>> E      6.10.0-rc4-1-default+ #2977
>>> [   24.450775] Hardware name: System manufacturer System Product
>>> Name/Z170-A, BIOS 3802 03/15/2018
>>> [   24.459512] RIP:
>>> 0010:radeon_atom_initialize_bios_scratch_regs+0x33/0x110 [radeon]
>>> [   24.467461] Code: 41 54 55 53 48 89 fb 48 83 c7 78 e8 e7 17 cd e7 48
>>> 8b 5b 78 4c 8d b3 58 10 00 00 4c 8d ab 08 14 00 00 4c 89 f7 e8 9d 16 cd
>>> e7 <8b> ab 58 10 00 00 4c 89 ef e8 bf 17 cd e7 48 8b 83 08 14 00 00 83
>>> [   24.486310] RSP: 0018:ffffc90001bdf748 EFLAGS: 00010282
>>> [   24.491565] RAX: 0000000000000001 RBX: 0000000000000000 RCX:
>>> ffffffffa8116556
>>> [   24.498736] RDX: fffffbfff584b7d5 RSI: 0000000000000008 RDI:
>>> ffffffffac25bea0
>>> [   24.505934] RBP: ffff8881398b8000 R08: 0000000000000001 R09:
>>> fffffbfff584b7d4
>>> [   24.513105] R10: ffffffffac25bea7 R11: 0000000000000001 R12:
>>> ffff8881398b8008
>>> [   24.520284] R13: 0000000000001408 R14: 0000000000001058 R15:
>>> ffffffffc08ffb00
>>> [   24.527458] FS:  00007f23d7627900(0000) GS:ffff88841d800000(0000)
>>> knlGS:0000000000000000
>>> [   24.535591] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> [   24.541396] CR2: 0000000000001058 CR3: 0000000104e24003 CR4:
>>> 00000000003706f0
>>> [   24.548568] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
>>> 0000000000000000
>>> [   24.555741] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
>>> 0000000000000400
>>> [   24.562916] Call Trace:
>>> [   24.565390]  <TASK>
>>> [   24.567511]  ? show_trace_log_lvl+0x1af/0x2c0
>>> [   24.571896]  ? show_trace_log_lvl+0x1af/0x2c0
>>> [   24.576281]  ? show_trace_log_lvl+0x1af/0x2c0
>>> [   24.580679]  ? radeon_atombios_init+0x192/0x220 [radeon]
>>> [   24.586355]  ? __die_body.cold+0x8/0x12
>>> [   24.590220]  ? page_fault_oops+0xed/0x190
>>> [   24.594258]  ? __pfx_page_fault_oops+0x10/0x10
>>> [   24.598736]  ? do_user_addr_fault+0x44f/0x710
>>> [   24.603129]  ? rcu_is_watching+0x34/0x60
>>> [   24.607088]  ? exc_page_fault+0x65/0xf0
>>> [   24.610956]  ? asm_exc_page_fault+0x22/0x30
>>> [   24.615174]  ? __pfx_cail_ioreg_read+0x10/0x10 [radeon]
>>> [   24.620831]  ? add_taint+0x26/0x70
>>> [   24.624246]  ? radeon_atom_initialize_bios_scratch_regs+0x33/0x110
>>> [radeon]
>>> [   24.631556]  ? radeon_atom_initialize_bios_scratch_regs+0x33/0x110
>>> [radeon]
>>> [   24.638844]  radeon_atombios_init+0x192/0x220 [radeon]
>>> [   24.644309]  evergreen_init+0x57/0x400 [radeon]
>>> [   24.649237]  radeon_device_init+0x8f2/0x1040 [radeon]
>>> [   24.654662]  ? down_read_failed+0x7/0x410
>>> [   24.658670]  ? ksm_might_need_to_copy+0x10/0x280
>>> [   24.663309]  radeon_driver_load_kms+0xe3/0x330 [radeon]
>>> [   24.668892]  radeon_pci_probe+0x117/0x180 [radeon]
>>> [   24.674012]  ? __pfx_radeon_pci_probe+0x10/0x10 [radeon]
>>> [   24.679651]  local_pci_probe+0x74/0xc0
>>> [   24.683405]  pci_call_probe+0xc6/0x260
>>> [   24.687158]  ? __pfx_pci_call_probe+0x10/0x10
>>> [   24.691512]  ? do_raw_spin_trylock+0xb0/0xf0
>>> [   24.695789]  ? pci_match_device+0x1c5/0x240
>>> [   24.699974]  ? pci_match_id+0x102/0x150
>>> [   24.703809]  ? pci_match_device+0x1dd/0x240
>>> [   24.708000]  pci_device_probe+0x9d/0x150
>>> [   24.711924]  ? driver_sysfs_add+0xb0/0x130
>>> [   24.716029]  really_probe+0x13b/0x490
>>> [   24.719700]  __driver_probe_device+0xca/0x1b0
>>> [   24.724059]  driver_probe_device+0x4a/0xf0
>>> [   24.728162]  __driver_attach+0x136/0x290
>>> [   24.732106]  ? __pfx___driver_attach+0x10/0x10
>>> [   24.736551]  bus_for_each_dev+0xc0/0x110
>>> [   24.740481]  ? __pfx_bus_for_each_dev+0x10/0x10
>>> [   24.745013]  ? bus_add_driver+0x17a/0x2b0
>>> [   24.749033]  bus_add_driver+0x19a/0x2b0
>>> [   24.752875]  driver_register+0xc5/0x140
>>> [   24.756713]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
>>> [   24.762519]  do_one_initcall+0xbc/0x390
>>> [   24.766357]  ? __pfx_do_one_initcall+0x10/0x10
>>> [   24.770806]  ? kasan_unpoison+0x40/0x70
>>> [   24.774650]  ? rcu_is_watching+0x34/0x60
>>> [   24.778589]  ? kmalloc_trace_noprof+0x286/0x320
>>> [   24.783118]  ? do_init_module+0x38/0x3a0
>>> [   24.787048]  ? kasan_unpoison+0x40/0x70
>>> [   24.790894]  do_init_module+0x13a/0x3a0
>>> [   24.794737]  init_module_from_file+0xc0/0x100
>>> [   24.799095]  ? __pfx_init_module_from_file+0x10/0x10
>>> [   24.804060]  ? __lock_release.isra.0+0x132/0x4f0
>>> [   24.808687]  ? do_raw_spin_unlock+0x83/0xe0
>>> [   24.812875]  idempotent_init_module+0x1b7/0x3e0
>>> [   24.817425]  ? __pfx_idempotent_init_module+0x10/0x10
>>> [   24.822493]  ? security_capable+0x2e/0x80
>>> [   24.826514]  __x64_sys_finit_module+0x78/0xd0
>>> [   24.830870]  do_syscall_64+0x69/0x140
>>> [   24.834539]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>>> [   24.839591] RIP: 0033:0x7f23d81e0bcd
>>> [   24.843171] Code: 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 90 90
>>> 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f
>>> 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1b d2 0d 00 f7 d8 64 89 01 48
>>> [   24.861883] RSP: 002b:00007ffc0ab94858 EFLAGS: 00000246 ORIG_RAX:
>>> 0000000000000139
>>> [   24.869444] RAX: ffffffffffffffda RBX: 0000556312b67370 RCX:
>>> 00007f23d81e0bcd
>>> [   24.876569] RDX: 0000000000000000 RSI: 00007f23d82ea061 RDI:
>>> 0000000000000025
>>> [   24.883693] RBP: 00007f23d82ea061 R08: 0000000000000001 R09:
>>> 0000556312b65820
>>> [   24.890819] R10: 0000000000000050 R11: 0000000000000246 R12:
>>> 0000000000020000
>>> [   24.897943] R13: 0000000000000000 R14: 0000556312b70880 R15:
>>> 0000000000000000
>>> [   24.905085]  </TASK>
>>> [   24.907299] Modules linked in: radeon(E+) crct10dif_pclmul(E)
>>> crc32_pclmul(E) ghash_clmulni_intel(E) sha512_ssse3(E) 
>>> drm_ttm_helper(E)
>>> sha256_ssse3(E) ttm(E) sha1_ssse3(E) video(E) hid_generic(E)
>>> aesni_intel(E) crypto_simd(E) cryptd(E)
>>> [   24.942885] CR2: 0000000000001058
>>> [   24.946201] ---[ end trace 0000000000000000 ]---
>>> [   24.950810] RIP:
>>> 0010:radeon_atom_initialize_bios_scratch_regs+0x33/0x110 [radeon]
>>> [   24.958700] Code: 41 54 55 53 48 89 fb 48 83 c7 78 e8 e7 17 cd e7 48
>>> 8b 5b 78 4c 8d b3 58 10 00 00 4c 8d ab 08 14 00 00 4c 89 f7 e8 9d 16 cd
>>> e7 <8b> ab 58 10 00 00 4c 89 ef e8 bf 17 cd e7 48 8b 83 08 14 00 00 83
>>> [   24.977427] RSP: 0018:ffffc90001bdf748 EFLAGS: 00010282
>>> [   24.982648] RAX: 0000000000000001 RBX: 0000000000000000 RCX:
>>> ffffffffa8116556
>>> [   24.989769] RDX: fffffbfff584b7d5 RSI: 0000000000000008 RDI:
>>> ffffffffac25bea0
>>> [   24.996891] RBP: ffff8881398b8000 R08: 0000000000000001 R09:
>>> fffffbfff584b7d4
>>> [   25.004016] R10: ffffffffac25bea7 R11: 0000000000000001 R12:
>>> ffff8881398b8008
>>> [   25.011140] R13: 0000000000001408 R14: 0000000000001058 R15:
>>> ffffffffc08ffb00
>>> [   25.018265] FS:  00007f23d7627900(0000) GS:ffff88841d800000(0000)
>>> knlGS:0000000000000000
>>> [   25.026339] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> [   25.032076] CR2: 0000000000001058 CR3: 0000000104e24003 CR4:
>>> 00000000003706f0
>>> [   25.039209] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
>>> 0000000000000000
>>> [   25.046329] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
>>> 0000000000000400
>>>
>>>
>>> Building with W=1 also shows the following warnings:
>>>
>>>
>>> drivers/gpu/drm/radeon/radeon_kms.c:105: warning: Function parameter or
>>> struct member 'rdev' not described in 'radeon_driver_load_kms'
>>> drivers/gpu/drm/radeon/radeon_kms.c:105: warning: Excess function
>>> parameter 'dev' description in 'radeon_driver_load_kms'
>>> drivers/gpu/drm/radeon/radeon_device.c:1280: warning: Excess function
>>> parameter 'ddev' description in 'radeon_device_init'
>>> drivers/gpu/drm/radeon/radeon_device.c:1280: warning: Excess function
>>> parameter 'pdev' description in 'radeon_device_init'
>>>
>>>
>>> I suggest to turn this patch into a little series. First do the trival
>>> conversion from rdev->dev to rdev_to_drm() without any internal 
>>> changes.
>>> Then do the rest in a separate patch.
>>>
>>>
>>> [...]
>>>> @@ -569,7 +578,7 @@ static const struct drm_ioctl_desc 
>>>> radeon_ioctls_kms[] = {
>>>>    static const struct drm_driver kms_driver = {
>>>>        .driver_features =
>>>>            DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
>>>> -     .load = radeon_driver_load_kms,
>>>> +     // .load = radeon_driver_load_kms,
>>> Please remove this line instead of out-commenting it.
>>>
>>>>        .open = radeon_driver_open_kms,
>>>>        .postclose = radeon_driver_postclose_kms,
>>>>        .unload = radeon_driver_unload_kms,
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_drv.h 
>>>> b/drivers/gpu/drm/radeon/radeon_drv.h
>>>> index 02a65971d140..6c1eb75a951b 100644
>>> [...]
>>>> -int radeon_driver_load_kms(struct drm_device *dev, unsigned long 
>>>> flags)
>>>> +int radeon_driver_load_kms(struct radeon_device *rdev, unsigned 
>>>> long flags)
>>>>    {
>>>> -     struct pci_dev *pdev = to_pci_dev(dev->dev);
>>>> -     struct radeon_device *rdev;
>>>> +     struct pci_dev *pdev = rdev->pdev;
>>>> +     struct drm_device *dev = rdev_to_drm(rdev);
>>>>        int r, acpi_status;
>>>>
>>>> -     rdev = kzalloc(sizeof(struct radeon_device), GFP_KERNEL);
>>>> -     if (rdev == NULL) {
>>>> -             return -ENOMEM;
>>>> -     }
>>>> -     dev->dev_private = (void *)rdev;
>>> You still need to set dev->dev_private = rdev or the driver will crash.
>>> I'd assume that this is the cause for the stack trace.
>>>
>>> If you have an updated patchset, I can test again.
>>>
>>> Best regards
>>> Thomas
>>>
>>>> -
>>>>    #ifdef __alpha__
>>>>        rdev->hose = pdev->sysdata;
>>>>    #endif
>>>>
>>>>        if (pci_find_capability(pdev, PCI_CAP_ID_AGP))
>>>> -             rdev->agp = radeon_agp_head_init(dev);
>>>> +             rdev->agp = radeon_agp_head_init(rdev_to_drm(rdev));
>>>>        if (rdev->agp) {
>>>>                rdev->agp->agp_mtrr = arch_phys_wc_add(
>>>>                        rdev->agp->agp_info.aper_base,
>>>> @@ -147,7 +141,7 @@ int radeon_driver_load_kms(struct drm_device 
>>>> *dev, unsigned long flags)
>>>>         * properly initialize the GPU MC controller and permit
>>>>         * VRAM allocation
>>>>         */
>>>> -     r = radeon_device_init(rdev, dev, pdev, flags);
>>>> +     r = radeon_device_init(rdev, flags);
>>>>        if (r) {
>>>>                dev_err(dev->dev, "Fatal error during GPU init\n");
>>>>                goto out;
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_object.c 
>>>> b/drivers/gpu/drm/radeon/radeon_object.c
>>>> index a955f8a2f7fe..450ff7daa46c 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_object.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_object.c
>>>> @@ -150,7 +150,7 @@ int radeon_bo_create(struct radeon_device *rdev,
>>>>        bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);
>>>>        if (bo == NULL)
>>>>                return -ENOMEM;
>>>> -     drm_gem_private_object_init(rdev->ddev, &bo->tbo.base, size);
>>>> +     drm_gem_private_object_init(rdev_to_drm(rdev), &bo->tbo.base, 
>>>> size);
>>>>        bo->rdev = rdev;
>>>>        bo->surface_reg = -1;
>>>>        INIT_LIST_HEAD(&bo->list);
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_pm.c 
>>>> b/drivers/gpu/drm/radeon/radeon_pm.c
>>>> index 2d9d9f46f243..b4fb7e70320b 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_pm.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_pm.c
>>>> @@ -282,7 +282,7 @@ static void radeon_pm_set_clocks(struct 
>>>> radeon_device *rdev)
>>>>
>>>>        if (rdev->irq.installed) {
>>>>                i = 0;
>>>> -             drm_for_each_crtc(crtc, rdev->ddev) {
>>>> +             drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
>>>>                        if (rdev->pm.active_crtcs & (1 << i)) {
>>>>                                /* This can fail if a modeset is in 
>>>> progress */
>>>>                                if (drm_crtc_vblank_get(crtc) == 0)
>>>> @@ -299,7 +299,7 @@ static void radeon_pm_set_clocks(struct 
>>>> radeon_device *rdev)
>>>>
>>>>        if (rdev->irq.installed) {
>>>>                i = 0;
>>>> -             drm_for_each_crtc(crtc, rdev->ddev) {
>>>> +             drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
>>>>                        if (rdev->pm.req_vblank & (1 << i)) {
>>>>                                rdev->pm.req_vblank &= ~(1 << i);
>>>>                                drm_crtc_vblank_put(crtc);
>>>> @@ -671,7 +671,7 @@ static ssize_t radeon_hwmon_show_temp(struct 
>>>> device *dev,
>>>>                                      char *buf)
>>>>    {
>>>>        struct radeon_device *rdev = dev_get_drvdata(dev);
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        int temp;
>>>>
>>>>        /* Can't get temperature when the card is off */
>>>> @@ -715,7 +715,7 @@ static ssize_t radeon_hwmon_show_sclk(struct 
>>>> device *dev,
>>>>                                      struct device_attribute *attr, 
>>>> char *buf)
>>>>    {
>>>>        struct radeon_device *rdev = dev_get_drvdata(dev);
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        u32 sclk = 0;
>>>>
>>>>        /* Can't get clock frequency when the card is off */
>>>> @@ -740,7 +740,7 @@ static ssize_t radeon_hwmon_show_vddc(struct 
>>>> device *dev,
>>>>                                      struct device_attribute *attr, 
>>>> char *buf)
>>>>    {
>>>>        struct radeon_device *rdev = dev_get_drvdata(dev);
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        u16 vddc = 0;
>>>>
>>>>        /* Can't get vddc when the card is off */
>>>> @@ -1692,7 +1692,7 @@ void radeon_pm_fini(struct radeon_device *rdev)
>>>>
>>>>    static void radeon_pm_compute_clocks_old(struct radeon_device 
>>>> *rdev)
>>>>    {
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        struct drm_crtc *crtc;
>>>>        struct radeon_crtc *radeon_crtc;
>>>>
>>>> @@ -1765,7 +1765,7 @@ static void 
>>>> radeon_pm_compute_clocks_old(struct radeon_device *rdev)
>>>>
>>>>    static void radeon_pm_compute_clocks_dpm(struct radeon_device 
>>>> *rdev)
>>>>    {
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        struct drm_crtc *crtc;
>>>>        struct radeon_crtc *radeon_crtc;
>>>>        struct radeon_connector *radeon_connector;
>>>> @@ -1826,7 +1826,7 @@ static bool radeon_pm_in_vbl(struct 
>>>> radeon_device *rdev)
>>>>         */
>>>>        for (crtc = 0; (crtc < rdev->num_crtc) && in_vbl; crtc++) {
>>>>                if (rdev->pm.active_crtcs & (1 << crtc)) {
>>>> -                     vbl_status = 
>>>> radeon_get_crtc_scanoutpos(rdev->ddev,
>>>> +                     vbl_status = 
>>>> radeon_get_crtc_scanoutpos(rdev_to_drm(rdev),
>>>>                                                                crtc,
>>>> USE_REAL_VBLANKSTART,
>>>> &vpos, &hpos, NULL, NULL,
>>>> @@ -1918,7 +1918,7 @@ static void 
>>>> radeon_dynpm_idle_work_handler(struct work_struct *work)
>>>>    static int radeon_debugfs_pm_info_show(struct seq_file *m, void 
>>>> *unused)
>>>>    {
>>>>        struct radeon_device *rdev = m->private;
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>
>>>>        if  ((rdev->flags & RADEON_IS_PX) &&
>>>>             (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
>>>> @@ -1955,7 +1955,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_pm_info);
>>>>    static void radeon_debugfs_pm_init(struct radeon_device *rdev)
>>>>    {
>>>>    #if defined(CONFIG_DEBUG_FS)
>>>> -     struct dentry *root = rdev->ddev->primary->debugfs_root;
>>>> +     struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>>>>
>>>>        debugfs_create_file("radeon_pm_info", 0444, root, rdev,
>>>> &radeon_debugfs_pm_info_fops);
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_ring.c 
>>>> b/drivers/gpu/drm/radeon/radeon_ring.c
>>>> index 8d1d458286a8..581ae20c46e4 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_ring.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_ring.c
>>>> @@ -550,7 +550,7 @@ static void radeon_debugfs_ring_init(struct 
>>>> radeon_device *rdev, struct radeon_r
>>>>    {
>>>>    #if defined(CONFIG_DEBUG_FS)
>>>>        const char *ring_name = 
>>>> radeon_debugfs_ring_idx_to_name(ring->idx);
>>>> -     struct dentry *root = rdev->ddev->primary->debugfs_root;
>>>> +     struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>>>>
>>>>        if (ring_name)
>>>>                debugfs_create_file(ring_name, 0444, root, ring,
>>>> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c 
>>>> b/drivers/gpu/drm/radeon/radeon_ttm.c
>>>> index 5c65b6dfb99a..69d0c12fa419 100644
>>>> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
>>>> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
>>>> @@ -682,8 +682,8 @@ int radeon_ttm_init(struct radeon_device *rdev)
>>>>
>>>>        /* No others user of address space so set it to 0 */
>>>>        r = ttm_device_init(&rdev->mman.bdev, &radeon_bo_driver, 
>>>> rdev->dev,
>>>> - rdev->ddev->anon_inode->i_mapping,
>>>> - rdev->ddev->vma_offset_manager,
>>>> + rdev_to_drm(rdev)->anon_inode->i_mapping,
>>>> + rdev_to_drm(rdev)->vma_offset_manager,
>>>>                               rdev->need_swiotlb,
>>>> dma_addressing_limited(&rdev->pdev->dev));
>>>>        if (r) {
>>>> @@ -890,7 +890,7 @@ static const struct file_operations 
>>>> radeon_ttm_gtt_fops = {
>>>>    static void radeon_ttm_debugfs_init(struct radeon_device *rdev)
>>>>    {
>>>>    #if defined(CONFIG_DEBUG_FS)
>>>> -     struct drm_minor *minor = rdev->ddev->primary;
>>>> +     struct drm_minor *minor = rdev_to_drm(rdev)->primary;
>>>>        struct dentry *root = minor->debugfs_root;
>>>>
>>>>        debugfs_create_file("radeon_vram", 0444, root, rdev,
>>>> diff --git a/drivers/gpu/drm/radeon/rs400.c 
>>>> b/drivers/gpu/drm/radeon/rs400.c
>>>> index d4d1501e6576..d6c18fd740ec 100644
>>>> --- a/drivers/gpu/drm/radeon/rs400.c
>>>> +++ b/drivers/gpu/drm/radeon/rs400.c
>>>> @@ -379,7 +379,7 @@ DEFINE_SHOW_ATTRIBUTE(rs400_debugfs_gart_info);
>>>>    static void rs400_debugfs_pcie_gart_info_init(struct 
>>>> radeon_device *rdev)
>>>>    {
>>>>    #if defined(CONFIG_DEBUG_FS)
>>>> -     struct dentry *root = rdev->ddev->primary->debugfs_root;
>>>> +     struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>>>>
>>>>        debugfs_create_file("rs400_gart_info", 0444, root, rdev,
>>>> &rs400_debugfs_gart_info_fops);
>>>> @@ -474,7 +474,7 @@ int rs400_resume(struct radeon_device *rdev)
>>>>                        RREG32(R_0007C0_CP_STAT));
>>>>        }
>>>>        /* post */
>>>> -     radeon_combios_asic_init(rdev->ddev);
>>>> +     radeon_combios_asic_init(rdev_to_drm(rdev));
>>>>        /* Resume clock after posting */
>>>>        r300_clock_startup(rdev);
>>>>        /* Initialize surface registers */
>>>> @@ -552,7 +552,7 @@ int rs400_init(struct radeon_device *rdev)
>>>>                return -EINVAL;
>>>>
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>        /* initialize memory controller */
>>>>        rs400_mc_init(rdev);
>>>>        /* Fence driver */
>>>> diff --git a/drivers/gpu/drm/radeon/rs600.c 
>>>> b/drivers/gpu/drm/radeon/rs600.c
>>>> index 5c162778899b..88c8e91ea651 100644
>>>> --- a/drivers/gpu/drm/radeon/rs600.c
>>>> +++ b/drivers/gpu/drm/radeon/rs600.c
>>>> @@ -321,7 +321,7 @@ void rs600_pm_misc(struct radeon_device *rdev)
>>>>
>>>>    void rs600_pm_prepare(struct radeon_device *rdev)
>>>>    {
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        struct drm_crtc *crtc;
>>>>        struct radeon_crtc *radeon_crtc;
>>>>        u32 tmp;
>>>> @@ -339,7 +339,7 @@ void rs600_pm_prepare(struct radeon_device *rdev)
>>>>
>>>>    void rs600_pm_finish(struct radeon_device *rdev)
>>>>    {
>>>> -     struct drm_device *ddev = rdev->ddev;
>>>> +     struct drm_device *ddev = rdev_to_drm(rdev);
>>>>        struct drm_crtc *crtc;
>>>>        struct radeon_crtc *radeon_crtc;
>>>>        u32 tmp;
>>>> @@ -408,7 +408,7 @@ void rs600_hpd_set_polarity(struct 
>>>> radeon_device *rdev,
>>>>
>>>>    void rs600_hpd_init(struct radeon_device *rdev)
>>>>    {
>>>> -     struct drm_device *dev = rdev->ddev;
>>>> +     struct drm_device *dev = rdev_to_drm(rdev);
>>>>        struct drm_connector *connector;
>>>>        unsigned enable = 0;
>>>>
>>>> @@ -435,7 +435,7 @@ void rs600_hpd_init(struct radeon_device *rdev)
>>>>
>>>>    void rs600_hpd_fini(struct radeon_device *rdev)
>>>>    {
>>>> -     struct drm_device *dev = rdev->ddev;
>>>> +     struct drm_device *dev = rdev_to_drm(rdev);
>>>>        struct drm_connector *connector;
>>>>        unsigned disable = 0;
>>>>
>>>> @@ -797,7 +797,7 @@ int rs600_irq_process(struct radeon_device *rdev)
>>>>                /* Vertical blank interrupts */
>>>>                if 
>>>> (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
>>>>                        if (rdev->irq.crtc_vblank_int[0]) {
>>>> - drm_handle_vblank(rdev->ddev, 0);
>>>> + drm_handle_vblank(rdev_to_drm(rdev), 0);
>>>>                                rdev->pm.vblank_sync = true;
>>>> wake_up(&rdev->irq.vblank_queue);
>>>>                        }
>>>> @@ -806,7 +806,7 @@ int rs600_irq_process(struct radeon_device *rdev)
>>>>                }
>>>>                if 
>>>> (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
>>>>                        if (rdev->irq.crtc_vblank_int[1]) {
>>>> - drm_handle_vblank(rdev->ddev, 1);
>>>> + drm_handle_vblank(rdev_to_drm(rdev), 1);
>>>>                                rdev->pm.vblank_sync = true;
>>>> wake_up(&rdev->irq.vblank_queue);
>>>>                        }
>>>> @@ -1133,7 +1133,7 @@ int rs600_init(struct radeon_device *rdev)
>>>>                return -EINVAL;
>>>>
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>        /* initialize memory controller */
>>>>        rs600_mc_init(rdev);
>>>>        r100_debugfs_rbbm_init(rdev);
>>>> diff --git a/drivers/gpu/drm/radeon/rs690.c 
>>>> b/drivers/gpu/drm/radeon/rs690.c
>>>> index 14fb0819b8c1..016eb4992803 100644
>>>> --- a/drivers/gpu/drm/radeon/rs690.c
>>>> +++ b/drivers/gpu/drm/radeon/rs690.c
>>>> @@ -845,7 +845,7 @@ int rs690_init(struct radeon_device *rdev)
>>>>                return -EINVAL;
>>>>
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>        /* initialize memory controller */
>>>>        rs690_mc_init(rdev);
>>>>        rv515_debugfs(rdev);
>>>> diff --git a/drivers/gpu/drm/radeon/rv515.c 
>>>> b/drivers/gpu/drm/radeon/rv515.c
>>>> index bbc6ccabf788..1b4dfb645585 100644
>>>> --- a/drivers/gpu/drm/radeon/rv515.c
>>>> +++ b/drivers/gpu/drm/radeon/rv515.c
>>>> @@ -255,7 +255,7 @@ DEFINE_SHOW_ATTRIBUTE(rv515_debugfs_ga_info);
>>>>    void rv515_debugfs(struct radeon_device *rdev)
>>>>    {
>>>>    #if defined(CONFIG_DEBUG_FS)
>>>> -     struct dentry *root = rdev->ddev->primary->debugfs_root;
>>>> +     struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>>>>
>>>>        debugfs_create_file("rv515_pipes_info", 0444, root, rdev,
>>>> &rv515_debugfs_pipes_info_fops);
>>>> @@ -636,7 +636,7 @@ int rv515_init(struct radeon_device *rdev)
>>>>        if (radeon_boot_test_post_card(rdev) == false)
>>>>                return -EINVAL;
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>        /* initialize AGP */
>>>>        if (rdev->flags & RADEON_IS_AGP) {
>>>>                r = radeon_agp_init(rdev);
>>>> diff --git a/drivers/gpu/drm/radeon/rv770.c 
>>>> b/drivers/gpu/drm/radeon/rv770.c
>>>> index 9ce12fa3c356..7d4b0bf59109 100644
>>>> --- a/drivers/gpu/drm/radeon/rv770.c
>>>> +++ b/drivers/gpu/drm/radeon/rv770.c
>>>> @@ -1935,7 +1935,7 @@ int rv770_init(struct radeon_device *rdev)
>>>>        /* Initialize surface registers */
>>>>        radeon_surface_init(rdev);
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>        /* Fence driver */
>>>>        radeon_fence_driver_init(rdev);
>>>>        /* initialize AGP */
>>>> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
>>>> index 15759c8ca5b7..6c95575ce109 100644
>>>> --- a/drivers/gpu/drm/radeon/si.c
>>>> +++ b/drivers/gpu/drm/radeon/si.c
>>>> @@ -6277,7 +6277,7 @@ int si_irq_process(struct radeon_device *rdev)
>>>>                                event_name = "vblank";
>>>>
>>>>                                if 
>>>> (rdev->irq.crtc_vblank_int[crtc_idx]) {
>>>> - drm_handle_vblank(rdev->ddev, crtc_idx);
>>>> + drm_handle_vblank(rdev_to_drm(rdev), crtc_idx);
>>>> rdev->pm.vblank_sync = true;
>>>> wake_up(&rdev->irq.vblank_queue);
>>>>                                }
>>>> @@ -6839,7 +6839,7 @@ int si_init(struct radeon_device *rdev)
>>>>        /* Initialize surface registers */
>>>>        radeon_surface_init(rdev);
>>>>        /* Initialize clocks */
>>>> -     radeon_get_clock_info(rdev->ddev);
>>>> +     radeon_get_clock_info(rdev_to_drm(rdev));
>>>>
>>>>        /* Fence driver */
>>>>        radeon_fence_driver_init(rdev);
>>> -- 
>>> -- 
>>> Thomas Zimmermann
>>> Graphics Driver Developer
>>> SUSE Software Solutions Germany GmbH
>>> Frankenstrasse 146, 90461 Nuernberg, Germany
>>> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
>>> HRB 36809 (AG Nuernberg)
>>>
>


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ