/* Solely packet offload callbacks */
        void    (*xdo_dev_state_update_curlft) (struct xfrm_state *x);
-       int     (*xdo_dev_policy_add) (struct xfrm_policy *x);
+       int     (*xdo_dev_policy_add) (struct xfrm_policy *x, struct netlink_ext_ack *extack);
        void    (*xdo_dev_policy_delete) (struct xfrm_policy *x);
        void    (*xdo_dev_policy_free) (struct xfrm_policy *x);
   };
 
        attrs->reqid = x->xfrm_vec[0].reqid;
 }
 
-static int mlx5e_xfrm_add_policy(struct xfrm_policy *x)
+static int mlx5e_xfrm_add_policy(struct xfrm_policy *x,
+                                struct netlink_ext_ack *extack)
 {
        struct net_device *netdev = x->xdo.real_dev;
        struct mlx5e_ipsec_pol_entry *pol_entry;
 
                                       struct xfrm_state *x);
        void    (*xdo_dev_state_advance_esn) (struct xfrm_state *x);
        void    (*xdo_dev_state_update_curlft) (struct xfrm_state *x);
-       int     (*xdo_dev_policy_add) (struct xfrm_policy *x);
+       int     (*xdo_dev_policy_add) (struct xfrm_policy *x, struct netlink_ext_ack *extack);
        void    (*xdo_dev_policy_delete) (struct xfrm_policy *x);
        void    (*xdo_dev_policy_free) (struct xfrm_policy *x);
 };
 
                return -EINVAL;
        }
 
-       err = dev->xfrmdev_ops->xdo_dev_policy_add(xp);
+       err = dev->xfrmdev_ops->xdo_dev_policy_add(xp, extack);
        if (err) {
                xdo->dev = NULL;
                xdo->real_dev = NULL;
                xdo->type = XFRM_DEV_OFFLOAD_UNSPECIFIED;
                xdo->dir = 0;
                netdev_put(dev, &xdo->dev_tracker);
-               NL_SET_ERR_MSG(extack, "Device failed to offload this policy");
                return err;
        }