Date: Sat, 23 Apr 2016 12:15:02 -0700 From: "David P. Discher" <dpd@dpdtech.com> To: Hans Petter Selasky <hps@selasky.org> Cc: freebsd-infiniband@freebsd.org Subject: Re: Request updated/unified patch for OFED v3.2 update Message-ID: <5A0F033C-32E0-4F44-8835-2C079581EE32@dpdtech.com> In-Reply-To: <571BC0A6.9070100@selasky.org> References: <AD97190D-7A99-4007-B0F9-6684D39326AC@dpdtech.com> <571B31B6.4070206@selasky.org> <571BC0A6.9070100@selasky.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Apple-Mail=_11D7EE31-E231-4C64-801D-5222CD654299 Content-Type: multipart/mixed; boundary="Apple-Mail=_81524E70-C381-42F8-AEB2-30266F029757" --Apple-Mail=_81524E70-C381-42F8-AEB2-30266F029757 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Thanks Hans ! - Just one issue =E2=80=A6 I was going to attempt to = resolve myself, but the rej is just too large. Attached: sys/ofed/drivers/infiniband/hw/mlx4/main.c.rej --Apple-Mail=_81524E70-C381-42F8-AEB2-30266F029757 Content-Disposition: attachment; filename=main.c.rej Content-Type: application/octet-stream; name="main.c.rej" Content-Transfer-Encoding: 7bit @@ -1531,420 +2144,296 @@ return sprintf(buf, "%x\n", dev->dev->rev_id); } -static ssize_t show_board(struct device *device, struct device_attribute *attr, - char *buf) -{ - struct mlx4_ib_dev *dev = - container_of(device, struct mlx4_ib_dev, ib_dev.dev); - return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN, - dev->dev->board_id); -} - -static ssize_t show_vsd(struct device *device, struct device_attribute *attr, - char *buf) -{ - struct mlx4_ib_dev *dev = - container_of(device, struct mlx4_ib_dev, ib_dev.dev); - ssize_t len = MLX4_VSD_LEN; - - if (dev->dev->vsd_vendor_id == PCI_VENDOR_ID_MELLANOX) - len = sprintf(buf, "%.*s\n", MLX4_VSD_LEN, dev->dev->vsd); - else - memcpy(buf, dev->dev->vsd, MLX4_VSD_LEN); - - return len; -} - -static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); -static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); -static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); -static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); -static DEVICE_ATTR(vsd, S_IRUGO, show_vsd, NULL); - -static struct device_attribute *mlx4_class_attributes[] = { - &dev_attr_hw_rev, - &dev_attr_fw_ver, - &dev_attr_hca_type, - &dev_attr_board_id, - &dev_attr_vsd -}; - -static void mlx4_addrconf_ifid_eui48(u8 *eui, u16 vlan_id, struct net_device *dev, u8 port) -{ - memcpy(eui, IF_LLADDR(dev), 3); - memcpy(eui + 5, IF_LLADDR(dev) + 3, 3); - if (vlan_id < 0x1000) { - eui[3] = vlan_id >> 8; - eui[4] = vlan_id & 0xff; - } else { - eui[3] = 0xff; - eui[4] = 0xfe; - } - eui[0] ^= 2; -} - -static void update_gids_task(struct work_struct *work) -{ - struct update_gid_work *gw = container_of(work, struct update_gid_work, work); - struct mlx4_cmd_mailbox *mailbox; - union ib_gid *gids; - int err; - struct mlx4_dev *dev = gw->dev->dev; - - - mailbox = mlx4_alloc_cmd_mailbox(dev); - if (IS_ERR(mailbox)) { - pr_warn("update gid table failed %ld\n", PTR_ERR(mailbox)); - goto free; - } - - gids = mailbox->buf; - memcpy(gids, gw->gids, sizeof gw->gids); - - if (mlx4_ib_port_link_layer(&gw->dev->ib_dev, gw->port) == - IB_LINK_LAYER_ETHERNET) { - err = mlx4_cmd(dev, mailbox->dma, - MLX4_SET_PORT_GID_TABLE << 8 | gw->port, - 1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B, - MLX4_CMD_WRAPPED); - - if (err) - pr_warn("set port command failed\n"); - else - mlx4_ib_dispatch_event(gw->dev, gw->port, - IB_EVENT_GID_CHANGE); - } - - mlx4_free_cmd_mailbox(dev, mailbox); -free: - kfree(gw); -} - -static void reset_gids_task(struct work_struct *work) +static ssize_t show_board(struct device *device, struct device_attribute *attr, + char *buf) { - struct update_gid_work *gw = - container_of(work, struct update_gid_work, work); - struct mlx4_cmd_mailbox *mailbox; - union ib_gid *gids; - int err; - struct mlx4_dev *dev = gw->dev->dev; - - mailbox = mlx4_alloc_cmd_mailbox(dev); - if (IS_ERR(mailbox)) { - pr_warn("reset gid table failed\n"); - goto free; - } - - gids = mailbox->buf; - memcpy(gids, gw->gids, sizeof(gw->gids)); - - if (mlx4_ib_port_link_layer(&gw->dev->ib_dev, 1) == - IB_LINK_LAYER_ETHERNET && - dev->caps.num_ports > 0) { - err = mlx4_cmd(dev, mailbox->dma, - MLX4_SET_PORT_GID_TABLE << 8 | 1, - 1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B, - MLX4_CMD_WRAPPED); - if (err) - pr_warn("set port 1 command failed\n"); - } + struct mlx4_ib_dev *dev = + container_of(device, struct mlx4_ib_dev, ib_dev.dev); + return sprintf(buf, "%.*s\n", MLX4_BOARD_ID_LEN, + dev->dev->board_id); +} - if (mlx4_ib_port_link_layer(&gw->dev->ib_dev, 2) == - IB_LINK_LAYER_ETHERNET && - dev->caps.num_ports > 1) { - err = mlx4_cmd(dev, mailbox->dma, - MLX4_SET_PORT_GID_TABLE << 8 | 2, - 1, MLX4_CMD_SET_PORT, MLX4_CMD_TIME_CLASS_B, - MLX4_CMD_WRAPPED); - if (err) - pr_warn("set port 2 command failed\n"); - } +static DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); +static DEVICE_ATTR(fw_ver, S_IRUGO, show_fw_ver, NULL); +static DEVICE_ATTR(hca_type, S_IRUGO, show_hca, NULL); +static DEVICE_ATTR(board_id, S_IRUGO, show_board, NULL); - mlx4_free_cmd_mailbox(dev, mailbox); -free: - kfree(gw); -} +static struct device_attribute *mlx4_class_attributes[] = { + &dev_attr_hw_rev, + &dev_attr_fw_ver, + &dev_attr_hca_type, + &dev_attr_board_id +}; -static int update_gid_table(struct mlx4_ib_dev *dev, int port, - union ib_gid *gid, int clear, int default_gid) +#define MLX4_IB_INVALID_MAC ((u64)-1) +static void mlx4_ib_update_qps(struct mlx4_ib_dev *ibdev, + struct net_device *dev, + int port) { - struct update_gid_work *work; - int i; - int need_update = 0; - int free = -1; - int found = -1; - int max_gids; - int start_index = !default_gid; - - max_gids = dev->dev->caps.gid_table_len[port]; - for (i = start_index; i < max_gids; ++i) { - if (!memcmp(&dev->iboe.gid_table[port - 1][i], gid, - sizeof(*gid))) - found = i; - - if (clear) { - if (found >= 0) { - need_update = 1; - dev->iboe.gid_table[port - 1][found] = zgid; - break; - } - } else { - if (found >= 0) - break; + u64 new_smac = 0; + u64 release_mac = MLX4_IB_INVALID_MAC; + struct mlx4_ib_qp *qp; - if (free < 0 && - !memcmp(&dev->iboe.gid_table[port - 1][i], - &zgid, sizeof(*gid))) - free = i; - } - } - - if (found == -1 && !clear && free < 0) { - pr_err("GID table of port %d is full. Can't add "GID_PRINT_FMT"\n", - port, GID_PRINT_ARGS(gid)); - return -ENOMEM; - } - if (found == -1 && clear) { - pr_err(GID_PRINT_FMT" is not in GID table of port %d\n", GID_PRINT_ARGS(gid), port); - return -EINVAL; - } - if (found == -1 && !clear && free >= 0) { - dev->iboe.gid_table[port - 1][free] = *gid; - need_update = 1; - } + new_smac = mlx4_mac_to_u64(IF_LLADDR(dev)); - if (!need_update) - return 0; + atomic64_set(&ibdev->iboe.mac[port - 1], new_smac); - work = kzalloc(sizeof *work, GFP_ATOMIC); - if (!work) - return -ENOMEM; + /* no need for update QP1 and mac registration in non-SRIOV */ + if (!mlx4_is_mfunc(ibdev->dev)) + return; - memcpy(work->gids, dev->iboe.gid_table[port - 1], sizeof(work->gids)); - INIT_WORK(&work->work, update_gids_task); - work->port = port; - work->dev = dev; - queue_work(wq, &work->work); + mutex_lock(&ibdev->qp1_proxy_lock[port - 1]); + qp = ibdev->qp1_proxy[port - 1]; + if (qp) { + int new_smac_index; + u64 old_smac; + struct mlx4_update_qp_params update_params; - return 0; -} + mutex_lock(&qp->mutex); + old_smac = qp->pri.smac; + if (new_smac == old_smac) + goto unlock; -static int reset_gid_table(struct mlx4_ib_dev *dev) -{ - struct update_gid_work *work; + new_smac_index = mlx4_register_mac(ibdev->dev, port, new_smac); + if (new_smac_index < 0) + goto unlock; - work = kzalloc(sizeof(*work), GFP_ATOMIC); - if (!work) - return -ENOMEM; + update_params.smac_index = new_smac_index; + if (mlx4_update_qp(ibdev->dev, qp->mqp.qpn, MLX4_UPDATE_QP_SMAC, + &update_params)) { + release_mac = new_smac; + goto unlock; + } + /* if old port was zero, no mac was yet registered for this QP */ + if (qp->pri.smac_port) + release_mac = old_smac; + qp->pri.smac = new_smac; + qp->pri.smac_port = port; + qp->pri.smac_index = new_smac_index; + } - memset(dev->iboe.gid_table, 0, sizeof(dev->iboe.gid_table)); - memset(work->gids, 0, sizeof(work->gids)); - INIT_WORK(&work->work, reset_gids_task); - work->dev = dev; - queue_work(wq, &work->work); - return 0; +unlock: + if (release_mac != MLX4_IB_INVALID_MAC) + mlx4_unregister_mac(ibdev->dev, port, release_mac); + if (qp) + mutex_unlock(&qp->mutex); + mutex_unlock(&ibdev->qp1_proxy_lock[port - 1]); } -/* XXX BOND Related - stub (no support for these flags in FBSD)*/ -static inline int netif_is_bond_master(struct net_device *dev) +static struct net_device *mlx4_ib_get_netdev(struct ib_device *device, u8 port_num) { -#if 0 - return (dev->flags & IFF_MASTER) && (dev->priv_flags & IFF_BONDING); -#endif - return 0; + struct mlx4_ib_dev *ibdev = to_mdev(device); + return mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port_num); } -static void mlx4_make_default_gid(struct net_device *dev, union ib_gid *gid, u8 port) +static inline enum mlx4_roce_gid_type ib_gid_type_to_mlx4_gid_type(enum ib_gid_type gid_type) { - gid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL); - mlx4_addrconf_ifid_eui48(&gid->raw[8], 0xffff, dev, port); + switch (gid_type) { + case IB_GID_TYPE_IB: + return MLX4_ROCE_GID_TYPE_V1; + case IB_GID_TYPE_ROCE_V1_5: + return MLX4_ROCE_GID_TYPE_V1_5; + case IB_GID_TYPE_ROCE_V2: + return MLX4_ROCE_GID_TYPE_V2; + default: + return (enum mlx4_roce_gid_type)IB_GID_TYPE_SIZE; + } } -static u8 mlx4_ib_get_dev_port(struct net_device *dev, struct mlx4_ib_dev *ibdev) +static int mlx4_ib_modify_gid(struct ib_device *device, + u8 port_num, unsigned int index, + const union ib_gid *gid, + const struct ib_gid_attr *attr, + void **context) { - u8 port = 0; - struct mlx4_ib_iboe *iboe; - struct net_device *real_dev = rdma_vlan_dev_real_dev(dev) ? - rdma_vlan_dev_real_dev(dev) : dev; + struct mlx4_ib_dev *ibdev = to_mdev(device); + struct mlx4_ib_iboe *iboe = &ibdev->iboe; + struct mlx4_port_gid_table *port_gid_table; + int findex = -1, found = -1; + int ret = 0; + int clear = !memcmp(&zgid, gid, sizeof(*gid)); + int hw_update = 0; + int i; + struct mlx4_roce_addr_table *addr_table; - iboe = &ibdev->iboe; + if (ib_cache_use_roce_gid_cache(device, port_num)) + return -EINVAL; - for (port = 1; port <= MLX4_MAX_PORTS; ++port) - if ((netif_is_bond_master(real_dev) && (real_dev == iboe->masters[port - 1])) || - (!netif_is_bond_master(real_dev) && (real_dev == iboe->netdevs[port - 1]))) - break; + if (port_num > MLX4_MAX_PORTS) + return -EINVAL; - return port > MLX4_MAX_PORTS ? 0 : port; -} + if (!context) + return -EINVAL; -static void mlx4_ib_get_dev_addr(struct net_device *dev, struct mlx4_ib_dev *ibdev, u8 port) -{ - struct ifaddr *ifa; -#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) - struct inet6_dev *in6_dev; - union ib_gid *pgid; - struct inet6_ifaddr *ifp; -#endif - union ib_gid gid; + write_lock(&iboe->iboe_lock); + port_gid_table = &iboe->gid_table[port_num - 1]; + if (clear) { + struct gid_cache_context *ctx = *context; - if ((port == 0) || (port > MLX4_MAX_PORTS)) - return; + if (ctx) { + ctx->refcount--; + if (!ctx->refcount) { + unsigned int index = ctx->real_index; - /* IPv4 gids */ - TAILQ_FOREACH(ifa, &dev->if_addrhead, ifa_link) { - if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET){ - ipv6_addr_set_v4mapped( - ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr.s_addr, - (struct in6_addr *)&gid); - update_gid_table(ibdev, port, &gid, 0, 0); - } - - } -#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) - /* IPv6 gids */ - in6_dev = in6_dev_get(dev); - if (in6_dev) { - read_lock_bh(&in6_dev->lock); - list_for_each_entry(ifp, &in6_dev->addr_list, if_list) { - pgid = (union ib_gid *)&ifp->addr; - update_gid_table(ibdev, port, pgid, 0, 0); + memcpy(&port_gid_table->gids[index].gid, &zgid, sizeof(*gid)); + kfree(port_gid_table->gids[index].ctx); + port_gid_table->gids[index].ctx = NULL; + hw_update = 1; } - read_unlock_bh(&in6_dev->lock); - in6_dev_put(in6_dev); } -#endif + } else { + for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i) { + if (!memcmp(&port_gid_table->gids[i].gid, gid, sizeof(*gid))) { + found = (port_gid_table->gids[i].gid_type == attr->gid_type) ? i : -1; + if (found >= 0) + break; + } + if (findex < 0 && !memcmp(&port_gid_table->gids[i].gid, &zgid, sizeof(*gid))) + findex = i; /* HW has space */ + } + + if (found < 0) { + if (findex < 0) { + ret = -ENOSPC; + } else { + port_gid_table->gids[findex].ctx = kmalloc(sizeof(*port_gid_table->gids[findex].ctx), GFP_ATOMIC); + if (!port_gid_table->gids[findex].ctx) { + ret = -ENOMEM; + } else { + *context = port_gid_table->gids[findex].ctx; + memcpy(&port_gid_table->gids[findex].gid, gid, sizeof(*gid)); + port_gid_table->gids[findex].gid_type = attr->gid_type; + port_gid_table->gids[findex].ctx->real_index = findex; + port_gid_table->gids[findex].ctx->refcount = 1; + hw_update = 1; + } + } + } else { + struct gid_cache_context *ctx = port_gid_table->gids[found].ctx; + *context = ctx; + ctx->refcount++; + } + } + if (!ret && hw_update) { + addr_table = kmalloc(sizeof(*addr_table), GFP_ATOMIC); + if (!addr_table) { + ret = -ENOMEM; + } else { + for (i = 0; i < MLX4_MAX_PORT_GIDS; i++) { + memcpy(addr_table->addr[i].gid, + &port_gid_table->gids[i].gid, + sizeof(union ib_gid)); + addr_table->addr[i].type = ib_gid_type_to_mlx4_gid_type( + port_gid_table->gids[i].gid_type); + } + } + } + write_unlock(&iboe->iboe_lock); + + if (!ret && hw_update) { + ret = mlx4_update_roce_addr_table(ibdev->dev, port_num, addr_table, MLX4_CMD_WRAPPED); + kfree(addr_table); + } + + return ret; } -static void mlx4_set_default_gid(struct mlx4_ib_dev *ibdev, - struct net_device *dev, u8 port) +int mlx4_ib_gid_index_to_real_index(struct mlx4_ib_dev *ibdev, + u8 port_num, int index) { + struct mlx4_ib_iboe *iboe = &ibdev->iboe; + struct gid_cache_context *ctx = NULL; union ib_gid gid; - mlx4_make_default_gid(dev, &gid, port); - update_gid_table(ibdev, port, &gid, 0, 1); -} + struct mlx4_port_gid_table *port_gid_table; + int real_index = -EINVAL; + int i; + int ret; + struct ib_gid_attr attr; -static int mlx4_ib_init_gid_table(struct mlx4_ib_dev *ibdev) -{ - struct net_device *dev; + if (port_num > MLX4_MAX_PORTS) + return -EINVAL; - if (reset_gid_table(ibdev)) - return -1; + if (ib_cache_use_roce_gid_cache(&ibdev->ib_dev, port_num)) + return index; - IFNET_RLOCK_NOSLEEP(); - TAILQ_FOREACH(dev, &V_ifnet, if_link) { - u8 port = mlx4_ib_get_dev_port(dev, ibdev); - if (port) { - if (!rdma_vlan_dev_real_dev(dev) && - !netif_is_bond_master(dev)) - mlx4_set_default_gid(ibdev, dev, port); - mlx4_ib_get_dev_addr(dev, ibdev, port); - } - } + ret = ib_get_cached_gid(&ibdev->ib_dev, port_num, index, &gid, &attr); + if (ret) + return ret; - IFNET_RUNLOCK_NOSLEEP(); + if (!memcmp(&gid, &zgid, sizeof(gid))) + return -EINVAL; - return 0; + read_lock(&iboe->iboe_lock); + port_gid_table = &iboe->gid_table[port_num - 1]; + + for (i = 0; i < MLX4_MAX_PORT_GIDS; ++i) + if (!memcmp(&port_gid_table->gids[i].gid, &gid, sizeof(gid)) && + (attr.gid_type == port_gid_table->gids[i].gid_type)) { + ctx = port_gid_table->gids[i].ctx; + break; + } + if (ctx) + real_index = ctx->real_index; + read_unlock(&iboe->iboe_lock); + return real_index; } static void mlx4_ib_scan_netdevs(struct mlx4_ib_dev *ibdev, - struct net_device *dev, unsigned long event) + struct net_device *dev, + unsigned long event) + { struct mlx4_ib_iboe *iboe; + int update_qps_port = -1; int port; - int init = 0; - unsigned long flags; iboe = &ibdev->iboe; - spin_lock_irqsave(&iboe->lock, flags); + write_lock(&iboe->iboe_lock); mlx4_foreach_ib_transport_port(port, ibdev->dev) { - struct net_device *old_netdev = iboe->netdevs[port - 1]; -/* XXX BOND related */ -#if 0 - struct net_device *old_master = iboe->masters[port - 1]; -#endif - iboe->masters[port - 1] = NULL; + iboe->netdevs[port - 1] = mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port); - - if (old_netdev != iboe->netdevs[port - 1]) - init = 1; if (dev == iboe->netdevs[port - 1] && - event == NETDEV_CHANGEADDR) - init = 1; -/* XXX BOND related */ -#if 0 - if (iboe->netdevs[port - 1] && netif_is_bond_slave(iboe->netdevs[port - 1])) - iboe->masters[port - 1] = iboe->netdevs[port - 1]->master; + (event == NETDEV_CHANGEADDR || event == NETDEV_REGISTER || + event == NETDEV_UP || event == NETDEV_CHANGE)) + update_qps_port = port; - /* if bonding is used it is possible that we add it to masters only after - IP address is assigned to the net bonding interface */ - if (old_master != iboe->masters[port - 1]) - init = 1; -#endif } - spin_unlock_irqrestore(&iboe->lock, flags); + write_unlock(&iboe->iboe_lock); - if (init) - if (mlx4_ib_init_gid_table(ibdev)) - pr_warn("Fail to reset gid table\n"); + if (update_qps_port > 0) + mlx4_ib_update_qps(ibdev, dev, update_qps_port); } -static int mlx4_ib_netdev_event(struct notifier_block *this, unsigned long event, - void *ptr) +static int mlx4_ib_netdev_event(struct notifier_block *this, + unsigned long event, void *ptr) { - struct net_device *dev = ptr; + struct net_device *dev = netdev_notifier_info_to_dev(ptr); struct mlx4_ib_dev *ibdev; - ibdev = container_of(this, struct mlx4_ib_dev, iboe.nb); + if (!net_eq(dev_net(dev), &init_net)) + return NOTIFY_DONE; + ibdev = container_of(this, struct mlx4_ib_dev, iboe.nb); mlx4_ib_scan_netdevs(ibdev, dev, event); return NOTIFY_DONE; } -/* This function initializes the gid table only if the event_netdev real device is an iboe - * device, will be invoked by the inet/inet6 events */ -static int mlx4_ib_inet_event(struct notifier_block *this, unsigned long event, - void *ptr) -{ - struct net_device *event_netdev = ptr; - struct mlx4_ib_dev *ibdev; - struct mlx4_ib_iboe *ibdev_iboe; - int port = 0; - - ibdev = container_of(this, struct mlx4_ib_dev, iboe.nb_inet); - - struct net_device *real_dev = rdma_vlan_dev_real_dev(event_netdev) ? - rdma_vlan_dev_real_dev(event_netdev) : - event_netdev; - - ibdev_iboe = &ibdev->iboe; - - port = mlx4_ib_get_dev_port(real_dev, ibdev); - - /* Perform init_gid_table if the event real_dev is the net_device which represents this port, - * otherwise this event is not related and would be ignored.*/ - if(port && (real_dev == ibdev_iboe->netdevs[port - 1])) - if (mlx4_ib_init_gid_table(ibdev)) - pr_warn("Fail to reset gid table\n"); - - return NOTIFY_DONE; -} - - static void init_pkeys(struct mlx4_ib_dev *ibdev) { int port; int slave; int i; if (mlx4_is_master(ibdev->dev)) { - for (slave = 0; slave <= ibdev->dev->num_vfs; ++slave) { + for (slave = 0; slave <= ibdev->dev->persist->num_vfs; + ++slave) { for (port = 1; port <= ibdev->dev->caps.num_ports; ++port) { for (i = 0; i < ibdev->dev->phys_caps.pkey_phys_table_len[port]; @@ -2352,24 +2850,29 @@ ibdev->ib_dev.req_notify_cq = mlx4_ib_arm_cq; ibdev->ib_dev.get_dma_mr = mlx4_ib_get_dma_mr; ibdev->ib_dev.reg_user_mr = mlx4_ib_reg_user_mr; + ibdev->ib_dev.rereg_user_mr = mlx4_ib_rereg_user_mr; ibdev->ib_dev.dereg_mr = mlx4_ib_dereg_mr; + ibdev->ib_dev.query_values = mlx4_ib_query_values; ibdev->ib_dev.alloc_fast_reg_mr = mlx4_ib_alloc_fast_reg_mr; + ibdev->ib_dev.ioctl = mlx4_ib_ioctl; ibdev->ib_dev.alloc_fast_reg_page_list = mlx4_ib_alloc_fast_reg_page_list; ibdev->ib_dev.free_fast_reg_page_list = mlx4_ib_free_fast_reg_page_list; ibdev->ib_dev.attach_mcast = mlx4_ib_mcg_attach; ibdev->ib_dev.detach_mcast = mlx4_ib_mcg_detach; ibdev->ib_dev.process_mad = mlx4_ib_process_mad; - ibdev->ib_dev.ioctl = mlx4_ib_ioctl; - ibdev->ib_dev.query_values = mlx4_ib_query_values; + ibdev->ib_dev.get_netdev = mlx4_ib_get_netdev; + ibdev->ib_dev.modify_gid = mlx4_ib_modify_gid; + ibdev->ib_dev.disassociate_ucontext = mlx4_ib_disassociate_ucontext; if (!mlx4_is_slave(ibdev->dev)) { ibdev->ib_dev.alloc_fmr = mlx4_ib_fmr_alloc; ibdev->ib_dev.map_phys_fmr = mlx4_ib_map_phys_fmr; ibdev->ib_dev.unmap_fmr = mlx4_ib_unmap_fmr; ibdev->ib_dev.dealloc_fmr = mlx4_ib_fmr_dealloc; } - if (dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW) { + if (dev->caps.flags & MLX4_DEV_CAP_FLAG_MEM_WINDOW || + dev->caps.bmme_flags & MLX4_BMME_FLAG_TYPE_2_WIN) { ibdev->ib_dev.alloc_mw = mlx4_ib_alloc_mw; ibdev->ib_dev.bind_mw = mlx4_ib_bind_mw; ibdev->ib_dev.dealloc_mw = mlx4_ib_dealloc_mw; --Apple-Mail=_81524E70-C381-42F8-AEB2-30266F029757 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 |Index: sys/ofed/drivers/infiniband/hw/mlx4/main.c |=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D |--- sys/ofed/drivers/infiniband/hw/mlx4/main.c |+++ sys/ofed/drivers/infiniband/hw/mlx4/main.c -------------------------- Patching file sys/ofed/drivers/infiniband/hw/mlx4/main.c using Plan A... Hunk #1 succeeded at 34. Hunk #2 succeeded at 62. Hunk #3 succeeded at 109. Hunk #4 succeeded at 123. Hunk #5 succeeded at 136. Hunk #6 succeeded at 150. Hunk #7 succeeded at 198. Hunk #8 succeeded at 212. Hunk #9 succeeded at 232. Hunk #10 succeeded at 282. Hunk #11 succeeded at 407. Hunk #12 succeeded at 420. Hunk #13 succeeded at 557. Hunk #14 succeeded at 699. Hunk #15 succeeded at 708. Hunk #16 succeeded at 780. Hunk #17 succeeded at 801. Hunk #18 succeeded at 811. Hunk #19 succeeded at 823. Hunk #20 succeeded at 843. Hunk #21 succeeded at 1040. Hunk #22 succeeded at 1236. Hunk #23 succeeded at 1262. Hunk #24 succeeded at 1394. Hunk #25 succeeded at 1437. Hunk #26 succeeded at 1463. Hunk #27 succeeded at 1478. Hunk #28 succeeded at 1778. Hunk #29 succeeded at 1842. Hunk #30 succeeded at 1954. Hunk #31 succeeded at 1965. Hunk #32 succeeded at 2039. Hunk #33 succeeded at 2071. Hunk #34 succeeded at 2123. Hunk #35 failed at 2144. Hunk #36 succeeded at 2464 (offset 6 lines). Hunk #37 succeeded at 2703 (offset 6 lines). Hunk #38 succeeded at 2723 (offset 6 lines). Hunk #39 succeeded at 2743 (offset 6 lines). Hunk #40 succeeded at 2765 (offset 6 lines). Hunk #41 succeeded at 2793 (offset 6 lines). Hunk #42 failed at 2850. Hunk #43 succeeded at 2889 (offset 1 line). Hunk #44 succeeded at 2972 (offset 6 lines). Hunk #45 succeeded at 3045 (offset 1 line). Hunk #46 succeeded at 3070 (offset 6 lines). Hunk #47 succeeded at 3112 (offset 1 line). Hunk #48 succeeded at 3147 (offset 6 lines). Hunk #49 succeeded at 3181 (offset 1 line). Hunk #50 succeeded at 3224 (offset 6 lines). Hunk #51 succeeded at 3248 (offset 1 line). Hunk #52 succeeded at 3265 (offset 6 lines). Hunk #53 succeeded at 3412 (offset 1 line). Hunk #54 succeeded at 3438 (offset 6 lines). Hunk #55 succeeded at 3477 (offset 1 line). Hunk #56 succeeded at 3516 (offset 6 lines). Hunk #57 succeeded at 3532 (offset 1 line). Hunk #58 succeeded at 3553 (offset 6 lines). 2 out of 58 hunks failed--saving rejects to = sys/ofed/drivers/infiniband/hw/mlx4/main.c.rej - David P. Discher http://davidpdischer.com/ AIM: DavidDPD | Y!M: daviddpdz Mobile: 408.368.3725 > On Apr 23, 2016, at 11:36 AM, Hans Petter Selasky <hps@selasky.org> = wrote: >=20 > On 04/23/16 10:26, Hans Petter Selasky wrote: >> On 04/23/16 01:08, David P. Discher wrote: >>> Hans and Chris - >>>=20 >>> Any chance of getting an updated diff for the OFED 3.2 patches? I >>> love to see if I can reproduce Chris=E2=80=99s IPOIB performance. I = got a >>> couple MT25208 InfiniHost III Ex I=E2=80=99d like to start using. >>>=20 >>> I grabbed the D5790-9 freebsd reviews diffs, and attempted to = applied >>> to -head at r298494 : >>>=20 >>>=20 >>=20 >> Yes, I'll update the patchset later today. It is broken because of = some >> changes I pushed upstream. >>=20 >> --HPS >=20 > Hi, >=20 > You'll need to refetch D5790, D5791 and D5797. Let me know if = something still doesn't apply cleanly. >=20 > --HPS >=20 --Apple-Mail=_81524E70-C381-42F8-AEB2-30266F029757-- --Apple-Mail=_11D7EE31-E231-4C64-801D-5222CD654299 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=signature.asc Content-Type: application/pgp-signature; name=signature.asc Content-Description: Message signed with OpenPGP using GPGMail -----BEGIN PGP SIGNATURE----- Comment: GPGTools - https://gpgtools.org iQEcBAEBCgAGBQJXG8m3AAoJEEmwU6XuhYWOxnsH/AxEg1mbkj520ohLRgUKNmt4 43MpR9E0paJ7VS/F9/PyvXI4kDcjdfyHZt2GwAAQYmhw8XSNbMpSPWJaKiNOqess 7Bo3SSIpiegh7tdDjKTbdujr/4CwXF7QHvtmuBZw7Q3DlvchM0SwuHdDL68SMuLb 9gv8+r7ma7k1xyLPrEstCrNNwWUAuN+PUZl6rqulsj+nszxYhU68m6rA5hmiMJaO F+FVACNBWzOS2zoGVUXcILVA6kYmR62E+2Oaf2T9sTjrs868h4DikDA7vmd7IOlu oVXpLPO7ve+amt8z8MnUIEYOdhGqlAuyrTe4jv7RPL5F0MmfZh6u2338AU5wgSo= =lVGe -----END PGP SIGNATURE----- --Apple-Mail=_11D7EE31-E231-4C64-801D-5222CD654299--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5A0F033C-32E0-4F44-8835-2C079581EE32>