lkml.org 
[lkml]   [2016]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v11 3/3] printk: make printk.synchronous param rw
    On (04/08/16 12:04), Pan Xinhui wrote:
    [..]
    > > +/*
    > > + * Init async printk via late_initcall, after core/arch/device/etc.
    > > + * initialization.
    > > + */
    > > +static __init int init_printk_kthread(void)
    > > +{
    > > + printk_initcall_done = true;
    > > + return __init_printk_kthread();
    > hello,
    >
    > One confusion, Why not use a lock to protect __init_printk_kthread from parallel call? Otherwise I think there is a race.
    > But for simplicity, maybe you could write codes as below.
    >
    > + int ret = __init_printk_kthread();
    > + printk_initcall_done = true;
    > + return ret;
    >
    > In my opinion, using a lock is better.

    Hello,

    I though about this, but isn't late_initcall() happening before kernel
    starts /sbin/init? who can race with

    late_initcall() -> init_printk_kthread() -> __init_printk_kthread()?

    looking at

    static int __ref kernel_init(void *unused)
    {
    int ret;

    kernel_init_freeable();
    /* need to finish all async __init code before freeing the memory */
    async_synchronize_full();
    free_initmem();
    ..

    if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
    return 0;

    __init (and init_printk_kthread is __init) is finished and freed by the
    time kernel try_to_run_init_process. isn't it?


    sysfs knob -> __init_printk_kthread() is protected by printk_sync_lock
    mutex, obviously there can be parallel calls from user space.

    -ss

    \
     
     \ /
      Last update: 2016-04-08 07:41    [W:4.172 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site