{
        struct ib_smp *smp = inbox->buf;
        u32 index;
-       u8 port;
+       u8 port, slave_port;
        u8 opcode_modifier;
        u16 *table;
        int err;
        __be32 slave_cap_mask;
        __be64 slave_node_guid;
 
-       port = vhcr->in_modifier;
+       slave_port = vhcr->in_modifier;
+       port = mlx4_slave_convert_port(dev, slave, slave_port);
 
        /* network-view bit is for driver use only, and should not be passed to FW */
        opcode_modifier = vhcr->op_modifier & ~0x8; /* clear netw view bit */
                        if (smp->attr_id == IB_SMP_ATTR_PORT_INFO) {
                                /*get the slave specific caps:*/
                                /*do the command */
+                               smp->attr_mod = cpu_to_be32(port);
                                err = mlx4_cmd_box(dev, inbox->dma, outbox->dma,
-                                           vhcr->in_modifier, opcode_modifier,
+                                           port, opcode_modifier,
                                            vhcr->op, MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
                                /* modify the response for slaves */
                                if (!err && slave != mlx4_master_func_num(dev)) {
                        }
                        if (smp->attr_id == IB_SMP_ATTR_NODE_INFO) {
                                err = mlx4_cmd_box(dev, inbox->dma, outbox->dma,
-                                            vhcr->in_modifier, opcode_modifier,
+                                            port, opcode_modifier,
                                             vhcr->op, MLX4_CMD_TIME_CLASS_C, MLX4_CMD_NATIVE);
                                if (!err) {
                                        slave_node_guid =  mlx4_get_slave_node_guid(dev, slave);