lkml.org 
[lkml]   [2022]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH V2] PCI/DOE: Detect on stack work items automatically
    [+cc Thomas Gleixner, author of dc186ad741c1]

    On Fri, Nov 18, 2022 at 09:20:38AM +0000, David Laight wrote:
    > > From: ira.weiny@intel.com
    > > Sent: 18 November 2022 00:05
    > >
    > > Work item initialization needs to be done with either
    > > INIT_WORK_ONSTACK() or INIT_WORK() depending on how the work item is
    > > allocated.
    > >
    > > The callers of pci_doe_submit_task() allocate struct pci_doe_task on the
    > > stack and pci_doe_submit_task() incorrectly used INIT_WORK().
    > >
    > > Jonathan suggested creating doe task allocation macros such as
    > > DECLARE_CDAT_DOE_TASK_ONSTACK().[1] The issue with this is the work
    > > function is not known to the callers and must be initialized correctly.
    > >
    > > A follow up suggestion was to have an internal 'pci_doe_work' item
    > > allocated by pci_doe_submit_task().[2] This requires an allocation which
    > > could restrict the context where tasks are used.
    > >
    > > Another idea was to have an intermediate step to initialize the task
    > > struct with a new call.[3] This added a lot of complexity.
    > >
    > > Lukas pointed out that object_is_on_stack() is available to detect this
    > > automatically.
    > >
    > > Use object_is_on_stack() to determine the correct init work function to
    > > call.
    >
    > This is all a bit strange.
    > The 'onstack' flag is needed for the diagnostic check:
    > is_on_stack = object_is_on_stack(addr);
    > if (is_on_stack == onstack)
    > return;
    > pr_warn(...);
    > WARN_ON(1);
    >
    > So setting the flag to the location of the buffer just subverts the check.
    > It that is sane there ought to be a proper way to do it.

    If object_is_on_stack() is sufficient to check whether a struct
    is on the stack or not, why doesn't __init_work() use it to
    auto-detect whether to call debug_object_init_on_stack() or
    debug_object_init()?

    Forcing developers to use a specific initializer for something
    that can be auto-detected is akin to treating them like kids
    and telling them "You didn't say the magic word."

    What's the point?

    Thanks,

    Lukas

    \
     
     \ /
      Last update: 2022-11-22 18:14    [W:3.284 / U:0.828 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site