virtio-net.c (4b52d63249a508dd927222ffac1a868d38681fc5) | virtio-net.c (283be5966eb7ec18fda3e95c979be620dfb8c72a) |
---|---|
1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 1315 unchanged lines hidden (view full) --- 1324 return true; 1325} 1326 1327static void virtio_net_detach_epbf_rss(VirtIONet *n) 1328{ 1329 virtio_net_attach_ebpf_to_backend(n->nic, -1); 1330} 1331 | 1/* 2 * Virtio Network Device 3 * 4 * Copyright IBM, Corp. 2007 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * --- 1315 unchanged lines hidden (view full) --- 1324 return true; 1325} 1326 1327static void virtio_net_detach_epbf_rss(VirtIONet *n) 1328{ 1329 virtio_net_attach_ebpf_to_backend(n->nic, -1); 1330} 1331 |
1332static bool virtio_net_load_ebpf_fds(VirtIONet *n, Error **errp) | 1332static bool virtio_net_load_ebpf_fds(VirtIONet *n) |
1333{ 1334 int fds[EBPF_RSS_MAX_FDS] = { [0 ... EBPF_RSS_MAX_FDS - 1] = -1}; 1335 int ret = true; 1336 int i = 0; 1337 | 1333{ 1334 int fds[EBPF_RSS_MAX_FDS] = { [0 ... EBPF_RSS_MAX_FDS - 1] = -1}; 1335 int ret = true; 1336 int i = 0; 1337 |
1338 ERRP_GUARD(); 1339 | |
1340 if (n->nr_ebpf_rss_fds != EBPF_RSS_MAX_FDS) { | 1338 if (n->nr_ebpf_rss_fds != EBPF_RSS_MAX_FDS) { |
1341 error_setg(errp, 1342 "Expected %d file descriptors but got %d", 1343 EBPF_RSS_MAX_FDS, n->nr_ebpf_rss_fds); | 1339 warn_report("Expected %d file descriptors but got %d", 1340 EBPF_RSS_MAX_FDS, n->nr_ebpf_rss_fds); |
1344 return false; 1345 } 1346 1347 for (i = 0; i < n->nr_ebpf_rss_fds; i++) { | 1341 return false; 1342 } 1343 1344 for (i = 0; i < n->nr_ebpf_rss_fds; i++) { |
1348 fds[i] = monitor_fd_param(monitor_cur(), n->ebpf_rss_fds[i], errp); 1349 if (*errp) { | 1345 fds[i] = monitor_fd_param(monitor_cur(), n->ebpf_rss_fds[i], 1346 &error_warn); 1347 if (fds[i] < 0) { |
1350 ret = false; 1351 goto exit; 1352 } 1353 } 1354 1355 ret = ebpf_rss_load_fds(&n->ebpf_rss, fds[0], fds[1], fds[2], fds[3]); 1356 1357exit: | 1348 ret = false; 1349 goto exit; 1350 } 1351 } 1352 1353 ret = ebpf_rss_load_fds(&n->ebpf_rss, fds[0], fds[1], fds[2], fds[3]); 1354 1355exit: |
1358 if (!ret || *errp) { | 1356 if (!ret) { |
1359 for (i = 0; i < n->nr_ebpf_rss_fds && fds[i] != -1; i++) { 1360 close(fds[i]); 1361 } 1362 } 1363 1364 return ret; 1365} 1366 | 1357 for (i = 0; i < n->nr_ebpf_rss_fds && fds[i] != -1; i++) { 1358 close(fds[i]); 1359 } 1360 } 1361 1362 return ret; 1363} 1364 |
1367static bool virtio_net_load_ebpf(VirtIONet *n, Error **errp) | 1365static bool virtio_net_load_ebpf(VirtIONet *n) |
1368{ 1369 bool ret = false; 1370 1371 if (virtio_net_attach_ebpf_to_backend(n->nic, -1)) { | 1366{ 1367 bool ret = false; 1368 1369 if (virtio_net_attach_ebpf_to_backend(n->nic, -1)) { |
1372 if (!(n->ebpf_rss_fds 1373 && virtio_net_load_ebpf_fds(n, errp))) { | 1370 if (!(n->ebpf_rss_fds && virtio_net_load_ebpf_fds(n))) { |
1374 ret = ebpf_rss_load(&n->ebpf_rss); 1375 } 1376 } 1377 1378 return ret; 1379} 1380 1381static void virtio_net_unload_ebpf(VirtIONet *n) --- 2422 unchanged lines hidden (view full) --- 3804 (uint8_t *)&netcfg, 0, ETH_ALEN, VHOST_SET_CONFIG_TYPE_FRONTEND); 3805 } 3806 QTAILQ_INIT(&n->rsc_chains); 3807 n->qdev = dev; 3808 3809 net_rx_pkt_init(&n->rx_pkt); 3810 3811 if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) { | 1371 ret = ebpf_rss_load(&n->ebpf_rss); 1372 } 1373 } 1374 1375 return ret; 1376} 1377 1378static void virtio_net_unload_ebpf(VirtIONet *n) --- 2422 unchanged lines hidden (view full) --- 3801 (uint8_t *)&netcfg, 0, ETH_ALEN, VHOST_SET_CONFIG_TYPE_FRONTEND); 3802 } 3803 QTAILQ_INIT(&n->rsc_chains); 3804 n->qdev = dev; 3805 3806 net_rx_pkt_init(&n->rx_pkt); 3807 3808 if (virtio_has_feature(n->host_features, VIRTIO_NET_F_RSS)) { |
3812 virtio_net_load_ebpf(n, errp); | 3809 virtio_net_load_ebpf(n); |
3813 } 3814} 3815 3816static void virtio_net_device_unrealize(DeviceState *dev) 3817{ 3818 VirtIODevice *vdev = VIRTIO_DEVICE(dev); 3819 VirtIONet *n = VIRTIO_NET(dev); 3820 int i, max_queue_pairs; --- 226 unchanged lines hidden --- | 3810 } 3811} 3812 3813static void virtio_net_device_unrealize(DeviceState *dev) 3814{ 3815 VirtIODevice *vdev = VIRTIO_DEVICE(dev); 3816 VirtIONet *n = VIRTIO_NET(dev); 3817 int i, max_queue_pairs; --- 226 unchanged lines hidden --- |