nfp: avoid using getnstimeofday64()
authorArnd Bergmann <arnd@arndb.de>
Wed, 11 Jul 2018 12:29:53 +0000 (14:29 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Jul 2018 21:55:39 +0000 (14:55 -0700)
getnstimeofday64 is deprecated in favor of the ktime_get() family of
functions. The direct replacement would be ktime_get_real_ts64(),
but I'm picking the basic ktime_get() instead:

- using a ktime_t simplifies the code compared to timespec64
- using monotonic time instead of real time avoids issues caused
  by a concurrent settimeofday() or during a leap second adjustment.

Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/flower/main.h
drivers/net/ethernet/netronome/nfp/flower/metadata.c

index bbe5764d26cb777f4292b82f4bbc78464706d9b7..ef2114d133872696cdb9ebbdeb44a97269079e57 100644 (file)
@@ -73,7 +73,7 @@ struct nfp_app;
 
 struct nfp_fl_mask_id {
        struct circ_buf mask_id_free_list;
-       struct timespec64 *last_used;
+       ktime_t *last_used;
        u8 init_unallocated;
 };
 
index 93fb809f50d1a7b0b6577c6a76ac0610e6797735..c098730544b76dae8ea6cab5ef5712cc40855c3e 100644 (file)
@@ -158,7 +158,6 @@ static int nfp_release_mask_id(struct nfp_app *app, u8 mask_id)
 {
        struct nfp_flower_priv *priv = app->priv;
        struct circ_buf *ring;
-       struct timespec64 now;
 
        ring = &priv->mask_ids.mask_id_free_list;
        /* Checking if buffer is full. */
@@ -169,8 +168,7 @@ static int nfp_release_mask_id(struct nfp_app *app, u8 mask_id)
        ring->head = (ring->head + NFP_FLOWER_MASK_ELEMENT_RS) %
                     (NFP_FLOWER_MASK_ENTRY_RS * NFP_FLOWER_MASK_ELEMENT_RS);
 
-       getnstimeofday64(&now);
-       priv->mask_ids.last_used[mask_id] = now;
+       priv->mask_ids.last_used[mask_id] = ktime_get();
 
        return 0;
 }
@@ -178,7 +176,7 @@ static int nfp_release_mask_id(struct nfp_app *app, u8 mask_id)
 static int nfp_mask_alloc(struct nfp_app *app, u8 *mask_id)
 {
        struct nfp_flower_priv *priv = app->priv;
-       struct timespec64 delta, now;
+       ktime_t reuse_timeout;
        struct circ_buf *ring;
        u8 temp_id, freed_id;
 
@@ -198,10 +196,10 @@ static int nfp_mask_alloc(struct nfp_app *app, u8 *mask_id)
        memcpy(&temp_id, &ring->buf[ring->tail], NFP_FLOWER_MASK_ELEMENT_RS);
        *mask_id = temp_id;
 
-       getnstimeofday64(&now);
-       delta = timespec64_sub(now, priv->mask_ids.last_used[*mask_id]);
+       reuse_timeout = ktime_add_ns(priv->mask_ids.last_used[*mask_id],
+                                    NFP_FL_MASK_REUSE_TIME_NS);
 
-       if (timespec64_to_ns(&delta) < NFP_FL_MASK_REUSE_TIME_NS)
+       if (ktime_before(ktime_get(), reuse_timeout))
                goto err_not_found;
 
        memcpy(&ring->buf[ring->tail], &freed_id, NFP_FLOWER_MASK_ELEMENT_RS);