Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 8195df6

Browse files
gregkhTreehugger Robot
authored andcommitted
Merge fde7db1 ("ice: fix VLAN replay after reset") into android15-6.6-lts
Steps on the way to 6.6.57 Change-Id: I3ade50a4e0faeac8caf4c6f158306a39cba2aefd Signed-off-by: Greg Kroah-Hartman <[email protected]>
2 parents e64a7d1 + fde7db1 commit 8195df6

File tree

47 files changed

+431
-91
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+431
-91
lines changed

arch/loongarch/pci/acpi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
225225
if (bus) {
226226
memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
227227
kfree(info);
228+
kfree(root_ops);
228229
} else {
229230
struct pci_bus *child;
230231

arch/riscv/include/asm/sparsemem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#ifdef CONFIG_64BIT
88
#define MAX_PHYSMEM_BITS 56
99
#else
10-
#define MAX_PHYSMEM_BITS 34
10+
#define MAX_PHYSMEM_BITS 32
1111
#endif /* CONFIG_64BIT */
1212
#define SECTION_SIZE_BITS 27
1313
#endif /* CONFIG_SPARSEMEM */

arch/riscv/kernel/elf_kexec.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
444444
*(u32 *)loc = CLEAN_IMM(CJTYPE, *(u32 *)loc) |
445445
ENCODE_CJTYPE_IMM(val - addr);
446446
break;
447+
case R_RISCV_ADD16:
448+
*(u16 *)loc += val;
449+
break;
450+
case R_RISCV_SUB16:
451+
*(u16 *)loc -= val;
452+
break;
447453
case R_RISCV_ADD32:
448454
*(u32 *)loc += val;
449455
break;

arch/riscv/kernel/entry.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ SYM_CODE_START(ret_from_fork)
228228
jalr s0
229229
1:
230230
move a0, sp /* pt_regs */
231-
la ra, ret_from_exception
232-
tail syscall_exit_to_user_mode
231+
call syscall_exit_to_user_mode
232+
j ret_from_exception
233233
SYM_CODE_END(ret_from_fork)
234234

235235
/*

arch/x86/kernel/amd_nb.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#define PCI_DEVICE_ID_AMD_19H_M70H_ROOT 0x14e8
2727
#define PCI_DEVICE_ID_AMD_1AH_M00H_ROOT 0x153a
2828
#define PCI_DEVICE_ID_AMD_1AH_M20H_ROOT 0x1507
29+
#define PCI_DEVICE_ID_AMD_1AH_M60H_ROOT 0x1122
2930
#define PCI_DEVICE_ID_AMD_MI200_ROOT 0x14bb
3031

3132
#define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464
@@ -61,6 +62,7 @@ static const struct pci_device_id amd_root_ids[] = {
6162
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_ROOT) },
6263
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_ROOT) },
6364
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
65+
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) },
6466
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_ROOT) },
6567
{}
6668
};
@@ -92,6 +94,8 @@ static const struct pci_device_id amd_nb_misc_ids[] = {
9294
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
9395
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
9496
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
97+
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3) },
98+
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M70H_DF_F3) },
9599
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_MI200_DF_F3) },
96100
{}
97101
};

drivers/base/bus.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ static ssize_t bus_attr_show(struct kobject *kobj, struct attribute *attr,
152152
{
153153
struct bus_attribute *bus_attr = to_bus_attr(attr);
154154
struct subsys_private *subsys_priv = to_subsys_private(kobj);
155-
ssize_t ret = 0;
155+
/* return -EIO for reading a bus attribute without show() */
156+
ssize_t ret = -EIO;
156157

157158
if (bus_attr->show)
158159
ret = bus_attr->show(subsys_priv->bus, buf);
@@ -164,7 +165,8 @@ static ssize_t bus_attr_store(struct kobject *kobj, struct attribute *attr,
164165
{
165166
struct bus_attribute *bus_attr = to_bus_attr(attr);
166167
struct subsys_private *subsys_priv = to_subsys_private(kobj);
167-
ssize_t ret = 0;
168+
/* return -EIO for writing a bus attribute without store() */
169+
ssize_t ret = -EIO;
168170

169171
if (bus_attr->store)
170172
ret = bus_attr->store(subsys_priv->bus, buf, count);
@@ -920,6 +922,8 @@ int bus_register(const struct bus_type *bus)
920922
bus_remove_file(bus, &bus_attr_uevent);
921923
bus_uevent_fail:
922924
kset_unregister(&priv->subsys);
925+
/* Above kset_unregister() will kfree @priv */
926+
priv = NULL;
923927
out:
924928
kfree(priv);
925929
return retval;

drivers/clk/bcm/clk-bcm53573-ilp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ static void bcm53573_ilp_init(struct device_node *np)
112112
goto err_free_ilp;
113113
}
114114

115-
ilp->regmap = syscon_node_to_regmap(of_get_parent(np));
115+
ilp->regmap = syscon_node_to_regmap(np->parent);
116116
if (IS_ERR(ilp->regmap)) {
117117
err = PTR_ERR(ilp->regmap);
118118
goto err_free_ilp;

drivers/clk/imx/clk-imx7d.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -498,9 +498,9 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
498498
hws[IMX7D_ENET_AXI_ROOT_SRC] = imx_clk_hw_mux2_flags("enet_axi_src", base + 0x8900, 24, 3, enet_axi_sel, ARRAY_SIZE(enet_axi_sel), CLK_SET_PARENT_GATE);
499499
hws[IMX7D_NAND_USDHC_BUS_ROOT_SRC] = imx_clk_hw_mux2_flags("nand_usdhc_src", base + 0x8980, 24, 3, nand_usdhc_bus_sel, ARRAY_SIZE(nand_usdhc_bus_sel), CLK_SET_PARENT_GATE);
500500
hws[IMX7D_DRAM_PHYM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_src", base + 0x9800, 24, 1, dram_phym_sel, ARRAY_SIZE(dram_phym_sel), CLK_SET_PARENT_GATE);
501-
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel), CLK_SET_PARENT_GATE);
501+
hws[IMX7D_DRAM_ROOT_SRC] = imx_clk_hw_mux2("dram_src", base + 0x9880, 24, 1, dram_sel, ARRAY_SIZE(dram_sel));
502502
hws[IMX7D_DRAM_PHYM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_phym_alt_src", base + 0xa000, 24, 3, dram_phym_alt_sel, ARRAY_SIZE(dram_phym_alt_sel), CLK_SET_PARENT_GATE);
503-
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2_flags("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel), CLK_SET_PARENT_GATE);
503+
hws[IMX7D_DRAM_ALT_ROOT_SRC] = imx_clk_hw_mux2("dram_alt_src", base + 0xa080, 24, 3, dram_alt_sel, ARRAY_SIZE(dram_alt_sel));
504504
hws[IMX7D_USB_HSIC_ROOT_SRC] = imx_clk_hw_mux2_flags("usb_hsic_src", base + 0xa100, 24, 3, usb_hsic_sel, ARRAY_SIZE(usb_hsic_sel), CLK_SET_PARENT_GATE);
505505
hws[IMX7D_PCIE_CTRL_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_ctrl_src", base + 0xa180, 24, 3, pcie_ctrl_sel, ARRAY_SIZE(pcie_ctrl_sel), CLK_SET_PARENT_GATE);
506506
hws[IMX7D_PCIE_PHY_ROOT_SRC] = imx_clk_hw_mux2_flags("pcie_phy_src", base + 0xa200, 24, 3, pcie_phy_sel, ARRAY_SIZE(pcie_phy_sel), CLK_SET_PARENT_GATE);

drivers/comedi/drivers/ni_routing/tools/convert_c_to_py.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ int main(void)
140140
{
141141
FILE *fp = fopen("ni_values.py", "w");
142142

143+
if (fp == NULL) {
144+
fprintf(stderr, "Could not open file!");
145+
return -1;
146+
}
147+
143148
/* write route register values */
144149
fprintf(fp, "ni_route_values = {\n");
145150
for (int i = 0; ni_all_route_values[i]; ++i)

drivers/gpu/drm/amd/display/dc/core/dc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1691,7 +1691,7 @@ bool dc_validate_boot_timing(const struct dc *dc,
16911691
if (crtc_timing->pix_clk_100hz != pix_clk_100hz)
16921692
return false;
16931693

1694-
if (!se->funcs->dp_get_pixel_format)
1694+
if (!se || !se->funcs->dp_get_pixel_format)
16951695
return false;
16961696

16971697
if (!se->funcs->dp_get_pixel_format(

drivers/hwmon/k10temp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,6 +545,7 @@ static const struct pci_device_id k10temp_id_table[] = {
545545
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
546546
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M00H_DF_F3) },
547547
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M20H_DF_F3) },
548+
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_1AH_M60H_DF_F3) },
548549
{ PCI_VDEVICE(HYGON, PCI_DEVICE_ID_AMD_17H_DF_F3) },
549550
{}
550551
};

drivers/i2c/busses/i2c-i801.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1754,8 +1754,15 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
17541754

17551755
i801_add_tco(priv);
17561756

1757+
/*
1758+
* adapter.name is used by platform code to find the main I801 adapter
1759+
* to instantiante i2c_clients, do not change.
1760+
*/
17571761
snprintf(priv->adapter.name, sizeof(priv->adapter.name),
1758-
"SMBus I801 adapter at %04lx", priv->smba);
1762+
"SMBus %s adapter at %04lx",
1763+
(priv->features & FEATURE_IDF) ? "I801 IDF" : "I801",
1764+
priv->smba);
1765+
17591766
err = i2c_add_adapter(&priv->adapter);
17601767
if (err) {
17611768
platform_device_unregister(priv->tco_pdev);

drivers/i3c/master/i3c-master-cdns.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1666,6 +1666,7 @@ static void cdns_i3c_master_remove(struct platform_device *pdev)
16661666
{
16671667
struct cdns_i3c_master *master = platform_get_drvdata(pdev);
16681668

1669+
cancel_work_sync(&master->hj_work);
16691670
i3c_master_unregister(&master->base);
16701671

16711672
clk_disable_unprepare(master->sysclk);

drivers/infiniband/hw/mlx5/odp.c

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -733,24 +733,31 @@ static int pagefault_dmabuf_mr(struct mlx5_ib_mr *mr, size_t bcnt,
733733
* >0: Number of pages mapped
734734
*/
735735
static int pagefault_mr(struct mlx5_ib_mr *mr, u64 io_virt, size_t bcnt,
736-
u32 *bytes_mapped, u32 flags)
736+
u32 *bytes_mapped, u32 flags, bool permissive_fault)
737737
{
738738
struct ib_umem_odp *odp = to_ib_umem_odp(mr->umem);
739739

740-
if (unlikely(io_virt < mr->ibmr.iova))
740+
if (unlikely(io_virt < mr->ibmr.iova) && !permissive_fault)
741741
return -EFAULT;
742742

743743
if (mr->umem->is_dmabuf)
744744
return pagefault_dmabuf_mr(mr, bcnt, bytes_mapped, flags);
745745

746746
if (!odp->is_implicit_odp) {
747+
u64 offset = io_virt < mr->ibmr.iova ? 0 : io_virt - mr->ibmr.iova;
747748
u64 user_va;
748749

749-
if (check_add_overflow(io_virt - mr->ibmr.iova,
750-
(u64)odp->umem.address, &user_va))
750+
if (check_add_overflow(offset, (u64)odp->umem.address,
751+
&user_va))
751752
return -EFAULT;
752-
if (unlikely(user_va >= ib_umem_end(odp) ||
753-
ib_umem_end(odp) - user_va < bcnt))
753+
754+
if (permissive_fault) {
755+
if (user_va < ib_umem_start(odp))
756+
user_va = ib_umem_start(odp);
757+
if ((user_va + bcnt) > ib_umem_end(odp))
758+
bcnt = ib_umem_end(odp) - user_va;
759+
} else if (unlikely(user_va >= ib_umem_end(odp) ||
760+
ib_umem_end(odp) - user_va < bcnt))
754761
return -EFAULT;
755762
return pagefault_real_mr(mr, odp, user_va, bcnt, bytes_mapped,
756763
flags);
@@ -857,7 +864,7 @@ static int pagefault_single_data_segment(struct mlx5_ib_dev *dev,
857864
case MLX5_MKEY_MR:
858865
mr = container_of(mmkey, struct mlx5_ib_mr, mmkey);
859866

860-
ret = pagefault_mr(mr, io_virt, bcnt, bytes_mapped, 0);
867+
ret = pagefault_mr(mr, io_virt, bcnt, bytes_mapped, 0, false);
861868
if (ret < 0)
862869
goto end;
863870

@@ -1710,7 +1717,7 @@ static void mlx5_ib_prefetch_mr_work(struct work_struct *w)
17101717
for (i = 0; i < work->num_sge; ++i) {
17111718
ret = pagefault_mr(work->frags[i].mr, work->frags[i].io_virt,
17121719
work->frags[i].length, &bytes_mapped,
1713-
work->pf_flags);
1720+
work->pf_flags, false);
17141721
if (ret <= 0)
17151722
continue;
17161723
mlx5_update_odp_stats(work->frags[i].mr, prefetch, ret);
@@ -1761,7 +1768,7 @@ static int mlx5_ib_prefetch_sg_list(struct ib_pd *pd,
17611768
if (IS_ERR(mr))
17621769
return PTR_ERR(mr);
17631770
ret = pagefault_mr(mr, sg_list[i].addr, sg_list[i].length,
1764-
&bytes_mapped, pf_flags);
1771+
&bytes_mapped, pf_flags, false);
17651772
if (ret < 0) {
17661773
mlx5r_deref_odp_mkey(&mr->mmkey);
17671774
return ret;

drivers/media/common/videobuf2/videobuf2-core.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,10 @@ static void __vb2_plane_dmabuf_put(struct vb2_buffer *vb, struct vb2_plane *p)
302302
p->mem_priv = NULL;
303303
p->dbuf = NULL;
304304
p->dbuf_mapped = 0;
305+
p->bytesused = 0;
306+
p->length = 0;
307+
p->m.fd = 0;
308+
p->data_offset = 0;
305309
}
306310

307311
/*
@@ -1296,10 +1300,6 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
12961300

12971301
/* Release previously acquired memory if present */
12981302
__vb2_plane_dmabuf_put(vb, &vb->planes[plane]);
1299-
vb->planes[plane].bytesused = 0;
1300-
vb->planes[plane].length = 0;
1301-
vb->planes[plane].m.fd = 0;
1302-
vb->planes[plane].data_offset = 0;
13031303

13041304
/* Acquire each plane's memory */
13051305
mem_priv = call_ptr_memop(attach_dmabuf,

drivers/mfd/intel_soc_pmic_chtwc.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,6 @@ static const struct dmi_system_id cht_wc_model_dmi_ids[] = {
178178
.driver_data = (void *)(long)INTEL_CHT_WC_LENOVO_YT3_X90,
179179
.matches = {
180180
DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
181-
DMI_MATCH(DMI_PRODUCT_NAME, "CHERRYVIEW D1 PLATFORM"),
182181
DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),
183182
},
184183
},

drivers/net/ethernet/intel/ice/ice_switch.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6326,8 +6326,6 @@ ice_replay_vsi_fltr(struct ice_hw *hw, u16 vsi_handle, u8 recp_id,
63266326
if (!itr->vsi_list_info ||
63276327
!test_bit(vsi_handle, itr->vsi_list_info->vsi_map))
63286328
continue;
6329-
/* Clearing it so that the logic can add it back */
6330-
clear_bit(vsi_handle, itr->vsi_list_info->vsi_map);
63316329
f_entry.fltr_info.vsi_handle = vsi_handle;
63326330
f_entry.fltr_info.fltr_act = ICE_FWD_TO_VSI;
63336331
/* update the src in case it is VSI num */

drivers/net/ethernet/intel/ice/ice_tc_lib.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -777,6 +777,17 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
777777
rule_info.sw_act.flag |= ICE_FLTR_TX;
778778
rule_info.sw_act.src = vsi->idx;
779779
rule_info.flags_info.act = ICE_SINGLE_ACT_LAN_ENABLE;
780+
/* This is a specific case. The destination VSI index is
781+
* overwritten by the source VSI index. This type of filter
782+
* should allow the packet to go to the LAN, not to the
783+
* VSI passed here. It should set LAN_EN bit only. However,
784+
* the VSI must be a valid one. Setting source VSI index
785+
* here is safe. Even if the result from switch is set LAN_EN
786+
* and LB_EN (which normally will pass the packet to this VSI)
787+
* packet won't be seen on the VSI, because local loopback is
788+
* turned off.
789+
*/
790+
rule_info.sw_act.vsi_handle = vsi->idx;
780791
} else {
781792
/* VF to VF */
782793
rule_info.sw_act.flag |= ICE_FLTR_TX;

drivers/ntb/hw/mscc/ntb_hw_switchtec.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,6 +1554,7 @@ static void switchtec_ntb_remove(struct device *dev)
15541554
switchtec_ntb_deinit_db_msg_irq(sndev);
15551555
switchtec_ntb_deinit_shared_mw(sndev);
15561556
switchtec_ntb_deinit_crosslink(sndev);
1557+
cancel_work_sync(&sndev->check_link_status_work);
15571558
kfree(sndev);
15581559
dev_info(dev, "ntb device unregistered\n");
15591560
}

drivers/pci/quirks.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3614,6 +3614,8 @@ DECLARE_PCI_FIXUP_FINAL(0x1814, 0x0601, /* Ralink RT2800 802.11n PCI */
36143614
quirk_broken_intx_masking);
36153615
DECLARE_PCI_FIXUP_FINAL(0x1b7c, 0x0004, /* Ceton InfiniTV4 */
36163616
quirk_broken_intx_masking);
3617+
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_20K2,
3618+
quirk_broken_intx_masking);
36173619

36183620
/*
36193621
* Realtek RTL8169 PCI Gigabit Ethernet Controller (rev 10)
@@ -5080,6 +5082,8 @@ static const struct pci_dev_acs_enabled {
50805082
/* QCOM QDF2xxx root ports */
50815083
{ PCI_VENDOR_ID_QCOM, 0x0400, pci_quirk_qcom_rp_acs },
50825084
{ PCI_VENDOR_ID_QCOM, 0x0401, pci_quirk_qcom_rp_acs },
5085+
/* QCOM SA8775P root port */
5086+
{ PCI_VENDOR_ID_QCOM, 0x0115, pci_quirk_qcom_rp_acs },
50835087
/* HXT SD4800 root ports. The ACS design is same as QCOM QDF2xxx */
50845088
{ PCI_VENDOR_ID_HXT, 0x0401, pci_quirk_qcom_rp_acs },
50855089
/* Intel PCH root ports */

drivers/remoteproc/imx_rproc.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,17 @@ static struct resource_table *imx_rproc_get_loaded_rsc_table(struct rproc *rproc
669669
return (struct resource_table *)priv->rsc_table;
670670
}
671671

672+
static struct resource_table *
673+
imx_rproc_elf_find_loaded_rsc_table(struct rproc *rproc, const struct firmware *fw)
674+
{
675+
struct imx_rproc *priv = rproc->priv;
676+
677+
if (priv->rsc_table)
678+
return (struct resource_table *)priv->rsc_table;
679+
680+
return rproc_elf_find_loaded_rsc_table(rproc, fw);
681+
}
682+
672683
static const struct rproc_ops imx_rproc_ops = {
673684
.prepare = imx_rproc_prepare,
674685
.attach = imx_rproc_attach,
@@ -679,7 +690,7 @@ static const struct rproc_ops imx_rproc_ops = {
679690
.da_to_va = imx_rproc_da_to_va,
680691
.load = rproc_elf_load_segments,
681692
.parse_fw = imx_rproc_parse_fw,
682-
.find_loaded_rsc_table = rproc_elf_find_loaded_rsc_table,
693+
.find_loaded_rsc_table = imx_rproc_elf_find_loaded_rsc_table,
683694
.get_loaded_rsc_table = imx_rproc_get_loaded_rsc_table,
684695
.sanity_check = rproc_elf_sanity_check,
685696
.get_boot_addr = rproc_elf_get_boot_addr,

drivers/scsi/lpfc/lpfc_ct.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,6 +1671,18 @@ lpfc_cmpl_ct(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
16711671
}
16721672

16731673
out:
1674+
/* If the caller wanted a synchronous DA_ID completion, signal the
1675+
* wait obj and clear flag to reset the vport.
1676+
*/
1677+
if (ndlp->save_flags & NLP_WAIT_FOR_DA_ID) {
1678+
if (ndlp->da_id_waitq)
1679+
wake_up(ndlp->da_id_waitq);
1680+
}
1681+
1682+
spin_lock_irq(&ndlp->lock);
1683+
ndlp->save_flags &= ~NLP_WAIT_FOR_DA_ID;
1684+
spin_unlock_irq(&ndlp->lock);
1685+
16741686
lpfc_ct_free_iocb(phba, cmdiocb);
16751687
lpfc_nlp_put(ndlp);
16761688
return;

drivers/scsi/lpfc/lpfc_disc.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ enum lpfc_nlp_save_flags {
9090
NLP_IN_RECOV_POST_DEV_LOSS = 0x1,
9191
/* wait for outstanding LOGO to cmpl */
9292
NLP_WAIT_FOR_LOGO = 0x2,
93+
/* wait for outstanding DA_ID to finish */
94+
NLP_WAIT_FOR_DA_ID = 0x4
9395
};
9496

9597
struct lpfc_nodelist {
@@ -159,7 +161,12 @@ struct lpfc_nodelist {
159161
uint32_t nvme_fb_size; /* NVME target's supported byte cnt */
160162
#define NVME_FB_BIT_SHIFT 9 /* PRLI Rsp first burst in 512B units. */
161163
uint32_t nlp_defer_did;
164+
165+
/* These wait objects are NPIV specific. These IOs must complete
166+
* synchronously.
167+
*/
162168
wait_queue_head_t *logo_waitq;
169+
wait_queue_head_t *da_id_waitq;
163170
};
164171

165172
struct lpfc_node_rrq {

0 commit comments

Comments
 (0)