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 ---