Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Printk improvements #300

Open
wants to merge 3 commits into
base: rust
Choose a base branch
from
Open

Printk improvements #300

wants to merge 3 commits into from

Conversation

nbdd0121
Copy link
Member

@nbdd0121 nbdd0121 commented May 26, 2021

Summary:

  • Add a LogLevel struct for log levels, which can be used with printk! for runtime level specification
  • Add printk_once support (just add once, before the macro call)
  • Add a LogTarget trait. This allows user to use pr_info!(target: (), "blah") to opt out the default prefix. In the future we can add LogTarget impl to struct device binding to support dev_printk.

@ksquirrel

This comment has been minimized.

@ksquirrel

This comment has been minimized.

@ojeda
Copy link
Member

ojeda commented May 26, 2021

rust: remove pr_cont from prelude does not depend on the other 3, so please send it independently.

@ksquirrel

This comment has been minimized.

@ksquirrel

This comment has been minimized.

@ksquirrel

This comment has been minimized.

@ksquirrel
Copy link
Member

Review of 95ace62ee07c:

  • ✔️ Commit cc9804a: Looks fine!
  • ✔️ Commit 63a53ba: Looks fine!
  • ✔️ Commit 95ace62: Looks fine!

@nbdd0121
Copy link
Member Author

nbdd0121 commented Jun 7, 2021

As discussed in the meeting on 5 June 2021, printk_once is deemed as low priority for now for upstreaming. So it's dropped from this PR. I'll open a separate PR for that later.

The rest can be seen as cleanups and would be good-to-have for upstreaming.

I have added a const __LOG_PREFIX: () = (); to prelude to fix #362.

@nbdd0121 nbdd0121 mentioned this pull request Jul 20, 2021
@nbdd0121 nbdd0121 mentioned this pull request Jul 31, 2021
Different log levels are now associated constants of a enum-like struct
`LogLevel`. A `printk!` macro is added which allows runtime
specification of log level. Type of prefix is changed from `&[u8]` to
`&CStr` so that `call_printk` function does not have to be unsafe. All
macros now accept an optional target argument, which can be used to
specify prefix.

Signed-off-by: Gary Guo <[email protected]>
@nbdd0121
Copy link
Member Author

Rebased

@nbdd0121 nbdd0121 requested a review from ojeda July 31, 2021 19:33
nbdd0121 added 2 commits July 31, 2021 20:47
Currently `LogTarget` can be used to specify the prefix of the log. It
can be either `CStr` or `()` (indicating no prefix). In the future, once
we've had the binding for `struct device`, we can simply add
`impl LogTarget for Device` and we'll have `dev_printk` for free.

Signed-off-by: Gary Guo <[email protected]>
This allows non-module crates to use printk macros without needing to
use `target: ()` or define `__LOG_PREFIX` themselves.

Signed-off-by: Gary Guo <[email protected]>
Darksonn pushed a commit to Darksonn/linux that referenced this pull request Jan 17, 2025
DC driver is using two different values to define the maximum number of
surfaces: MAX_SURFACES and MAX_SURFACE_NUM. Consolidate MAX_SURFACES as
the unique definition for surface updates across DC.

It fixes page fault faced by Cosmic users on AMD display versions that
support two overlay planes, since the introduction of cursor overlay
mode.

