lkml.org 
[lkml]   [2020]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 05/86] ravb: Fix bit fields checking in ravb_hwtstamp_get()
    Date
    From: Andrew Gabbasov <andrew_gabbasov@mentor.com>

    [ Upstream commit 68b9f0865b1ef545da180c57d54b82c94cb464a4 ]

    In the function ravb_hwtstamp_get() in ravb_main.c with the existing
    values for RAVB_RXTSTAMP_TYPE_V2_L2_EVENT (0x2) and RAVB_RXTSTAMP_TYPE_ALL
    (0x6)

    if (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE_V2_L2_EVENT)
    config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
    else if (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE_ALL)
    config.rx_filter = HWTSTAMP_FILTER_ALL;

    if the test on RAVB_RXTSTAMP_TYPE_ALL should be true,
    it will never be reached.

    This issue can be verified with 'hwtstamp_config' testing program
    (tools/testing/selftests/net/hwtstamp_config.c). Setting filter type
    to ALL and subsequent retrieving it gives incorrect value:

    $ hwtstamp_config eth0 OFF ALL
    flags = 0
    tx_type = OFF
    rx_filter = ALL
    $ hwtstamp_config eth0
    flags = 0
    tx_type = OFF
    rx_filter = PTP_V2_L2_EVENT

    Correct this by converting if-else's to switch.

    Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
    Reported-by: Julia Lawall <julia.lawall@inria.fr>
    Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com>
    Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
    Link: https://lore.kernel.org/r/20201026102130.29368-1-andrew_gabbasov@mentor.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/renesas/ravb_main.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/net/ethernet/renesas/ravb_main.c
    +++ b/drivers/net/ethernet/renesas/ravb_main.c
    @@ -1572,12 +1572,16 @@ static int ravb_hwtstamp_get(struct net_
    config.flags = 0;
    config.tx_type = priv->tstamp_tx_ctrl ? HWTSTAMP_TX_ON :
    HWTSTAMP_TX_OFF;
    - if (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE_V2_L2_EVENT)
    + switch (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE) {
    + case RAVB_RXTSTAMP_TYPE_V2_L2_EVENT:
    config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
    - else if (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE_ALL)
    + break;
    + case RAVB_RXTSTAMP_TYPE_ALL:
    config.rx_filter = HWTSTAMP_FILTER_ALL;
    - else
    + break;
    + default:
    config.rx_filter = HWTSTAMP_FILTER_NONE;
    + }

    return copy_to_user(req->ifr_data, &config, sizeof(config)) ?
    -EFAULT : 0;

    \
     
     \ /
      Last update: 2020-11-09 14:50    [W:4.091 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site