|
@@ -2056,7 +2056,6 @@ vmxnet3_set_mc(struct net_device *netdev)
|
|
|
if (!netdev_mc_empty(netdev)) {
|
|
|
new_table = vmxnet3_copy_mc(netdev);
|
|
|
if (new_table) {
|
|
|
- new_mode |= VMXNET3_RXM_MCAST;
|
|
|
rxConf->mfTableLen = cpu_to_le16(
|
|
|
netdev_mc_count(netdev) * ETH_ALEN);
|
|
|
new_table_pa = dma_map_single(
|
|
@@ -2064,15 +2063,18 @@ vmxnet3_set_mc(struct net_device *netdev)
|
|
|
new_table,
|
|
|
rxConf->mfTableLen,
|
|
|
PCI_DMA_TODEVICE);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (new_table_pa) {
|
|
|
+ new_mode |= VMXNET3_RXM_MCAST;
|
|
|
rxConf->mfTablePA = cpu_to_le64(new_table_pa);
|
|
|
} else {
|
|
|
- netdev_info(netdev, "failed to copy mcast list"
|
|
|
- ", setting ALL_MULTI\n");
|
|
|
+ netdev_info(netdev,
|
|
|
+ "failed to copy mcast list, setting ALL_MULTI\n");
|
|
|
new_mode |= VMXNET3_RXM_ALL_MULTI;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if (!(new_mode & VMXNET3_RXM_MCAST)) {
|
|
|
rxConf->mfTableLen = 0;
|
|
|
rxConf->mfTablePA = 0;
|
|
@@ -2091,11 +2093,10 @@ vmxnet3_set_mc(struct net_device *netdev)
|
|
|
VMXNET3_CMD_UPDATE_MAC_FILTERS);
|
|
|
spin_unlock_irqrestore(&adapter->cmd_lock, flags);
|
|
|
|
|
|
- if (new_table) {
|
|
|
+ if (new_table_pa)
|
|
|
dma_unmap_single(&adapter->pdev->dev, new_table_pa,
|
|
|
rxConf->mfTableLen, PCI_DMA_TODEVICE);
|
|
|
- kfree(new_table);
|
|
|
- }
|
|
|
+ kfree(new_table);
|
|
|
}
|
|
|
|
|
|
void
|