diff --git a/interface-definitions/include/version/vpp-version.xml.i b/interface-definitions/include/version/vpp-version.xml.i
index 96a69c92fa..205e87916d 100644
--- a/interface-definitions/include/version/vpp-version.xml.i
+++ b/interface-definitions/include/version/vpp-version.xml.i
@@ -1,3 +1,3 @@
 
-
+
 
\ No newline at end of file
diff --git a/interface-definitions/vpp.xml.in b/interface-definitions/vpp.xml.in
index c45d89b949..911c6f6682 100644
--- a/interface-definitions/vpp.xml.in
+++ b/interface-definitions/vpp.xml.in
@@ -561,12 +561,6 @@
                   XDP settings
                 
                 
-                  
-                    
-                      Unlock multithreading in interrupt and adaptive modes
-                      
-                    
-                  
                   
                     
                       Number of receive queues
diff --git a/python/vyos/vpp/control_vpp.py b/python/vyos/vpp/control_vpp.py
index 42e7bf6c12..41b4573a57 100644
--- a/python/vyos/vpp/control_vpp.py
+++ b/python/vyos/vpp/control_vpp.py
@@ -378,7 +378,7 @@ def xdp_iface_create(
         if mode != 'auto':
             mode_resolve: dict[str, int] = {'auto': 0, 'copy': 1, 'zero-copy': 2}
             api_call_args['mode'] = mode_resolve[mode]
-        if flags == 'no_systcall_lock':
+        if flags == 'no_syscall_lock':
             api_call_args['flags'] = 1
         return self.__vpp_api_client.api.af_xdp_create_v3(**api_call_args)
 
diff --git a/smoketest/config-tests/vpp b/smoketest/config-tests/vpp
index e425689652..46856fe251 100644
--- a/smoketest/config-tests/vpp
+++ b/smoketest/config-tests/vpp
@@ -44,6 +44,6 @@ set vpp interfaces vxlan vxlan10 source-address '192.0.2.1'
 set vpp interfaces vxlan vxlan10 vni '10'
 set vpp settings interface eth1 driver 'dpdk'
 set vpp settings interface eth2 driver 'dpdk'
-set vpp settings interface eth3 driver 'dpdk'
+set vpp settings interface eth3 driver 'xdp'
 set vpp settings interface eth4 driver 'dpdk'
 set vpp settings unix poll-sleep-usec '12'
diff --git a/smoketest/configs/vpp b/smoketest/configs/vpp
index 472c2919b7..e334b36bb8 100644
--- a/smoketest/configs/vpp
+++ b/smoketest/configs/vpp
@@ -112,7 +112,10 @@ vpp {
             driver "dpdk"
         }
         interface eth3 {
-            driver "dpdk"
+            driver "xdp"
+            xdp-options {
+                no-syscall-lock
+            }
         }
         interface eth4 {
             driver "dpdk"
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py
index 37485bd0d2..03b2fc6735 100755
--- a/smoketest/scripts/cli/test_vpp.py
+++ b/smoketest/scripts/cli/test_vpp.py
@@ -1101,7 +1101,7 @@ def test_10_vpp_driver_options(self):
 
         # DPDK driver expect only dpdk-options and not xdp-options to be set
         # expect raise ConfigError
-        self.cli_set(base_interface_path + ['xdp-options', 'no-syscall-lock'])
+        self.cli_set(base_interface_path + ['xdp-options', 'zero-copy'])
 
         with self.assertRaises(ConfigSessionError):
             self.cli_commit()
diff --git a/src/conf_mode/vpp.py b/src/conf_mode/vpp.py
index 81502c0b44..c4142437bc 100755
--- a/src/conf_mode/vpp.py
+++ b/src/conf_mode/vpp.py
@@ -107,7 +107,6 @@
     'igb': ['xdp'],
     'igc': ['dpdk', 'xdp'],
     'ixgbe': ['dpdk', 'xdp'],
-    'ixgbevf': ['dpdk'],
     'qede': ['dpdk', 'xdp'],
     'vmxnet3': ['xdp'],
     'virtio_net': ['xdp'],
@@ -338,7 +337,10 @@ def get_config(config=None):
                         )
                     if 'zero-copy' in iface_config['xdp_options']:
                         xdp_api_params['mode'] = 'zero-copy'
-                    if 'zero-copy' in iface_config['xdp_options']:
+                    if iface_config.get('rx_mode') in ('interrupt', 'adaptive') and any(
+                        key in config['settings'].get('cpu', {})
+                        for key in ('workers', 'corelist_workers')
+                    ):
                         xdp_api_params['flags'] = 'no_syscall_lock'
                     iface_config['xdp_api_params'] = xdp_api_params
 
diff --git a/src/migration-scripts/vpp/1-to-2 b/src/migration-scripts/vpp/1-to-2
new file mode 100644
index 0000000000..822799cc64
--- /dev/null
+++ b/src/migration-scripts/vpp/1-to-2
@@ -0,0 +1,34 @@
+# Copyright VyOS maintainers and contributors 
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library.  If not, see .
+
+# Delete 'vpp settings interface ethX xdp-options no-syscall-lock'
+# since it is set automatically
+
+from vyos.configtree import ConfigTree
+
+base = ['vpp', 'settings', 'interface']
+
+def migrate(config: ConfigTree) -> None:
+    if not config.exists(base):
+        # Nothing to do
+        return
+
+    for iface_name in config.list_nodes(base):
+        xdp_options_base = base + [iface_name, 'xdp-options']
+        if config.exists(xdp_options_base + ['no-syscall-lock']):
+            # Delete no-syscall-lock option from configuration
+            config.delete(xdp_options_base + ['no-syscall-lock'])
+        if config.exists(xdp_options_base) and len(config.list_nodes(xdp_options_base)) == 0:
+            config.delete(xdp_options_base)