lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0777/1039] habanalabs: change wait for interrupt timeout to 64 bit
    Date
    From: Dani Liberman <dliberman@habana.ai>

    [ Upstream commit 48f31169830f589e4c7ac475ccc7414951ded3f0 ]

    In order to increase maximum wait-for-interrupt timeout, change it
    to 64 bit variable. This wait is used only by newer ASICs, so no
    problem in changing this interface at this time.

    Signed-off-by: Dani Liberman <dliberman@habana.ai>
    Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
    Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../habanalabs/common/command_submission.c | 22 ++++++++++++++-----
    include/uapi/misc/habanalabs.h | 18 +++++++++------
    2 files changed, 28 insertions(+), 12 deletions(-)

    diff --git a/drivers/misc/habanalabs/common/command_submission.c b/drivers/misc/habanalabs/common/command_submission.c
    index 4c8000fd246cd..9451e4bae05df 100644
    --- a/drivers/misc/habanalabs/common/command_submission.c
    +++ b/drivers/misc/habanalabs/common/command_submission.c
    @@ -2765,8 +2765,23 @@ static int hl_cs_wait_ioctl(struct hl_fpriv *hpriv, void *data)
    return 0;
    }

    +static inline unsigned long hl_usecs64_to_jiffies(const u64 usecs)
    +{
    + if (usecs <= U32_MAX)
    + return usecs_to_jiffies(usecs);
    +
    + /*
    + * If the value in nanoseconds is larger than 64 bit, use the largest
    + * 64 bit value.
    + */
    + if (usecs >= ((u64)(U64_MAX / NSEC_PER_USEC)))
    + return nsecs_to_jiffies(U64_MAX);
    +
    + return nsecs_to_jiffies(usecs * NSEC_PER_USEC);
    +}
    +
    static int _hl_interrupt_wait_ioctl(struct hl_device *hdev, struct hl_ctx *ctx,
    - u32 timeout_us, u64 user_address,
    + u64 timeout_us, u64 user_address,
    u64 target_value, u16 interrupt_offset,
    enum hl_cs_wait_status *status,
    u64 *timestamp)
    @@ -2778,10 +2793,7 @@ static int _hl_interrupt_wait_ioctl(struct hl_device *hdev, struct hl_ctx *ctx,
    long completion_rc;
    int rc = 0;

    - if (timeout_us == U32_MAX)
    - timeout = timeout_us;
    - else
    - timeout = usecs_to_jiffies(timeout_us);
    + timeout = hl_usecs64_to_jiffies(timeout_us);

    hl_ctx_get(hdev, ctx);

    diff --git a/include/uapi/misc/habanalabs.h b/include/uapi/misc/habanalabs.h
    index 00b3095904995..c5760acebdd1d 100644
    --- a/include/uapi/misc/habanalabs.h
    +++ b/include/uapi/misc/habanalabs.h
    @@ -911,14 +911,18 @@ struct hl_wait_cs_in {
    */
    __u32 flags;

    - /* Multi CS API info- valid entries in multi-CS array */
    - __u8 seq_arr_len;
    - __u8 pad[3];
    + union {
    + struct {
    + /* Multi CS API info- valid entries in multi-CS array */
    + __u8 seq_arr_len;
    + __u8 pad[7];
    + };

    - /* Absolute timeout to wait for an interrupt in microseconds.
    - * Relevant only when HL_WAIT_CS_FLAGS_INTERRUPT is set
    - */
    - __u32 interrupt_timeout_us;
    + /* Absolute timeout to wait for an interrupt in microseconds.
    + * Relevant only when HL_WAIT_CS_FLAGS_INTERRUPT is set
    + */
    + __u64 interrupt_timeout_us;
    + };
    };

    #define HL_WAIT_CS_STATUS_COMPLETED 0
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-09-17 16:14    [W:3.740 / U:0.192 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site