}
}
+ struct spdk_pci_addr pci_addr;
+ int rc = spdk_pci_addr_parse(&pci_addr, trid.traddr);
+ if (rc < 0) {
+ derr << __func__ << " invalid transport address: " << trid.traddr << dendl;
+ return -ENOENT;
+ }
auto coremask_arg = g_conf().get_val<std::string>("bluestore_spdk_coremask");
int m_core_arg = find_first_bitset(coremask_arg);
// at least one core is needed for using spdk
if (!dpdk_thread.joinable()) {
dpdk_thread = std::thread(
- [this, coremask_arg, m_core_arg, mem_size_arg]() {
- static struct spdk_env_opts opts;
+ [this, coremask_arg, m_core_arg, mem_size_arg, pci_addr]() {
+ struct spdk_env_opts opts;
+ struct spdk_pci_addr addr = pci_addr;
int r;
spdk_env_opts_init(&opts);
opts.core_mask = coremask_arg.c_str();
opts.master_core = m_core_arg;
opts.mem_size = mem_size_arg;
+ opts.pci_whitelist = &addr;
+ opts.num_pci_addr = 1;
spdk_env_init(&opts);
spdk_unaffinitize_thread();