printk 会引起调用 schedule 吗?

发布于 2022-10-15 10:20:33 字数 339 浏览 47 评论 0

小弟今天看 LDD3 的第 548 页,有一段

...这包含任何可能调用 schedule 的函数,比如常见的 copy_to_user/kmalloc/printk...

以前看到很多讨论都是说 printk 可以用在中断上下文的,刚才也去看了一下代码,printk 在进入 vprintk 也关了中断

preempt_disable();
/* This stops the holder of console_sem just where we want him */
raw_local_irq_save(flags);

是不是书说错了?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沦落红尘 2022-10-22 10:20:33

还一个疑问,为什么进入 printk 要延时?

  1. boot_delay_msec();
  2. printk_delay();
围归者 2022-10-22 10:20:33

应该是书上错了吧。

/**
* printk - print a kernel message
* @fmt: format string
*
* This is printk(). It can be called from any context. We want it to work.
* Be aware of the fact that if oops_in_progress is not set, we might try to
* wake klogd up which could deadlock on runqueue lock if printk() is called
* from scheduler code.
*
* We try to grab the console_sem. If we succeed, it's easy - we log the output and
* call the console drivers. If we fail to get the semaphore we place the output
* into the log buffer and return. The current holder of the console_sem will
* notice the new output in release_console_sem() and will send it to the
* consoles before releasing the semaphore.
*
* One effect of this deferred printing is that code which calls printk() and
* then changes console_loglevel may break. This is because console_loglevel
* is inspected when the actual printing occurs.
*
* See also:
* printf(3)
*/
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文