[Nov26 21:33] BUG: unable to handle page fault for address: 0000000051d0f08b
[  +0.000015] #PF: supervisor read access in kernel mode
[  +0.000006] #PF: error_code(0x0000) - not-present page
[  +0.000005] PGD 0 P4D 0
[  +0.000007] Oops: Oops: 0000 [Rust-for-Linux#1] PREEMPT SMP NOPTI
[  +0.000006] CPU: 4 PID: 71 Comm: kworker/u32:6 Not tainted 6.10.0+ Rust-for-Linux#300
[  +0.000006] Hardware name: Valve Jupiter/Jupiter, BIOS F7A0131 01/30/2024
[  +0.000007] Workqueue: events_unbound commit_work [drm_kms_helper]
[  +0.000040] RIP: 0010:copy_stream_update_to_stream.isra.0+0x30d/0x750 [amdgpu]
[  +0.000847] Code: 8b 10 49 89 94 24 f8 00 00 00 48 8b 50 08 49 89 94 24 00 01 00 00 8b 40 10 41 89 84 24 08 01 00 00 49 8b 45 78 48 85 c0 74 0b <0f> b6 00 41 88 84 24 90 64 00 00 49 8b 45 60 48 85 c0 74 3b 48 8b
[  +0.000010] RSP: 0018:ffffc203802f79a0 EFLAGS: 00010206
[  +0.000009] RAX: 0000000051d0f08b RBX: 0000000000000004 RCX: ffff9f964f0a8070
[  +0.000004] RDX: ffff9f9710f90e40 RSI: ffff9f96600c8000 RDI: ffff9f964f000000
[  +0.000004] RBP: ffffc203802f79f8 R08: 0000000000000000 R09: 0000000000000000
[  +0.000005] R10: 0000000000000000 R11: 0000000000000000 R12: ffff9f96600c8000
[  +0.000004] R13: ffff9f9710f90e40 R14: ffff9f964f000000 R15: ffff9f96600c8000
[  +0.000004] FS:  0000000000000000(0000) GS:ffff9f9970000000(0000) knlGS:0000000000000000
[  +0.000005] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  +0.000005] CR2: 0000000051d0f08b CR3: 00000002e6a20000 CR4: 0000000000350ef0
[  +0.000005] Call Trace:
[  +0.000011]  <TASK>
[  +0.000010]  ? __die_body.cold+0x19/0x27
[  +0.000012]  ? page_fault_oops+0x15a/0x2d0
[  +0.000014]  ? exc_page_fault+0x7e/0x180
[  +0.000009]  ? asm_exc_page_fault+0x26/0x30
[  +0.000013]  ? copy_stream_update_to_stream.isra.0+0x30d/0x750 [amdgpu]
[  +0.000739]  ? dc_commit_state_no_check+0xd6c/0xe70 [amdgpu]
[  +0.000470]  update_planes_and_stream_state+0x49b/0x4f0 [amdgpu]
[  +0.000450]  ? srso_return_thunk+0x5/0x5f
[  +0.000009]  ? commit_minimal_transition_state+0x239/0x3d0 [amdgpu]
[  +0.000446]  update_planes_and_stream_v2+0x24a/0x590 [amdgpu]
[  +0.000464]  ? srso_return_thunk+0x5/0x5f
[  +0.000009]  ? sort+0x31/0x50
[  +0.000007]  ? amdgpu_dm_atomic_commit_tail+0x159f/0x3a30 [amdgpu]
[  +0.000508]  ? srso_return_thunk+0x5/0x5f
[  +0.000009]  ? amdgpu_crtc_get_scanout_position+0x28/0x40 [amdgpu]
[  +0.000377]  ? srso_return_thunk+0x5/0x5f
[  +0.000009]  ? drm_crtc_vblank_helper_get_vblank_timestamp_internal+0x160/0x390 [drm]
[  +0.000058]  ? srso_return_thunk+0x5/0x5f
[  +0.000005]  ? dma_fence_default_wait+0x8c/0x260
[  +0.000010]  ? srso_return_thunk+0x5/0x5f
[  +0.000005]  ? wait_for_completion_timeout+0x13b/0x170
[  +0.000006]  ? srso_return_thunk+0x5/0x5f
[  +0.000005]  ? dma_fence_wait_timeout+0x108/0x140
[  +0.000010]  ? commit_tail+0x94/0x130 [drm_kms_helper]
[  +0.000024]  ? process_one_work+0x177/0x330
[  +0.000008]  ? worker_thread+0x266/0x3a0
[  +0.000006]  ? __pfx_worker_thread+0x10/0x10
[  +0.000004]  ? kthread+0xd2/0x100
[  +0.000006]  ? __pfx_kthread+0x10/0x10
[  +0.000006]  ? ret_from_fork+0x34/0x50
[  +0.000004]  ? __pfx_kthread+0x10/0x10
[  +0.000005]  ? ret_from_fork_asm+0x1a/0x30
[  +0.000011]  </TASK>

Fixes: 1b04dcc ("drm/amd/display: Introduce overlay cursor mode")
Suggested-by: Leo Li <[email protected]>
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/3693
Signed-off-by: Melissa Wen <[email protected]>
Reviewed-by: Rodrigo Siqueira <[email protected]>
Signed-off-by: Rodrigo Siqueira <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
(cherry picked from commit 1c86c81)
Cc: [email protected]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants