Skip to content
Snippets Groups Projects
  • Nadav Har'El's avatar
    eb48b150
    sched: Overhaul sched::thread::attr construction · eb48b150
    Nadav Har'El authored
    
    We use sched::thread::attr to pass parameters to sched::thread creation,
    i.e., create a thread with non-default stack parameters, pinned to a
    particular CPU, or a detached thread.
    
    Previously we had constructors taking many combinations of stack size
    (integer), pinned cpu (cpu*) and detached (boolean), and doing "the
    right thing". However, this makes the code hard to read (what does
    attr(4096) specify?) and the constructors hard to expand with new
    parameters.
    
    Replace the attr() constructors with the so-called "named parameter"
    idiom: attr now only has a null constructor attr(), and one modifies
    it with calls to pin(cpu*), detach(), or stack(size).
    
    For example,
        attr()                                  // default attributes
        attr().pin(sched::cpus[0])              // pin to cpu 0
        attr().stack(4096).pin(sched::cpus[0])  // pin and non-default stack
        and so on.
    
    Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
    Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
    eb48b150
    History
    sched: Overhaul sched::thread::attr construction
    Nadav Har'El authored
    
    We use sched::thread::attr to pass parameters to sched::thread creation,
    i.e., create a thread with non-default stack parameters, pinned to a
    particular CPU, or a detached thread.
    
    Previously we had constructors taking many combinations of stack size
    (integer), pinned cpu (cpu*) and detached (boolean), and doing "the
    right thing". However, this makes the code hard to read (what does
    attr(4096) specify?) and the constructors hard to expand with new
    parameters.
    
    Replace the attr() constructors with the so-called "named parameter"
    idiom: attr now only has a null constructor attr(), and one modifies
    it with calls to pin(cpu*), detach(), or stack(size).
    
    For example,
        attr()                                  // default attributes
        attr().pin(sched::cpus[0])              // pin to cpu 0
        attr().stack(4096).pin(sched::cpus[0])  // pin and non-default stack
        and so on.
    
    Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
    Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>