Merge a4628a5b98 ("scsi: qla2xxx: Fix deletion race condition") into android11-5.4-lts
Steps on the way to 5.4.258 Change-Id: Id358cb1b301e9045091342516d5615c9d32cd696 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -1313,7 +1313,7 @@ static int h_24x7_event_init(struct perf_event *event)
|
||||
}
|
||||
|
||||
domain = event_get_domain(event);
|
||||
if (domain >= HV_PERF_DOMAIN_MAX) {
|
||||
if (domain == 0 || domain >= HV_PERF_DOMAIN_MAX) {
|
||||
pr_devel("invalid domain %d\n", domain);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
|
||||
handle_edge_irq, IRQ_NOREQUEST, IRQ_NOPROBE,
|
||||
IRQ_GC_INIT_MASK_CACHE);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_remove_domain;
|
||||
|
||||
gc = tb10x_gpio->domain->gc->gc[0];
|
||||
gc->reg_base = tb10x_gpio->base;
|
||||
@@ -209,6 +209,10 @@ static int tb10x_gpio_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_remove_domain:
|
||||
irq_domain_remove(tb10x_gpio->domain);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int tb10x_gpio_remove(struct platform_device *pdev)
|
||||
|
||||
@@ -243,6 +243,10 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)
|
||||
|
||||
props[i].name = devm_kstrdup(&pdev->dev, "status", GFP_KERNEL);
|
||||
props[i].value = devm_kstrdup(&pdev->dev, "ok", GFP_KERNEL);
|
||||
if (!props[i].name || !props[i].value) {
|
||||
err = -ENOMEM;
|
||||
goto err_rollback;
|
||||
}
|
||||
props[i].length = 3;
|
||||
|
||||
of_changeset_init(&priv->chan[i].chgset);
|
||||
|
||||
@@ -1184,6 +1184,13 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
|
||||
.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS |
|
||||
SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP)
|
||||
},
|
||||
/* See comment on TUXEDO InfinityBook S17 Gen6 / Clevo NS70MU above */
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "PD5x_7xPNP_PNR_PNN_PNT"),
|
||||
},
|
||||
.driver_data = (void *)(SERIO_QUIRK_NOAUX)
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "X170SM"),
|
||||
|
||||
@@ -2939,8 +2939,13 @@ static u32 hclge_check_event_cause(struct hclge_dev *hdev, u32 *clearval)
|
||||
static void hclge_clear_event_cause(struct hclge_dev *hdev, u32 event_type,
|
||||
u32 regclr)
|
||||
{
|
||||
#define HCLGE_IMP_RESET_DELAY 5
|
||||
|
||||
switch (event_type) {
|
||||
case HCLGE_VECTOR0_EVENT_RST:
|
||||
if (regclr == BIT(HCLGE_VECTOR0_IMPRESET_INT_B))
|
||||
mdelay(HCLGE_IMP_RESET_DELAY);
|
||||
|
||||
hclge_write_dev(&hdev->hw, HCLGE_MISC_RESET_STS_REG, regclr);
|
||||
break;
|
||||
case HCLGE_VECTOR0_EVENT_MBX:
|
||||
|
||||
@@ -889,7 +889,9 @@ i40e_status i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change)
|
||||
|
||||
ret = i40e_read_nvm_module_data(hw,
|
||||
I40E_SR_EMP_SR_SETTINGS_PTR,
|
||||
offset, 1,
|
||||
offset,
|
||||
I40E_LLDP_CURRENT_STATUS_OFFSET,
|
||||
I40E_LLDP_CURRENT_STATUS_SIZE,
|
||||
&lldp_cfg.adminstatus);
|
||||
} else {
|
||||
ret = i40e_read_lldp_cfg(hw, &lldp_cfg);
|
||||
|
||||
@@ -32,6 +32,9 @@
|
||||
#define I40E_CEE_MAX_FEAT_TYPE 3
|
||||
#define I40E_LLDP_CURRENT_STATUS_XL710_OFFSET 0x2B
|
||||
#define I40E_LLDP_CURRENT_STATUS_X722_OFFSET 0x31
|
||||
#define I40E_LLDP_CURRENT_STATUS_OFFSET 1
|
||||
#define I40E_LLDP_CURRENT_STATUS_SIZE 1
|
||||
|
||||
/* Defines for LLDP TLV header */
|
||||
#define I40E_LLDP_TLV_LEN_SHIFT 0
|
||||
#define I40E_LLDP_TLV_LEN_MASK (0x01FF << I40E_LLDP_TLV_LEN_SHIFT)
|
||||
|
||||
@@ -323,20 +323,24 @@ i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
|
||||
|
||||
/**
|
||||
* i40e_read_nvm_module_data - Reads NVM Buffer to specified memory location
|
||||
* @hw: pointer to the HW structure
|
||||
* @hw: Pointer to the HW structure
|
||||
* @module_ptr: Pointer to module in words with respect to NVM beginning
|
||||
* @offset: offset in words from module start
|
||||
* @module_offset: Offset in words from module start
|
||||
* @data_offset: Offset in words from reading data area start
|
||||
* @words_data_size: Words to read from NVM
|
||||
* @data_ptr: Pointer to memory location where resulting buffer will be stored
|
||||
**/
|
||||
i40e_status i40e_read_nvm_module_data(struct i40e_hw *hw,
|
||||
u8 module_ptr, u16 offset,
|
||||
u16 words_data_size,
|
||||
u16 *data_ptr)
|
||||
enum i40e_status_code i40e_read_nvm_module_data(struct i40e_hw *hw,
|
||||
u8 module_ptr,
|
||||
u16 module_offset,
|
||||
u16 data_offset,
|
||||
u16 words_data_size,
|
||||
u16 *data_ptr)
|
||||
{
|
||||
i40e_status status;
|
||||
u16 specific_ptr = 0;
|
||||
u16 ptr_value = 0;
|
||||
u32 flat_offset;
|
||||
u32 offset = 0;
|
||||
|
||||
if (module_ptr != 0) {
|
||||
status = i40e_read_nvm_word(hw, module_ptr, &ptr_value);
|
||||
@@ -352,36 +356,35 @@ i40e_status i40e_read_nvm_module_data(struct i40e_hw *hw,
|
||||
|
||||
/* Pointer not initialized */
|
||||
if (ptr_value == I40E_NVM_INVALID_PTR_VAL ||
|
||||
ptr_value == I40E_NVM_INVALID_VAL)
|
||||
ptr_value == I40E_NVM_INVALID_VAL) {
|
||||
i40e_debug(hw, I40E_DEBUG_ALL, "Pointer not initialized.\n");
|
||||
return I40E_ERR_BAD_PTR;
|
||||
}
|
||||
|
||||
/* Check whether the module is in SR mapped area or outside */
|
||||
if (ptr_value & I40E_PTR_TYPE) {
|
||||
/* Pointer points outside of the Shared RAM mapped area */
|
||||
ptr_value &= ~I40E_PTR_TYPE;
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Reading nvm data failed. Pointer points outside of the Shared RAM mapped area.\n");
|
||||
|
||||
/* PtrValue in 4kB units, need to convert to words */
|
||||
ptr_value /= 2;
|
||||
flat_offset = ((u32)ptr_value * 0x1000) + (u32)offset;
|
||||
status = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
|
||||
if (!status) {
|
||||
status = i40e_aq_read_nvm(hw, 0, 2 * flat_offset,
|
||||
2 * words_data_size,
|
||||
data_ptr, true, NULL);
|
||||
i40e_release_nvm(hw);
|
||||
if (status) {
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Reading nvm aq failed.Error code: %d.\n",
|
||||
status);
|
||||
return I40E_ERR_NVM;
|
||||
}
|
||||
} else {
|
||||
return I40E_ERR_NVM;
|
||||
}
|
||||
return I40E_ERR_PARAM;
|
||||
} else {
|
||||
/* Read from the Shadow RAM */
|
||||
status = i40e_read_nvm_buffer(hw, ptr_value + offset,
|
||||
&words_data_size, data_ptr);
|
||||
|
||||
status = i40e_read_nvm_word(hw, ptr_value + module_offset,
|
||||
&specific_ptr);
|
||||
if (status) {
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Reading nvm word failed.Error code: %d.\n",
|
||||
status);
|
||||
return I40E_ERR_NVM;
|
||||
}
|
||||
|
||||
offset = ptr_value + module_offset + specific_ptr +
|
||||
data_offset;
|
||||
|
||||
status = i40e_read_nvm_buffer(hw, offset, &words_data_size,
|
||||
data_ptr);
|
||||
if (status) {
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Reading nvm buffer failed.Error code: %d.\n",
|
||||
|
||||
@@ -315,10 +315,12 @@ i40e_status i40e_acquire_nvm(struct i40e_hw *hw,
|
||||
void i40e_release_nvm(struct i40e_hw *hw);
|
||||
i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
|
||||
u16 *data);
|
||||
i40e_status i40e_read_nvm_module_data(struct i40e_hw *hw,
|
||||
u8 module_ptr, u16 offset,
|
||||
u16 words_data_size,
|
||||
u16 *data_ptr);
|
||||
enum i40e_status_code i40e_read_nvm_module_data(struct i40e_hw *hw,
|
||||
u8 module_ptr,
|
||||
u16 module_offset,
|
||||
u16 data_offset,
|
||||
u16 words_data_size,
|
||||
u16 *data_ptr);
|
||||
i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
|
||||
u16 *words, u16 *data);
|
||||
i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw);
|
||||
|
||||
@@ -130,17 +130,18 @@ void i40e_vc_notify_vf_reset(struct i40e_vf *vf)
|
||||
/***********************misc routines*****************************/
|
||||
|
||||
/**
|
||||
* i40e_vc_disable_vf
|
||||
* i40e_vc_reset_vf
|
||||
* @vf: pointer to the VF info
|
||||
*
|
||||
* Disable the VF through a SW reset.
|
||||
* @notify_vf: notify vf about reset or not
|
||||
* Reset VF handler.
|
||||
**/
|
||||
static inline void i40e_vc_disable_vf(struct i40e_vf *vf)
|
||||
static void i40e_vc_reset_vf(struct i40e_vf *vf, bool notify_vf)
|
||||
{
|
||||
struct i40e_pf *pf = vf->pf;
|
||||
int i;
|
||||
|
||||
i40e_vc_notify_vf_reset(vf);
|
||||
if (notify_vf)
|
||||
i40e_vc_notify_vf_reset(vf);
|
||||
|
||||
/* We want to ensure that an actual reset occurs initiated after this
|
||||
* function was called. However, we do not want to wait forever, so
|
||||
@@ -158,9 +159,14 @@ static inline void i40e_vc_disable_vf(struct i40e_vf *vf)
|
||||
usleep_range(10000, 20000);
|
||||
}
|
||||
|
||||
dev_warn(&vf->pf->pdev->dev,
|
||||
"Failed to initiate reset for VF %d after 200 milliseconds\n",
|
||||
vf->vf_id);
|
||||
if (notify_vf)
|
||||
dev_warn(&vf->pf->pdev->dev,
|
||||
"Failed to initiate reset for VF %d after 200 milliseconds\n",
|
||||
vf->vf_id);
|
||||
else
|
||||
dev_dbg(&vf->pf->pdev->dev,
|
||||
"Failed to initiate reset for VF %d after 200 milliseconds\n",
|
||||
vf->vf_id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1110,7 +1116,139 @@ static int i40e_quiesce_vf_pci(struct i40e_vf *vf)
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static inline int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi);
|
||||
/**
|
||||
* i40e_getnum_vf_vsi_vlan_filters
|
||||
* @vsi: pointer to the vsi
|
||||
*
|
||||
* called to get the number of VLANs offloaded on this VF
|
||||
**/
|
||||
static int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi)
|
||||
{
|
||||
struct i40e_mac_filter *f;
|
||||
int num_vlans = 0, bkt;
|
||||
|
||||
hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
|
||||
if (f->vlan >= 0 && f->vlan <= I40E_MAX_VLANID)
|
||||
num_vlans++;
|
||||
}
|
||||
|
||||
return num_vlans;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_get_vlan_list_sync
|
||||
* @vsi: pointer to the VSI
|
||||
* @num_vlans: number of VLANs in mac_filter_hash, returned to caller
|
||||
* @vlan_list: list of VLANs present in mac_filter_hash, returned to caller.
|
||||
* This array is allocated here, but has to be freed in caller.
|
||||
*
|
||||
* Called to get number of VLANs and VLAN list present in mac_filter_hash.
|
||||
**/
|
||||
static void i40e_get_vlan_list_sync(struct i40e_vsi *vsi, int *num_vlans,
|
||||
s16 **vlan_list)
|
||||
{
|
||||
struct i40e_mac_filter *f;
|
||||
int i = 0;
|
||||
int bkt;
|
||||
|
||||
spin_lock_bh(&vsi->mac_filter_hash_lock);
|
||||
*num_vlans = i40e_getnum_vf_vsi_vlan_filters(vsi);
|
||||
*vlan_list = kcalloc(*num_vlans, sizeof(**vlan_list), GFP_ATOMIC);
|
||||
if (!(*vlan_list))
|
||||
goto err;
|
||||
|
||||
hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
|
||||
if (f->vlan < 0 || f->vlan > I40E_MAX_VLANID)
|
||||
continue;
|
||||
(*vlan_list)[i++] = f->vlan;
|
||||
}
|
||||
err:
|
||||
spin_unlock_bh(&vsi->mac_filter_hash_lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_set_vsi_promisc
|
||||
* @vf: pointer to the VF struct
|
||||
* @seid: VSI number
|
||||
* @multi_enable: set MAC L2 layer multicast promiscuous enable/disable
|
||||
* for a given VLAN
|
||||
* @unicast_enable: set MAC L2 layer unicast promiscuous enable/disable
|
||||
* for a given VLAN
|
||||
* @vl: List of VLANs - apply filter for given VLANs
|
||||
* @num_vlans: Number of elements in @vl
|
||||
**/
|
||||
static i40e_status
|
||||
i40e_set_vsi_promisc(struct i40e_vf *vf, u16 seid, bool multi_enable,
|
||||
bool unicast_enable, s16 *vl, int num_vlans)
|
||||
{
|
||||
struct i40e_pf *pf = vf->pf;
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
i40e_status aq_ret;
|
||||
int i;
|
||||
|
||||
/* No VLAN to set promisc on, set on VSI */
|
||||
if (!num_vlans || !vl) {
|
||||
aq_ret = i40e_aq_set_vsi_multicast_promiscuous(hw, seid,
|
||||
multi_enable,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set multicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
aq_ret = i40e_aq_set_vsi_unicast_promiscuous(hw, seid,
|
||||
unicast_enable,
|
||||
NULL, true);
|
||||
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set unicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_vlans; i++) {
|
||||
aq_ret = i40e_aq_set_vsi_mc_promisc_on_vlan(hw, seid,
|
||||
multi_enable,
|
||||
vl[i], NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set multicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
|
||||
aq_ret = i40e_aq_set_vsi_uc_promisc_on_vlan(hw, seid,
|
||||
unicast_enable,
|
||||
vl[i], NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set unicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
}
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_config_vf_promiscuous_mode
|
||||
@@ -1127,108 +1265,35 @@ static i40e_status i40e_config_vf_promiscuous_mode(struct i40e_vf *vf,
|
||||
bool allmulti,
|
||||
bool alluni)
|
||||
{
|
||||
i40e_status aq_ret = I40E_SUCCESS;
|
||||
struct i40e_pf *pf = vf->pf;
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
struct i40e_mac_filter *f;
|
||||
i40e_status aq_ret = 0;
|
||||
struct i40e_vsi *vsi;
|
||||
int bkt;
|
||||
int num_vlans;
|
||||
s16 *vl;
|
||||
|
||||
vsi = i40e_find_vsi_from_id(pf, vsi_id);
|
||||
if (!i40e_vc_isvalid_vsi_id(vf, vsi_id) || !vsi)
|
||||
return I40E_ERR_PARAM;
|
||||
|
||||
if (vf->port_vlan_id) {
|
||||
aq_ret = i40e_aq_set_vsi_mc_promisc_on_vlan(hw, vsi->seid,
|
||||
allmulti,
|
||||
vf->port_vlan_id,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set multicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
aq_ret = i40e_aq_set_vsi_uc_promisc_on_vlan(hw, vsi->seid,
|
||||
alluni,
|
||||
vf->port_vlan_id,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set unicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
aq_ret = i40e_set_vsi_promisc(vf, vsi->seid, allmulti,
|
||||
alluni, &vf->port_vlan_id, 1);
|
||||
return aq_ret;
|
||||
} else if (i40e_getnum_vf_vsi_vlan_filters(vsi)) {
|
||||
hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
|
||||
if (f->vlan < 0 || f->vlan > I40E_MAX_VLANID)
|
||||
continue;
|
||||
aq_ret = i40e_aq_set_vsi_mc_promisc_on_vlan(hw,
|
||||
vsi->seid,
|
||||
allmulti,
|
||||
f->vlan,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
i40e_get_vlan_list_sync(vsi, &num_vlans, &vl);
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"Could not add VLAN %d to multicast promiscuous domain err %s aq_err %s\n",
|
||||
f->vlan,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
if (!vl)
|
||||
return I40E_ERR_NO_MEMORY;
|
||||
|
||||
aq_ret = i40e_aq_set_vsi_uc_promisc_on_vlan(hw,
|
||||
vsi->seid,
|
||||
alluni,
|
||||
f->vlan,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"Could not add VLAN %d to Unicast promiscuous domain err %s aq_err %s\n",
|
||||
f->vlan,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
}
|
||||
return aq_ret;
|
||||
}
|
||||
aq_ret = i40e_aq_set_vsi_multicast_promiscuous(hw, vsi->seid, allmulti,
|
||||
NULL);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set multicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
aq_ret = i40e_set_vsi_promisc(vf, vsi->seid, allmulti, alluni,
|
||||
vl, num_vlans);
|
||||
kfree(vl);
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
aq_ret = i40e_aq_set_vsi_unicast_promiscuous(hw, vsi->seid, alluni,
|
||||
NULL, true);
|
||||
if (aq_ret) {
|
||||
int aq_err = pf->hw.aq.asq_last_status;
|
||||
|
||||
dev_err(&pf->pdev->dev,
|
||||
"VF %d failed to set unicast promiscuous mode err %s aq_err %s\n",
|
||||
vf->vf_id,
|
||||
i40e_stat_str(&pf->hw, aq_ret),
|
||||
i40e_aq_str(&pf->hw, aq_err));
|
||||
}
|
||||
|
||||
/* no VLANs to set on, set on VSI */
|
||||
aq_ret = i40e_set_vsi_promisc(vf, vsi->seid, allmulti, alluni,
|
||||
NULL, 0);
|
||||
return aq_ret;
|
||||
}
|
||||
|
||||
@@ -2038,39 +2103,6 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_vc_reset_vf_msg
|
||||
* @vf: pointer to the VF info
|
||||
*
|
||||
* called from the VF to reset itself,
|
||||
* unlike other virtchnl messages, PF driver
|
||||
* doesn't send the response back to the VF
|
||||
**/
|
||||
static void i40e_vc_reset_vf_msg(struct i40e_vf *vf)
|
||||
{
|
||||
if (test_bit(I40E_VF_STATE_ACTIVE, &vf->vf_states))
|
||||
i40e_reset_vf(vf, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_getnum_vf_vsi_vlan_filters
|
||||
* @vsi: pointer to the vsi
|
||||
*
|
||||
* called to get the number of VLANs offloaded on this VF
|
||||
**/
|
||||
static inline int i40e_getnum_vf_vsi_vlan_filters(struct i40e_vsi *vsi)
|
||||
{
|
||||
struct i40e_mac_filter *f;
|
||||
int num_vlans = 0, bkt;
|
||||
|
||||
hash_for_each(vsi->mac_filter_hash, bkt, f, hlist) {
|
||||
if (f->vlan >= 0 && f->vlan <= I40E_MAX_VLANID)
|
||||
num_vlans++;
|
||||
}
|
||||
|
||||
return num_vlans;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_vc_config_promiscuous_mode_msg
|
||||
* @vf: pointer to the VF info
|
||||
@@ -2624,8 +2656,7 @@ static int i40e_vc_request_queues_msg(struct i40e_vf *vf, u8 *msg)
|
||||
} else {
|
||||
/* successful request */
|
||||
vf->num_req_queues = req_pairs;
|
||||
i40e_vc_notify_vf_reset(vf);
|
||||
i40e_reset_vf(vf, false);
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3817,8 +3848,7 @@ static int i40e_vc_add_qch_msg(struct i40e_vf *vf, u8 *msg)
|
||||
vf->adq_enabled = true;
|
||||
|
||||
/* reset the VF in order to allocate resources */
|
||||
i40e_vc_notify_vf_reset(vf);
|
||||
i40e_reset_vf(vf, false);
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
|
||||
return I40E_SUCCESS;
|
||||
|
||||
@@ -3858,8 +3888,7 @@ static int i40e_vc_del_qch_msg(struct i40e_vf *vf, u8 *msg)
|
||||
}
|
||||
|
||||
/* reset the VF in order to allocate resources */
|
||||
i40e_vc_notify_vf_reset(vf);
|
||||
i40e_reset_vf(vf, false);
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
|
||||
return I40E_SUCCESS;
|
||||
|
||||
@@ -3921,7 +3950,7 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
|
||||
i40e_vc_notify_vf_link_state(vf);
|
||||
break;
|
||||
case VIRTCHNL_OP_RESET_VF:
|
||||
i40e_vc_reset_vf_msg(vf);
|
||||
i40e_vc_reset_vf(vf, false);
|
||||
ret = 0;
|
||||
break;
|
||||
case VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE:
|
||||
@@ -4175,7 +4204,7 @@ int i40e_ndo_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
|
||||
/* Force the VF interface down so it has to bring up with new MAC
|
||||
* address
|
||||
*/
|
||||
i40e_vc_disable_vf(vf);
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
dev_info(&pf->pdev->dev, "Bring down and up the VF interface to make this change effective.\n");
|
||||
|
||||
error_param:
|
||||
@@ -4239,9 +4268,6 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id,
|
||||
/* duplicate request, so just return success */
|
||||
goto error_pvid;
|
||||
|
||||
i40e_vc_disable_vf(vf);
|
||||
/* During reset the VF got a new VSI, so refresh a pointer. */
|
||||
vsi = pf->vsi[vf->lan_vsi_idx];
|
||||
/* Locked once because multiple functions below iterate list */
|
||||
spin_lock_bh(&vsi->mac_filter_hash_lock);
|
||||
|
||||
@@ -4327,6 +4353,10 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev, int vf_id,
|
||||
*/
|
||||
vf->port_vlan_id = le16_to_cpu(vsi->info.pvid);
|
||||
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
/* During reset the VF got a new VSI, so refresh a pointer. */
|
||||
vsi = pf->vsi[vf->lan_vsi_idx];
|
||||
|
||||
ret = i40e_config_vf_promiscuous_mode(vf, vsi->id, allmulti, alluni);
|
||||
if (ret) {
|
||||
dev_err(&pf->pdev->dev, "Unable to config vf promiscuous mode\n");
|
||||
@@ -4622,7 +4652,7 @@ int i40e_ndo_set_vf_trust(struct net_device *netdev, int vf_id, bool setting)
|
||||
goto out;
|
||||
|
||||
vf->trusted = setting;
|
||||
i40e_vc_disable_vf(vf);
|
||||
i40e_vc_reset_vf(vf, true);
|
||||
dev_info(&pf->pdev->dev, "VF %u is now %strusted\n",
|
||||
vf_id, setting ? "" : "un");
|
||||
|
||||
|
||||
@@ -2121,7 +2121,12 @@ static const struct ethtool_ops team_ethtool_ops = {
|
||||
static void team_setup_by_port(struct net_device *dev,
|
||||
struct net_device *port_dev)
|
||||
{
|
||||
dev->header_ops = port_dev->header_ops;
|
||||
struct team *team = netdev_priv(dev);
|
||||
|
||||
if (port_dev->type == ARPHRD_ETHER)
|
||||
dev->header_ops = team->header_ops_cache;
|
||||
else
|
||||
dev->header_ops = port_dev->header_ops;
|
||||
dev->type = port_dev->type;
|
||||
dev->hard_header_len = port_dev->hard_header_len;
|
||||
dev->needed_headroom = port_dev->needed_headroom;
|
||||
@@ -2168,8 +2173,11 @@ static int team_dev_type_check_change(struct net_device *dev,
|
||||
|
||||
static void team_setup(struct net_device *dev)
|
||||
{
|
||||
struct team *team = netdev_priv(dev);
|
||||
|
||||
ether_setup(dev);
|
||||
dev->max_mtu = ETH_MAX_MTU;
|
||||
team->header_ops_cache = dev->header_ops;
|
||||
|
||||
dev->netdev_ops = &team_netdev_ops;
|
||||
dev->ethtool_ops = &team_ethtool_ops;
|
||||
|
||||
@@ -485,6 +485,7 @@ static
|
||||
void qla24xx_handle_adisc_event(scsi_qla_host_t *vha, struct event_arg *ea)
|
||||
{
|
||||
struct fc_port *fcport = ea->fcport;
|
||||
unsigned long flags;
|
||||
|
||||
ql_dbg(ql_dbg_disc, vha, 0x20d2,
|
||||
"%s %8phC DS %d LS %d rc %d login %d|%d rscn %d|%d lid %d\n",
|
||||
@@ -499,9 +500,15 @@ void qla24xx_handle_adisc_event(scsi_qla_host_t *vha, struct event_arg *ea)
|
||||
ql_dbg(ql_dbg_disc, vha, 0x2066,
|
||||
"%s %8phC: adisc fail: post delete\n",
|
||||
__func__, ea->fcport->port_name);
|
||||
|
||||
spin_lock_irqsave(&vha->work_lock, flags);
|
||||
/* deleted = 0 & logout_on_delete = force fw cleanup */
|
||||
fcport->deleted = 0;
|
||||
if (fcport->deleted == QLA_SESS_DELETED)
|
||||
fcport->deleted = 0;
|
||||
|
||||
fcport->logout_on_delete = 1;
|
||||
spin_unlock_irqrestore(&vha->work_lock, flags);
|
||||
|
||||
qlt_schedule_sess_for_deletion(ea->fcport);
|
||||
return;
|
||||
}
|
||||
@@ -1402,7 +1409,6 @@ void __qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea)
|
||||
|
||||
spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags);
|
||||
ea->fcport->login_gen++;
|
||||
ea->fcport->deleted = 0;
|
||||
ea->fcport->logout_on_delete = 1;
|
||||
|
||||
if (!ea->fcport->login_succ && !IS_SW_RESV_ADDR(ea->fcport->d_id)) {
|
||||
@@ -5475,6 +5481,8 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
void
|
||||
qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (IS_SW_RESV_ADDR(fcport->d_id))
|
||||
return;
|
||||
|
||||
@@ -5484,8 +5492,15 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
|
||||
qla2x00_set_fcport_disc_state(fcport, DSC_UPD_FCPORT);
|
||||
fcport->login_retry = vha->hw->login_retry_count;
|
||||
fcport->flags &= ~(FCF_LOGIN_NEEDED | FCF_ASYNC_SENT);
|
||||
|
||||
spin_lock_irqsave(&vha->work_lock, flags);
|
||||
fcport->deleted = 0;
|
||||
fcport->logout_on_delete = 1;
|
||||
spin_unlock_irqrestore(&vha->work_lock, flags);
|
||||
|
||||
if (vha->hw->current_topology == ISP_CFG_NL)
|
||||
fcport->logout_on_delete = 0;
|
||||
else
|
||||
fcport->logout_on_delete = 1;
|
||||
fcport->n2n_chip_reset = fcport->n2n_link_reset_cnt = 0;
|
||||
|
||||
switch (vha->hw->current_topology) {
|
||||
|
||||
@@ -1046,10 +1046,6 @@ void qlt_free_session_done(struct work_struct *work)
|
||||
(struct imm_ntfy_from_isp *)sess->iocb, SRB_NACK_LOGO);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&vha->work_lock, flags);
|
||||
sess->flags &= ~FCF_ASYNC_SENT;
|
||||
spin_unlock_irqrestore(&vha->work_lock, flags);
|
||||
|
||||
spin_lock_irqsave(&ha->tgt.sess_lock, flags);
|
||||
if (sess->se_sess) {
|
||||
sess->se_sess = NULL;
|
||||
@@ -1059,7 +1055,6 @@ void qlt_free_session_done(struct work_struct *work)
|
||||
|
||||
qla2x00_set_fcport_disc_state(sess, DSC_DELETED);
|
||||
sess->fw_login_state = DSC_LS_PORT_UNAVAIL;
|
||||
sess->deleted = QLA_SESS_DELETED;
|
||||
|
||||
if (sess->login_succ && !IS_SW_RESV_ADDR(sess->d_id)) {
|
||||
vha->fcport_count--;
|
||||
@@ -1111,7 +1106,12 @@ void qlt_free_session_done(struct work_struct *work)
|
||||
|
||||
sess->explicit_logout = 0;
|
||||
spin_unlock_irqrestore(&ha->tgt.sess_lock, flags);
|
||||
|
||||
spin_lock_irqsave(&vha->work_lock, flags);
|
||||
sess->flags &= ~FCF_ASYNC_SENT;
|
||||
sess->deleted = QLA_SESS_DELETED;
|
||||
sess->free_pending = 0;
|
||||
spin_unlock_irqrestore(&vha->work_lock, flags);
|
||||
|
||||
ql_dbg(ql_dbg_disc, vha, 0xf001,
|
||||
"Unregistration of sess %p %8phC finished fcp_cnt %d\n",
|
||||
@@ -1161,12 +1161,12 @@ void qlt_unreg_sess(struct fc_port *sess)
|
||||
* management from being sent.
|
||||
*/
|
||||
sess->flags |= FCF_ASYNC_SENT;
|
||||
sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
|
||||
spin_unlock_irqrestore(&sess->vha->work_lock, flags);
|
||||
|
||||
if (sess->se_sess)
|
||||
vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess);
|
||||
|
||||
sess->deleted = QLA_SESS_DELETION_IN_PROGRESS;
|
||||
qla2x00_set_fcport_disc_state(sess, DSC_DELETE_PEND);
|
||||
sess->last_rscn_gen = sess->rscn_gen;
|
||||
sess->last_login_gen = sess->login_gen;
|
||||
|
||||
@@ -192,6 +192,8 @@ struct team {
|
||||
struct net_device *dev; /* associated netdevice */
|
||||
struct team_pcpu_stats __percpu *pcpu_stats;
|
||||
|
||||
const struct header_ops *header_ops_cache;
|
||||
|
||||
struct mutex lock; /* used for overall locking, e.g. port lists write */
|
||||
|
||||
/*
|
||||
|
||||
@@ -118,7 +118,12 @@ static int __queue_map_get(struct bpf_map *map, void *value, bool delete)
|
||||
int err = 0;
|
||||
void *ptr;
|
||||
|
||||
raw_spin_lock_irqsave(&qs->lock, flags);
|
||||
if (in_nmi()) {
|
||||
if (!raw_spin_trylock_irqsave(&qs->lock, flags))
|
||||
return -EBUSY;
|
||||
} else {
|
||||
raw_spin_lock_irqsave(&qs->lock, flags);
|
||||
}
|
||||
|
||||
if (queue_stack_map_is_empty(qs)) {
|
||||
memset(value, 0, qs->map.value_size);
|
||||
@@ -148,7 +153,12 @@ static int __stack_map_get(struct bpf_map *map, void *value, bool delete)
|
||||
void *ptr;
|
||||
u32 index;
|
||||
|
||||
raw_spin_lock_irqsave(&qs->lock, flags);
|
||||
if (in_nmi()) {
|
||||
if (!raw_spin_trylock_irqsave(&qs->lock, flags))
|
||||
return -EBUSY;
|
||||
} else {
|
||||
raw_spin_lock_irqsave(&qs->lock, flags);
|
||||
}
|
||||
|
||||
if (queue_stack_map_is_empty(qs)) {
|
||||
memset(value, 0, qs->map.value_size);
|
||||
@@ -213,7 +223,12 @@ static int queue_stack_map_push_elem(struct bpf_map *map, void *value,
|
||||
if (flags & BPF_NOEXIST || flags > BPF_EXIST)
|
||||
return -EINVAL;
|
||||
|
||||
raw_spin_lock_irqsave(&qs->lock, irq_flags);
|
||||
if (in_nmi()) {
|
||||
if (!raw_spin_trylock_irqsave(&qs->lock, irq_flags))
|
||||
return -EBUSY;
|
||||
} else {
|
||||
raw_spin_lock_irqsave(&qs->lock, irq_flags);
|
||||
}
|
||||
|
||||
if (queue_stack_map_is_full(qs)) {
|
||||
if (!replace) {
|
||||
|
||||
@@ -118,7 +118,7 @@ static int deliver_clone(const struct net_bridge_port *prev,
|
||||
|
||||
skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!skb) {
|
||||
dev->stats.tx_dropped++;
|
||||
DEV_STATS_INC(dev, tx_dropped);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ static void maybe_deliver_addr(struct net_bridge_port *p, struct sk_buff *skb,
|
||||
|
||||
skb = skb_copy(skb, GFP_ATOMIC);
|
||||
if (!skb) {
|
||||
dev->stats.tx_dropped++;
|
||||
DEV_STATS_INC(dev, tx_dropped);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,12 +141,12 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb
|
||||
if ((mdst && mdst->host_joined) ||
|
||||
br_multicast_is_router(br)) {
|
||||
local_rcv = true;
|
||||
br->dev->stats.multicast++;
|
||||
DEV_STATS_INC(br->dev, multicast);
|
||||
}
|
||||
mcast_hit = true;
|
||||
} else {
|
||||
local_rcv = true;
|
||||
br->dev->stats.multicast++;
|
||||
DEV_STATS_INC(br->dev, multicast);
|
||||
}
|
||||
break;
|
||||
case BR_PKT_UNICAST:
|
||||
|
||||
@@ -243,13 +243,8 @@ static int dccp_v4_err(struct sk_buff *skb, u32 info)
|
||||
int err;
|
||||
struct net *net = dev_net(skb->dev);
|
||||
|
||||
/* For the first __dccp_basic_hdr_len() check, we only need dh->dccph_x,
|
||||
* which is in byte 7 of the dccp header.
|
||||
* Our caller (icmp_socket_deliver()) already pulled 8 bytes for us.
|
||||
*
|
||||
* Later on, we want to access the sequence number fields, which are
|
||||
* beyond 8 bytes, so we have to pskb_may_pull() ourselves.
|
||||
*/
|
||||
if (!pskb_may_pull(skb, offset + sizeof(*dh)))
|
||||
return -EINVAL;
|
||||
dh = (struct dccp_hdr *)(skb->data + offset);
|
||||
if (!pskb_may_pull(skb, offset + __dccp_basic_hdr_len(dh)))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -76,13 +76,8 @@ static int dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
||||
__u64 seq;
|
||||
struct net *net = dev_net(skb->dev);
|
||||
|
||||
/* For the first __dccp_basic_hdr_len() check, we only need dh->dccph_x,
|
||||
* which is in byte 7 of the dccp header.
|
||||
* Our caller (icmpv6_notify()) already pulled 8 bytes for us.
|
||||
*
|
||||
* Later on, we want to access the sequence number fields, which are
|
||||
* beyond 8 bytes, so we have to pskb_may_pull() ourselves.
|
||||
*/
|
||||
if (!pskb_may_pull(skb, offset + sizeof(*dh)))
|
||||
return -EINVAL;
|
||||
dh = (struct dccp_hdr *)(skb->data + offset);
|
||||
if (!pskb_may_pull(skb, offset + __dccp_basic_hdr_len(dh)))
|
||||
return -EINVAL;
|
||||
|
||||
@@ -1221,6 +1221,7 @@ static struct dst_entry *ipv4_dst_check(struct dst_entry *dst, u32 cookie)
|
||||
|
||||
static void ipv4_send_dest_unreach(struct sk_buff *skb)
|
||||
{
|
||||
struct net_device *dev;
|
||||
struct ip_options opt;
|
||||
int res;
|
||||
|
||||
@@ -1238,7 +1239,8 @@ static void ipv4_send_dest_unreach(struct sk_buff *skb)
|
||||
opt.optlen = ip_hdr(skb)->ihl * 4 - sizeof(struct iphdr);
|
||||
|
||||
rcu_read_lock();
|
||||
res = __ip_options_compile(dev_net(skb->dev), &opt, skb, NULL);
|
||||
dev = skb->dev ? skb->dev : skb_rtable(skb)->dst.dev;
|
||||
res = __ip_options_compile(dev_net(dev), &opt, skb, NULL);
|
||||
rcu_read_unlock();
|
||||
|
||||
if (res)
|
||||
|
||||
@@ -530,6 +530,14 @@ __ip_set_put(struct ip_set *set)
|
||||
/* set->ref can be swapped out by ip_set_swap, netlink events (like dump) need
|
||||
* a separate reference counter
|
||||
*/
|
||||
static void
|
||||
__ip_set_get_netlink(struct ip_set *set)
|
||||
{
|
||||
write_lock_bh(&ip_set_ref_lock);
|
||||
set->ref_netlink++;
|
||||
write_unlock_bh(&ip_set_ref_lock);
|
||||
}
|
||||
|
||||
static inline void
|
||||
__ip_set_put_netlink(struct ip_set *set)
|
||||
{
|
||||
@@ -1529,11 +1537,11 @@ call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
|
||||
|
||||
do {
|
||||
if (retried) {
|
||||
__ip_set_get(set);
|
||||
__ip_set_get_netlink(set);
|
||||
nfnl_unlock(NFNL_SUBSYS_IPSET);
|
||||
cond_resched();
|
||||
nfnl_lock(NFNL_SUBSYS_IPSET);
|
||||
__ip_set_put(set);
|
||||
__ip_set_put_netlink(set);
|
||||
}
|
||||
|
||||
ip_set_lock(set);
|
||||
|
||||
@@ -1047,8 +1047,7 @@ static int nft_flush_table(struct nft_ctx *ctx)
|
||||
if (!nft_is_active_next(ctx->net, set))
|
||||
continue;
|
||||
|
||||
if (nft_set_is_anonymous(set) &&
|
||||
!list_empty(&set->bindings))
|
||||
if (nft_set_is_anonymous(set))
|
||||
continue;
|
||||
|
||||
err = nft_delset(ctx, set);
|
||||
@@ -5066,8 +5065,10 @@ static int nf_tables_delsetelem(struct net *net, struct sock *nlsk,
|
||||
if (IS_ERR(set))
|
||||
return PTR_ERR(set);
|
||||
|
||||
if (!list_empty(&set->bindings) &&
|
||||
(set->flags & (NFT_SET_CONSTANT | NFT_SET_ANONYMOUS)))
|
||||
if (nft_set_is_anonymous(set))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!list_empty(&set->bindings) && (set->flags & NFT_SET_CONSTANT))
|
||||
return -EBUSY;
|
||||
|
||||
if (nla[NFTA_SET_ELEM_LIST_ELEMENTS] == NULL) {
|
||||
|
||||
@@ -86,10 +86,12 @@ static int rds_rdma_cm_event_handler_cmn(struct rdma_cm_id *cm_id,
|
||||
break;
|
||||
|
||||
case RDMA_CM_EVENT_ADDR_RESOLVED:
|
||||
rdma_set_service_type(cm_id, conn->c_tos);
|
||||
/* XXX do we need to clean up if this fails? */
|
||||
ret = rdma_resolve_route(cm_id,
|
||||
if (conn) {
|
||||
rdma_set_service_type(cm_id, conn->c_tos);
|
||||
/* XXX do we need to clean up if this fails? */
|
||||
ret = rdma_resolve_route(cm_id,
|
||||
RDS_RDMA_RESOLVE_TIMEOUT_MS);
|
||||
}
|
||||
break;
|
||||
|
||||
case RDMA_CM_EVENT_ROUTE_RESOLVED:
|
||||
|
||||
@@ -322,7 +322,7 @@ static int imx_audmix_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(priv->cpu_mclk)) {
|
||||
ret = PTR_ERR(priv->cpu_mclk);
|
||||
dev_err(&cpu_pdev->dev, "failed to get DAI mclk1: %d\n", ret);
|
||||
return -EINVAL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
priv->audmix_pdev = audmix_pdev;
|
||||
|
||||
@@ -311,11 +311,12 @@ TEST_F(tls, sendmsg_large)
|
||||
|
||||
msg.msg_iov = &vec;
|
||||
msg.msg_iovlen = 1;
|
||||
EXPECT_EQ(sendmsg(self->cfd, &msg, 0), send_len);
|
||||
EXPECT_EQ(sendmsg(self->fd, &msg, 0), send_len);
|
||||
}
|
||||
|
||||
while (recvs++ < sends)
|
||||
EXPECT_NE(recv(self->fd, mem, send_len, 0), -1);
|
||||
while (recvs++ < sends) {
|
||||
EXPECT_NE(recv(self->cfd, mem, send_len, 0), -1);
|
||||
}
|
||||
|
||||
free(mem);
|
||||
}
|
||||
@@ -343,9 +344,9 @@ TEST_F(tls, sendmsg_multiple)
|
||||
msg.msg_iov = vec;
|
||||
msg.msg_iovlen = iov_len;
|
||||
|
||||
EXPECT_EQ(sendmsg(self->cfd, &msg, 0), total_len);
|
||||
EXPECT_EQ(sendmsg(self->fd, &msg, 0), total_len);
|
||||
buf = malloc(total_len);
|
||||
EXPECT_NE(recv(self->fd, buf, total_len, 0), -1);
|
||||
EXPECT_NE(recv(self->cfd, buf, total_len, 0), -1);
|
||||
for (i = 0; i < iov_len; i++) {
|
||||
EXPECT_EQ(memcmp(test_strs[i], buf + len_cmp,
|
||||
strlen(test_strs[i])),
|
||||
|
||||
Reference in New Issue
Block a user