10 Aug, 2020

1 commit

  • To build host programs, you need to add the program names to 'hostprogs'
    to use the necessary build rule, but it is not enough to build them
    because there is no dependency.

    There are two types of host programs: built as the prerequisite of
    another (e.g. gen_crc32table in lib/Makefile), or always built when
    Kbuild visits the Makefile (e.g. genksyms in scripts/genksyms/Makefile).

    The latter is typical in Makefiles under scripts/, which contains host
    programs globally used during the kernel build. To build them, you need
    to add them to both 'hostprogs' and 'always-y'.

    This commit adds hostprogs-always-y as a shorthand.

    The same applies to user programs. net/bpfilter/Makefile builds
    bpfilter_umh on demand, hence always-y is unneeded. In contrast,
    programs under samples/ are added to both 'userprogs' and 'always-y'
    so they are always built when Kbuild visits the Makefiles.

    userprogs-always-y works as a shorthand.

    Signed-off-by: Masahiro Yamada
    Acked-by: Miguel Ojeda

    Masahiro Yamada
     

22 Jun, 2020

1 commit

  • This userspace program includes UAPI headers exported to usr/include/.
    'make headers' always works for the target architecture (i.e. the same
    architecture as the kernel), so the sample program should be built for
    the target as well. Kbuild now supports 'userprogs' for that.

    I also guarded the CONFIG option by 'depends on CC_CAN_LINK' because
    $(CC) may not provide libc.

    Signed-off-by: Masahiro Yamada

    Masahiro Yamada
     

14 Jun, 2020

1 commit


19 May, 2020

3 commits

  • Add handling for loss of notifications by having read() insert a
    loss-notification message after it has read the pipe buffer that was last
    in the ring when the loss occurred.

    Lossage can come about either by running out of notification descriptors or
    by running out of space in the pipe ring.

    Signed-off-by: David Howells

    David Howells
     
  • Allow a buffer to be marked such that read() must return the entire buffer
    in one go or return ENOBUFS. Multiple buffers can be amalgamated into a
    single read, but a short read will occur if the next "whole" buffer won't
    fit.

    This is useful for watch queue notifications to make sure we don't split a
    notification across multiple reads, especially given that we need to
    fabricate an overrun record under some circumstances - and that isn't in
    the buffers.

    Signed-off-by: David Howells

    David Howells
     
  • The sample program is run like:

    ./samples/watch_queue/watch_test

    and watches "/" for mount changes and the current session keyring for key
    changes:

    # keyctl add user a a @s
    1035096409
    # keyctl unlink 1035096409 @s

    producing:

    # ./watch_test
    read() = 16
    NOTIFY[000]: ty=000001 sy=02 i=00000110
    KEY 2ffc2e5d change=2[linked] aux=1035096409
    read() = 16
    NOTIFY[000]: ty=000001 sy=02 i=00000110
    KEY 2ffc2e5d change=3[unlinked] aux=1035096409

    Other events may be produced, such as with a failing disk:

    read() = 22
    NOTIFY[000]: ty=000003 sy=02 i=00000416
    USB 3-7.7 dev-reset e=0 r=0
    read() = 24
    NOTIFY[000]: ty=000002 sy=06 i=00000418
    BLOCK 00800050 e=6[critical medium] s=64000ef8

    This corresponds to:

    blk_update_request: critical medium error, dev sdf, sector 1677725432 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0

    in dmesg.

    Signed-off-by: David Howells

    David Howells