link_update
op->link_update(cookie, &if_link);
.link_update = qede_link_update,
int (*link_update)(struct net_device *, struct fixed_phy_status *);
if (fp->link_update)
fp->link_update(fp->phydev->attached_dev, &fp->status);
int (*link_update)(struct net_device *,
fp->link_update = link_update;
struct delayed_work link_update;
container_of(work, struct qedf_ctx, link_update.work);
INIT_DELAYED_WORK(&qedf->link_update, qedf_handle_link_update);
cancel_delayed_work_sync(&qedf->link_update);
cancel_delayed_work(&qedf->link_update);
&qedf->link_update, 0);
queue_delayed_work(qedf->link_update_wq, &qedf->link_update,
&qedf->link_update, 0);
.link_update = qedf_link_update,
queue_delayed_work(qedf->link_update_wq, &qedf->link_update,
flush_delayed_work(&qedf->link_update);
queue_delayed_work(qedf->link_update_wq, &qedf->link_update,
.link_update = qedi_link_update,
int (*link_update)(struct net_device *,
void (*link_update)(void *dev, struct qed_link_output *link);
} link_update;
new_map = bpf_map_get(attr->link_update.new_map_fd);
if (attr->link_update.flags & BPF_F_REPLACE) {
old_map = bpf_map_get(attr->link_update.old_map_fd);
} else if (attr->link_update.old_map_fd) {
#define BPF_LINK_UPDATE_LAST_FIELD link_update.old_prog_fd
flags = attr->link_update.flags;
link = bpf_link_get_from_fd(attr->link_update.link_fd);
new_prog = bpf_prog_get(attr->link_update.new_prog_fd);
old_prog = bpf_prog_get(attr->link_update.old_prog_fd);
} else if (attr->link_update.old_prog_fd) {
err = link_update(&attr);
} link_update;
const size_t attr_sz = offsetofend(union bpf_attr, link_update);
attr.link_update.link_fd = link_fd;
attr.link_update.new_prog_fd = new_prog_fd;
attr.link_update.flags = OPTS_GET(opts, flags, 0);
attr.link_update.old_prog_fd = OPTS_GET(opts, old_prog_fd, 0);
attr.link_update.old_map_fd = OPTS_GET(opts, old_map_fd, 0);