Merge 0c813dbc85 ("calipso: Don't call calipso functions for AF_INET sk.") into android12-5.10-lts
Steps on the way to 5.10.239 Change-Id: I365a1b8522476c7b8304358c652b4aeac48b9213 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -800,7 +800,7 @@ static void __init mac_identify(void)
|
||||
}
|
||||
|
||||
macintosh_config = mac_data_table;
|
||||
for (m = macintosh_config; m->ident != -1; m++) {
|
||||
for (m = &mac_data_table[1]; m->ident != -1; m++) {
|
||||
if (m->ident == model) {
|
||||
macintosh_config = m;
|
||||
break;
|
||||
|
||||
@@ -543,17 +543,15 @@ static void bpf_jit_prologue(struct bpf_jit *jit, u32 stack_depth)
|
||||
}
|
||||
/* Setup stack and backchain */
|
||||
if (is_first_pass(jit) || (jit->seen & SEEN_STACK)) {
|
||||
if (is_first_pass(jit) || (jit->seen & SEEN_FUNC))
|
||||
/* lgr %w1,%r15 (backchain) */
|
||||
EMIT4(0xb9040000, REG_W1, REG_15);
|
||||
/* lgr %w1,%r15 (backchain) */
|
||||
EMIT4(0xb9040000, REG_W1, REG_15);
|
||||
/* la %bfp,STK_160_UNUSED(%r15) (BPF frame pointer) */
|
||||
EMIT4_DISP(0x41000000, BPF_REG_FP, REG_15, STK_160_UNUSED);
|
||||
/* aghi %r15,-STK_OFF */
|
||||
EMIT4_IMM(0xa70b0000, REG_15, -(STK_OFF + stack_depth));
|
||||
if (is_first_pass(jit) || (jit->seen & SEEN_FUNC))
|
||||
/* stg %w1,152(%r15) (backchain) */
|
||||
EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,
|
||||
REG_15, 152);
|
||||
/* stg %w1,152(%r15) (backchain) */
|
||||
EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,
|
||||
REG_15, 152);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -931,17 +931,18 @@ void get_cpu_cap(struct cpuinfo_x86 *c)
|
||||
c->x86_capability[CPUID_D_1_EAX] = eax;
|
||||
}
|
||||
|
||||
/* AMD-defined flags: level 0x80000001 */
|
||||
/*
|
||||
* Check if extended CPUID leaves are implemented: Max extended
|
||||
* CPUID leaf must be in the 0x80000001-0x8000ffff range.
|
||||
*/
|
||||
eax = cpuid_eax(0x80000000);
|
||||
c->extended_cpuid_level = eax;
|
||||
c->extended_cpuid_level = ((eax & 0xffff0000) == 0x80000000) ? eax : 0;
|
||||
|
||||
if ((eax & 0xffff0000) == 0x80000000) {
|
||||
if (eax >= 0x80000001) {
|
||||
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
|
||||
if (c->extended_cpuid_level >= 0x80000001) {
|
||||
cpuid(0x80000001, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
c->x86_capability[CPUID_8000_0001_ECX] = ecx;
|
||||
c->x86_capability[CPUID_8000_0001_EDX] = edx;
|
||||
}
|
||||
c->x86_capability[CPUID_8000_0001_ECX] = ecx;
|
||||
c->x86_capability[CPUID_8000_0001_EDX] = edx;
|
||||
}
|
||||
|
||||
if (c->extended_cpuid_level >= 0x80000007) {
|
||||
|
||||
@@ -350,7 +350,7 @@ static void get_fixed_ranges(mtrr_type *frs)
|
||||
|
||||
void mtrr_save_fixed_ranges(void *info)
|
||||
{
|
||||
if (boot_cpu_has(X86_FEATURE_MTRR))
|
||||
if (mtrr_state.have_fixed)
|
||||
get_fixed_ranges(mtrr_state.fixed_ranges);
|
||||
}
|
||||
|
||||
|
||||
@@ -322,7 +322,7 @@ static int lrw_create(struct crypto_template *tmpl, struct rtattr **tb)
|
||||
|
||||
err = crypto_grab_skcipher(spawn, skcipher_crypto_instance(inst),
|
||||
cipher_name, 0, mask);
|
||||
if (err == -ENOENT) {
|
||||
if (err == -ENOENT && memcmp(cipher_name, "ecb(", 4)) {
|
||||
err = -ENAMETOOLONG;
|
||||
if (snprintf(ecb_name, CRYPTO_MAX_ALG_NAME, "ecb(%s)",
|
||||
cipher_name) >= CRYPTO_MAX_ALG_NAME)
|
||||
@@ -356,7 +356,7 @@ static int lrw_create(struct crypto_template *tmpl, struct rtattr **tb)
|
||||
/* Alas we screwed up the naming so we have to mangle the
|
||||
* cipher name.
|
||||
*/
|
||||
if (!strncmp(cipher_name, "ecb(", 4)) {
|
||||
if (!memcmp(cipher_name, "ecb(", 4)) {
|
||||
int len;
|
||||
|
||||
len = strscpy(ecb_name, cipher_name + 4, sizeof(ecb_name));
|
||||
|
||||
@@ -361,7 +361,7 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)
|
||||
|
||||
err = crypto_grab_skcipher(&ctx->spawn, skcipher_crypto_instance(inst),
|
||||
cipher_name, 0, mask);
|
||||
if (err == -ENOENT) {
|
||||
if (err == -ENOENT && memcmp(cipher_name, "ecb(", 4)) {
|
||||
err = -ENAMETOOLONG;
|
||||
if (snprintf(ctx->name, CRYPTO_MAX_ALG_NAME, "ecb(%s)",
|
||||
cipher_name) >= CRYPTO_MAX_ALG_NAME)
|
||||
@@ -395,7 +395,7 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)
|
||||
/* Alas we screwed up the naming so we have to mangle the
|
||||
* cipher name.
|
||||
*/
|
||||
if (!strncmp(cipher_name, "ecb(", 4)) {
|
||||
if (!memcmp(cipher_name, "ecb(", 4)) {
|
||||
int len;
|
||||
|
||||
len = strscpy(ctx->name, cipher_name + 4, sizeof(ctx->name));
|
||||
|
||||
@@ -23,6 +23,7 @@ config ACPI_APEI_GHES
|
||||
select ACPI_HED
|
||||
select IRQ_WORK
|
||||
select GENERIC_ALLOCATOR
|
||||
select ARM_SDE_INTERFACE if ARM64
|
||||
help
|
||||
Generic Hardware Error Source provides a way to report
|
||||
platform hardware errors (such as that from chipset). It
|
||||
|
||||
@@ -1478,7 +1478,7 @@ void __init ghes_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
sdei_init();
|
||||
acpi_sdei_init();
|
||||
|
||||
if (acpi_disabled)
|
||||
return;
|
||||
|
||||
@@ -42,7 +42,6 @@ static struct acpi_osi_entry
|
||||
osi_setup_entries[OSI_STRING_ENTRIES_MAX] __initdata = {
|
||||
{"Module Device", true},
|
||||
{"Processor Device", true},
|
||||
{"3.0 _SCP Extensions", true},
|
||||
{"Processor Aggregator Device", true},
|
||||
/*
|
||||
* Linux-Dell-Video is used by BIOS to disable RTD3 for NVidia graphics
|
||||
|
||||
@@ -199,6 +199,8 @@ static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi,
|
||||
init.name = devm_kasprintf(rpi->dev, GFP_KERNEL,
|
||||
"fw-clk-%s",
|
||||
rpi_firmware_clk_names[id]);
|
||||
if (!init.name)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
init.ops = &raspberrypi_firmware_clk_ops;
|
||||
init.flags = CLK_GET_RATE_NOCACHE;
|
||||
|
||||
|
||||
@@ -433,7 +433,7 @@ static const struct parent_map gcc_xo_gpll0_gpll1a_gpll6_sleep_map[] = {
|
||||
{ P_XO, 0 },
|
||||
{ P_GPLL0, 1 },
|
||||
{ P_GPLL1_AUX, 2 },
|
||||
{ P_GPLL6, 2 },
|
||||
{ P_GPLL6, 3 },
|
||||
{ P_SLEEP_CLK, 6 },
|
||||
};
|
||||
|
||||
@@ -1075,7 +1075,7 @@ static struct clk_rcg2 jpeg0_clk_src = {
|
||||
};
|
||||
|
||||
static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
|
||||
F(24000000, P_GPLL0, 1, 1, 45),
|
||||
F(24000000, P_GPLL6, 1, 1, 45),
|
||||
F(66670000, P_GPLL0, 12, 0, 0),
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -657,7 +657,7 @@ static u64 get_max_boost_ratio(unsigned int cpu, u64 *nominal_freq)
|
||||
nominal_perf = perf_caps.nominal_perf;
|
||||
|
||||
if (nominal_freq)
|
||||
*nominal_freq = perf_caps.nominal_freq;
|
||||
*nominal_freq = perf_caps.nominal_freq * 1000;
|
||||
|
||||
if (!highest_perf || !nominal_perf) {
|
||||
pr_debug("CPU%d: highest or nominal performance missing\n", cpu);
|
||||
|
||||
@@ -295,8 +295,8 @@ struct sun8i_ce_hash_tfm_ctx {
|
||||
* @flow: the flow to use for this request
|
||||
*/
|
||||
struct sun8i_ce_hash_reqctx {
|
||||
struct ahash_request fallback_req;
|
||||
int flow;
|
||||
struct ahash_request fallback_req; // keep at the end
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -117,7 +117,7 @@ static int sun8i_ss_setup_ivs(struct skcipher_request *areq)
|
||||
|
||||
/* we need to copy all IVs from source in case DMA is bi-directionnal */
|
||||
while (sg && len) {
|
||||
if (sg_dma_len(sg) == 0) {
|
||||
if (sg->length == 0) {
|
||||
sg = sg_next(sg);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -449,6 +449,9 @@ static int mv_cesa_skcipher_queue_req(struct skcipher_request *req,
|
||||
struct mv_cesa_skcipher_req *creq = skcipher_request_ctx(req);
|
||||
struct mv_cesa_engine *engine;
|
||||
|
||||
if (!req->cryptlen)
|
||||
return 0;
|
||||
|
||||
ret = mv_cesa_skcipher_req_init(req, tmpl);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -639,7 +639,7 @@ static int mv_cesa_ahash_dma_req_init(struct ahash_request *req)
|
||||
if (ret)
|
||||
goto err_free_tdma;
|
||||
|
||||
if (iter.src.sg) {
|
||||
if (iter.base.len > iter.src.op_offset) {
|
||||
/*
|
||||
* Add all the new data, inserting an operation block and
|
||||
* launch command between each full SRAM block-worth of
|
||||
|
||||
@@ -112,6 +112,7 @@ EXPORT_SYMBOL_GPL(skx_adxl_get);
|
||||
|
||||
void skx_adxl_put(void)
|
||||
{
|
||||
adxl_component_count = 0;
|
||||
kfree(adxl_values);
|
||||
kfree(adxl_msg);
|
||||
}
|
||||
|
||||
@@ -72,7 +72,6 @@ config ARM_SCPI_POWER_DOMAIN
|
||||
config ARM_SDE_INTERFACE
|
||||
bool "ARM Software Delegated Exception Interface (SDEI)"
|
||||
depends on ARM64
|
||||
depends on ACPI_APEI_GHES
|
||||
help
|
||||
The Software Delegated Exception Interface (SDEI) is an ARM
|
||||
standard for registering callbacks from the platform firmware
|
||||
|
||||
@@ -1060,13 +1060,12 @@ static bool __init sdei_present_acpi(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
void __init sdei_init(void)
|
||||
void __init acpi_sdei_init(void)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
int ret;
|
||||
|
||||
ret = platform_driver_register(&sdei_driver);
|
||||
if (ret || !sdei_present_acpi())
|
||||
if (!sdei_present_acpi())
|
||||
return;
|
||||
|
||||
pdev = platform_device_register_simple(sdei_driver.driver.name,
|
||||
@@ -1079,6 +1078,12 @@ void __init sdei_init(void)
|
||||
}
|
||||
}
|
||||
|
||||
static int __init sdei_init(void)
|
||||
{
|
||||
return platform_driver_register(&sdei_driver);
|
||||
}
|
||||
arch_initcall(sdei_init);
|
||||
|
||||
int sdei_event_handler(struct pt_regs *regs,
|
||||
struct sdei_registered_event *arg)
|
||||
{
|
||||
|
||||
@@ -609,8 +609,10 @@ int __init psci_dt_init(void)
|
||||
|
||||
np = of_find_matching_node_and_match(NULL, psci_of_match, &matched_np);
|
||||
|
||||
if (!np || !of_device_is_available(np))
|
||||
if (!np || !of_device_is_available(np)) {
|
||||
of_node_put(np);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
init_fn = (psci_initcall_t)matched_np->data;
|
||||
ret = init_fn(np);
|
||||
|
||||
@@ -626,7 +626,7 @@ static int rcar_du_vsps_init(struct rcar_du_device *rcdu)
|
||||
ret = of_parse_phandle_with_fixed_args(np, vsps_prop_name,
|
||||
cells, i, &args);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Add the VSP to the list or update the corresponding existing
|
||||
@@ -664,13 +664,11 @@ static int rcar_du_vsps_init(struct rcar_du_device *rcdu)
|
||||
vsp->dev = rcdu;
|
||||
|
||||
ret = rcar_du_vsp_init(vsp, vsps[i].np, vsps[i].crtcs_mask);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
if (ret)
|
||||
goto done;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
done:
|
||||
for (i = 0; i < ARRAY_SIZE(vsps); ++i)
|
||||
of_node_put(vsps[i].np);
|
||||
|
||||
|
||||
@@ -170,6 +170,11 @@ static const struct drm_encoder_helper_funcs tegra_rgb_encoder_helper_funcs = {
|
||||
.atomic_check = tegra_rgb_encoder_atomic_check,
|
||||
};
|
||||
|
||||
static void tegra_dc_of_node_put(void *data)
|
||||
{
|
||||
of_node_put(data);
|
||||
}
|
||||
|
||||
int tegra_dc_rgb_probe(struct tegra_dc *dc)
|
||||
{
|
||||
struct device_node *np;
|
||||
@@ -177,7 +182,14 @@ int tegra_dc_rgb_probe(struct tegra_dc *dc)
|
||||
int err;
|
||||
|
||||
np = of_get_child_by_name(dc->dev->of_node, "rgb");
|
||||
if (!np || !of_device_is_available(np))
|
||||
if (!np)
|
||||
return -ENODEV;
|
||||
|
||||
err = devm_add_action_or_reset(dc->dev, tegra_dc_of_node_put, np);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (!of_device_is_available(np))
|
||||
return -ENODEV;
|
||||
|
||||
rgb = devm_kzalloc(dc->dev, sizeof(*rgb), GFP_KERNEL);
|
||||
|
||||
@@ -194,7 +194,7 @@ static int vkms_crtc_atomic_check(struct drm_crtc *crtc,
|
||||
i++;
|
||||
}
|
||||
|
||||
vkms_state->active_planes = kcalloc(i, sizeof(plane), GFP_KERNEL);
|
||||
vkms_state->active_planes = kcalloc(i, sizeof(*vkms_state->active_planes), GFP_KERNEL);
|
||||
if (!vkms_state->active_planes)
|
||||
return -ENOMEM;
|
||||
vkms_state->num_active_planes = i;
|
||||
|
||||
@@ -4027,6 +4027,23 @@ static int vmw_execbuf_tie_context(struct vmw_private *dev_priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* DMA fence callback to remove a seqno_waiter
|
||||
*/
|
||||
struct seqno_waiter_rm_context {
|
||||
struct dma_fence_cb base;
|
||||
struct vmw_private *dev_priv;
|
||||
};
|
||||
|
||||
static void seqno_waiter_rm_cb(struct dma_fence *f, struct dma_fence_cb *cb)
|
||||
{
|
||||
struct seqno_waiter_rm_context *ctx =
|
||||
container_of(cb, struct seqno_waiter_rm_context, base);
|
||||
|
||||
vmw_seqno_waiter_remove(ctx->dev_priv);
|
||||
kfree(ctx);
|
||||
}
|
||||
|
||||
int vmw_execbuf_process(struct drm_file *file_priv,
|
||||
struct vmw_private *dev_priv,
|
||||
void __user *user_commands, void *kernel_commands,
|
||||
@@ -4220,6 +4237,15 @@ int vmw_execbuf_process(struct drm_file *file_priv,
|
||||
} else {
|
||||
/* Link the fence with the FD created earlier */
|
||||
fd_install(out_fence_fd, sync_file->file);
|
||||
struct seqno_waiter_rm_context *ctx =
|
||||
kmalloc(sizeof(*ctx), GFP_KERNEL);
|
||||
ctx->dev_priv = dev_priv;
|
||||
vmw_seqno_waiter_add(dev_priv);
|
||||
if (dma_fence_add_callback(&fence->base, &ctx->base,
|
||||
seqno_waiter_rm_cb) < 0) {
|
||||
vmw_seqno_waiter_remove(dev_priv);
|
||||
kfree(ctx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
#include <rdma/ib_umem.h>
|
||||
#include <rdma/uverbs_ioctl.h>
|
||||
|
||||
#include "hnae3.h"
|
||||
#include "hns_roce_common.h"
|
||||
#include "hns_roce_device.h"
|
||||
#include "hns_roce_cmd.h"
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define _HNS_ROCE_HW_V2_H
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include "hnae3.h"
|
||||
|
||||
#define HNS_ROCE_VF_QPC_BT_NUM 256
|
||||
#define HNS_ROCE_VF_SCCC_BT_NUM 64
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include <rdma/ib_smi.h>
|
||||
#include <rdma/ib_user_verbs.h>
|
||||
#include <rdma/ib_cache.h>
|
||||
#include "hnae3.h"
|
||||
#include "hns_roce_common.h"
|
||||
#include "hns_roce_device.h"
|
||||
#include <rdma/hns-abi.h>
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include <rdma/rdma_cm.h>
|
||||
#include <rdma/restrack.h>
|
||||
#include <uapi/rdma/rdma_netlink.h>
|
||||
#include "hnae3.h"
|
||||
#include "hns_roce_common.h"
|
||||
#include "hns_roce_device.h"
|
||||
#include "hns_roce_hw_v2.h"
|
||||
|
||||
@@ -21,8 +21,10 @@ mlx5_get_rsc(struct mlx5_qp_table *table, u32 rsn)
|
||||
spin_lock_irqsave(&table->lock, flags);
|
||||
|
||||
common = radix_tree_lookup(&table->tree, rsn);
|
||||
if (common)
|
||||
if (common && !common->invalid)
|
||||
refcount_inc(&common->refcount);
|
||||
else
|
||||
common = NULL;
|
||||
|
||||
spin_unlock_irqrestore(&table->lock, flags);
|
||||
|
||||
@@ -172,6 +174,18 @@ static int create_resource_common(struct mlx5_ib_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void modify_resource_common_state(struct mlx5_ib_dev *dev,
|
||||
struct mlx5_core_qp *qp,
|
||||
bool invalid)
|
||||
{
|
||||
struct mlx5_qp_table *table = &dev->qp_table;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&table->lock, flags);
|
||||
qp->common.invalid = invalid;
|
||||
spin_unlock_irqrestore(&table->lock, flags);
|
||||
}
|
||||
|
||||
static void destroy_resource_common(struct mlx5_ib_dev *dev,
|
||||
struct mlx5_core_qp *qp)
|
||||
{
|
||||
@@ -578,8 +592,20 @@ err_destroy_rq:
|
||||
int mlx5_core_destroy_rq_tracked(struct mlx5_ib_dev *dev,
|
||||
struct mlx5_core_qp *rq)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* The rq destruction can be called again in case it fails, hence we
|
||||
* mark the common resource as invalid and only once FW destruction
|
||||
* is completed successfully we actually destroy the resources.
|
||||
*/
|
||||
modify_resource_common_state(dev, rq, true);
|
||||
ret = destroy_rq_tracked(dev, rq->qpn, rq->uid);
|
||||
if (ret) {
|
||||
modify_resource_common_state(dev, rq, false);
|
||||
return ret;
|
||||
}
|
||||
destroy_resource_common(dev, rq);
|
||||
return destroy_rq_tracked(dev, rq->qpn, rq->uid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void destroy_sq_tracked(struct mlx5_ib_dev *dev, u32 sqn, u16 uid)
|
||||
|
||||
@@ -918,7 +918,7 @@ static int lan743x_mac_set_mtu(struct lan743x_adapter *adapter, int new_mtu)
|
||||
}
|
||||
|
||||
/* PHY */
|
||||
static int lan743x_phy_reset(struct lan743x_adapter *adapter)
|
||||
static int lan743x_hw_reset_phy(struct lan743x_adapter *adapter)
|
||||
{
|
||||
u32 data;
|
||||
|
||||
@@ -952,7 +952,7 @@ static void lan743x_phy_update_flowcontrol(struct lan743x_adapter *adapter,
|
||||
|
||||
static int lan743x_phy_init(struct lan743x_adapter *adapter)
|
||||
{
|
||||
return lan743x_phy_reset(adapter);
|
||||
return lan743x_hw_reset_phy(adapter);
|
||||
}
|
||||
|
||||
static void lan743x_phy_link_status_change(struct net_device *netdev)
|
||||
|
||||
@@ -30,10 +30,13 @@ static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value,
|
||||
ret = usbnet_read_cmd_nopm(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR |
|
||||
USB_RECIP_DEVICE, value, index, data, size);
|
||||
|
||||
if (unlikely(ret < 0))
|
||||
if (unlikely(ret < size)) {
|
||||
ret = ret < 0 ? ret : -ENODATA;
|
||||
|
||||
netdev_warn(dev->net,
|
||||
"Failed to read(0x%x) reg index 0x%04x: %d\n",
|
||||
cmd, index, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -46,10 +49,13 @@ static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value,
|
||||
ret = usbnet_read_cmd(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR |
|
||||
USB_RECIP_DEVICE, value, index, data, size);
|
||||
|
||||
if (unlikely(ret < 0))
|
||||
if (unlikely(ret < size)) {
|
||||
ret = ret < 0 ? ret : -ENODATA;
|
||||
|
||||
netdev_warn(dev->net,
|
||||
"Failed to read(0x%x) reg index 0x%04x: %d\n",
|
||||
cmd, index, ret);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -736,6 +736,7 @@ err_hal_srng_deinit:
|
||||
void ath11k_core_halt(struct ath11k *ar)
|
||||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
struct list_head *pos, *n;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
@@ -749,7 +750,12 @@ void ath11k_core_halt(struct ath11k *ar)
|
||||
|
||||
rcu_assign_pointer(ab->pdevs_active[ar->pdev_idx], NULL);
|
||||
synchronize_rcu();
|
||||
INIT_LIST_HEAD(&ar->arvifs);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
list_for_each_safe(pos, n, &ar->arvifs)
|
||||
list_del_init(pos);
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
idr_init(&ar->txmgmt_idr);
|
||||
}
|
||||
|
||||
|
||||
@@ -290,6 +290,9 @@ void ath9k_htc_swba(struct ath9k_htc_priv *priv,
|
||||
struct ath_common *common = ath9k_hw_common(priv->ah);
|
||||
int slot;
|
||||
|
||||
if (!priv->cur_beacon_conf.enable_beacon)
|
||||
return;
|
||||
|
||||
if (swba->beacon_pending != 0) {
|
||||
priv->beacon.bmisscnt++;
|
||||
if (priv->beacon.bmisscnt > BSTUCK_THRESHOLD) {
|
||||
|
||||
@@ -3157,7 +3157,8 @@ static void rtw8822c_dpk_cal_coef1(struct rtw_dev *rtwdev)
|
||||
rtw_write32(rtwdev, REG_NCTL0, 0x00001148);
|
||||
rtw_write32(rtwdev, REG_NCTL0, 0x00001149);
|
||||
|
||||
check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55);
|
||||
if (!check_hw_ready(rtwdev, 0x2d9c, MASKBYTE0, 0x55))
|
||||
rtw_warn(rtwdev, "DPK stuck, performance may be suboptimal");
|
||||
|
||||
rtw_write8(rtwdev, 0x1b10, 0x0);
|
||||
rtw_write32_mask(rtwdev, REG_NCTL0, BIT_SUBPAGE, 0x0000000c);
|
||||
|
||||
@@ -413,20 +413,22 @@ static int armada_37xx_gpio_direction_output(struct gpio_chip *chip,
|
||||
unsigned int offset, int value)
|
||||
{
|
||||
struct armada_37xx_pinctrl *info = gpiochip_get_data(chip);
|
||||
unsigned int reg = OUTPUT_EN;
|
||||
unsigned int en_offset = offset;
|
||||
unsigned int reg = OUTPUT_VAL;
|
||||
unsigned int mask, val, ret;
|
||||
|
||||
armada_37xx_update_reg(®, &offset);
|
||||
mask = BIT(offset);
|
||||
val = value ? mask : 0;
|
||||
|
||||
ret = regmap_update_bits(info->regmap, reg, mask, mask);
|
||||
|
||||
ret = regmap_update_bits(info->regmap, reg, mask, val);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
reg = OUTPUT_VAL;
|
||||
val = value ? mask : 0;
|
||||
regmap_update_bits(info->regmap, reg, mask, val);
|
||||
reg = OUTPUT_EN;
|
||||
armada_37xx_update_reg(®, &en_offset);
|
||||
|
||||
regmap_update_bits(info->regmap, reg, mask, mask);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1820,12 +1820,16 @@ static int at91_gpio_probe(struct platform_device *pdev)
|
||||
struct at91_gpio_chip *at91_chip = NULL;
|
||||
struct gpio_chip *chip;
|
||||
struct pinctrl_gpio_range *range;
|
||||
int alias_idx;
|
||||
int ret = 0;
|
||||
int irq, i;
|
||||
int alias_idx = of_alias_get_id(np, "gpio");
|
||||
uint32_t ngpio;
|
||||
char **names;
|
||||
|
||||
alias_idx = of_alias_get_id(np, "gpio");
|
||||
if (alias_idx < 0)
|
||||
return alias_idx;
|
||||
|
||||
BUG_ON(alias_idx >= ARRAY_SIZE(gpio_chips));
|
||||
if (gpio_chips[alias_idx]) {
|
||||
ret = -EBUSY;
|
||||
|
||||
@@ -81,12 +81,11 @@ static int at91_reset(struct notifier_block *this, unsigned long mode,
|
||||
" str %4, [%0, %6]\n\t"
|
||||
/* Disable SDRAM1 accesses */
|
||||
"1: tst %1, #0\n\t"
|
||||
" beq 2f\n\t"
|
||||
" strne %3, [%1, #" __stringify(AT91_DDRSDRC_RTR) "]\n\t"
|
||||
/* Power down SDRAM1 */
|
||||
" strne %4, [%1, %6]\n\t"
|
||||
/* Reset CPU */
|
||||
"2: str %5, [%2, #" __stringify(AT91_RSTC_CR) "]\n\t"
|
||||
" str %5, [%2, #" __stringify(AT91_RSTC_CR) "]\n\t"
|
||||
|
||||
" b .\n\t"
|
||||
:
|
||||
@@ -97,7 +96,7 @@ static int at91_reset(struct notifier_block *this, unsigned long mode,
|
||||
"r" cpu_to_le32(AT91_DDRSDRC_LPCB_POWER_DOWN),
|
||||
"r" (reset->args),
|
||||
"r" (reset->ramc_lpr)
|
||||
: "r4");
|
||||
);
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
@@ -915,6 +915,7 @@ static int sh_msiof_transfer_one(struct spi_controller *ctlr,
|
||||
void *rx_buf = t->rx_buf;
|
||||
unsigned int len = t->len;
|
||||
unsigned int bits = t->bits_per_word;
|
||||
unsigned int max_wdlen = 256;
|
||||
unsigned int bytes_per_word;
|
||||
unsigned int words;
|
||||
int n;
|
||||
@@ -928,17 +929,17 @@ static int sh_msiof_transfer_one(struct spi_controller *ctlr,
|
||||
if (!spi_controller_is_slave(p->ctlr))
|
||||
sh_msiof_spi_set_clk_regs(p, clk_get_rate(p->clk), t->speed_hz);
|
||||
|
||||
if (tx_buf)
|
||||
max_wdlen = min(max_wdlen, p->tx_fifo_size);
|
||||
if (rx_buf)
|
||||
max_wdlen = min(max_wdlen, p->rx_fifo_size);
|
||||
|
||||
while (ctlr->dma_tx && len > 15) {
|
||||
/*
|
||||
* DMA supports 32-bit words only, hence pack 8-bit and 16-bit
|
||||
* words, with byte resp. word swapping.
|
||||
*/
|
||||
unsigned int l = 0;
|
||||
|
||||
if (tx_buf)
|
||||
l = min(round_down(len, 4), p->tx_fifo_size * 4);
|
||||
if (rx_buf)
|
||||
l = min(round_down(len, 4), p->rx_fifo_size * 4);
|
||||
unsigned int l = min(round_down(len, 4), max_wdlen * 4);
|
||||
|
||||
if (bits <= 8) {
|
||||
copy32 = copy_bswap32;
|
||||
|
||||
@@ -178,8 +178,14 @@ static int rkvdec_enum_framesizes(struct file *file, void *priv,
|
||||
if (!fmt)
|
||||
return -EINVAL;
|
||||
|
||||
fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
|
||||
fsize->stepwise = fmt->frmsize;
|
||||
fsize->type = V4L2_FRMSIZE_TYPE_CONTINUOUS;
|
||||
fsize->stepwise.min_width = 1;
|
||||
fsize->stepwise.max_width = fmt->frmsize.max_width;
|
||||
fsize->stepwise.step_width = 1;
|
||||
fsize->stepwise.min_height = 1;
|
||||
fsize->stepwise.max_height = fmt->frmsize.max_height;
|
||||
fsize->stepwise.step_height = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,6 +131,11 @@ static void tb_cfg_request_dequeue(struct tb_cfg_request *req)
|
||||
struct tb_ctl *ctl = req->ctl;
|
||||
|
||||
mutex_lock(&ctl->request_queue_lock);
|
||||
if (!test_bit(TB_CFG_REQUEST_ACTIVE, &req->flags)) {
|
||||
mutex_unlock(&ctl->request_queue_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
list_del(&req->list);
|
||||
clear_bit(TB_CFG_REQUEST_ACTIVE, &req->flags);
|
||||
if (test_bit(TB_CFG_REQUEST_CANCELED, &req->flags))
|
||||
|
||||
@@ -486,6 +486,7 @@ static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
|
||||
__u8 stb;
|
||||
int rv;
|
||||
long wait_rv;
|
||||
unsigned long expire;
|
||||
|
||||
dev_dbg(dev, "Enter ioctl_read_stb iin_ep_present: %d\n",
|
||||
data->iin_ep_present);
|
||||
@@ -528,10 +529,11 @@ static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
|
||||
}
|
||||
|
||||
if (data->iin_ep_present) {
|
||||
expire = msecs_to_jiffies(file_data->timeout);
|
||||
wait_rv = wait_event_interruptible_timeout(
|
||||
data->waitq,
|
||||
atomic_read(&data->iin_data_valid) != 0,
|
||||
file_data->timeout);
|
||||
expire);
|
||||
if (wait_rv < 0) {
|
||||
dev_dbg(dev, "wait interrupted %ld\n", wait_rv);
|
||||
rv = wait_rv;
|
||||
|
||||
@@ -369,6 +369,9 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
/* SanDisk Corp. SanDisk 3.2Gen1 */
|
||||
{ USB_DEVICE(0x0781, 0x55a3), .driver_info = USB_QUIRK_DELAY_INIT },
|
||||
|
||||
/* SanDisk Extreme 55AE */
|
||||
{ USB_DEVICE(0x0781, 0x55ae), .driver_info = USB_QUIRK_NO_LPM },
|
||||
|
||||
/* Realforce 87U Keyboard */
|
||||
{ USB_DEVICE(0x0853, 0x011b), .driver_info = USB_QUIRK_NO_LPM },
|
||||
|
||||
|
||||
@@ -52,6 +52,13 @@ UNUSUAL_DEV(0x059f, 0x1061, 0x0000, 0x9999,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_REPORT_OPCODES | US_FL_NO_SAME),
|
||||
|
||||
/* Reported-by: Zhihong Zhou <zhouzhihong@greatwall.com.cn> */
|
||||
UNUSUAL_DEV(0x0781, 0x55e8, 0x0000, 0x9999,
|
||||
"SanDisk",
|
||||
"",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_UAS),
|
||||
|
||||
/* Reported-by: Hongling Zeng <zenghongling@kylinos.cn> */
|
||||
UNUSUAL_DEV(0x090c, 0x2000, 0x0000, 0x9999,
|
||||
"Hiksemi",
|
||||
|
||||
@@ -269,7 +269,7 @@ static int vfio_dma_bitmap_alloc_all(struct vfio_iommu *iommu, size_t pgsize)
|
||||
struct rb_node *p;
|
||||
|
||||
for (p = rb_prev(n); p; p = rb_prev(p)) {
|
||||
struct vfio_dma *dma = rb_entry(n,
|
||||
struct vfio_dma *dma = rb_entry(p,
|
||||
struct vfio_dma, node);
|
||||
|
||||
vfio_dma_bitmap_free(dma);
|
||||
|
||||
@@ -56,7 +56,7 @@ static bool __is_cp_guaranteed(struct page *page)
|
||||
struct inode *inode;
|
||||
struct f2fs_sb_info *sbi;
|
||||
|
||||
if (!mapping)
|
||||
if (fscrypt_is_bounce_page(page))
|
||||
return false;
|
||||
|
||||
inode = mapping->host;
|
||||
|
||||
@@ -2368,8 +2368,14 @@ static inline void dec_valid_block_count(struct f2fs_sb_info *sbi,
|
||||
blkcnt_t sectors = count << F2FS_LOG_SECTORS_PER_BLOCK;
|
||||
|
||||
spin_lock(&sbi->stat_lock);
|
||||
f2fs_bug_on(sbi, sbi->total_valid_block_count < (block_t) count);
|
||||
sbi->total_valid_block_count -= (block_t)count;
|
||||
if (unlikely(sbi->total_valid_block_count < count)) {
|
||||
f2fs_warn(sbi, "Inconsistent total_valid_block_count:%u, ino:%lu, count:%u",
|
||||
sbi->total_valid_block_count, inode->i_ino, count);
|
||||
sbi->total_valid_block_count = 0;
|
||||
set_sbi_flag(sbi, SBI_NEED_FSCK);
|
||||
} else {
|
||||
sbi->total_valid_block_count -= count;
|
||||
}
|
||||
if (sbi->reserved_blocks &&
|
||||
sbi->current_reserved_blocks < sbi->reserved_blocks)
|
||||
sbi->current_reserved_blocks = min(sbi->reserved_blocks,
|
||||
|
||||
@@ -636,7 +636,8 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
|
||||
if (!IS_ERR(inode)) {
|
||||
if (S_ISDIR(inode->i_mode)) {
|
||||
iput(inode);
|
||||
inode = ERR_PTR(-EISDIR);
|
||||
inode = NULL;
|
||||
error = -EISDIR;
|
||||
goto fail_gunlock;
|
||||
}
|
||||
d_instantiate(dentry, inode);
|
||||
|
||||
@@ -46,12 +46,12 @@ int sdei_unregister_ghes(struct ghes *ghes);
|
||||
/* For use by arch code when CPU hotplug notifiers are not appropriate. */
|
||||
int sdei_mask_local_cpu(void);
|
||||
int sdei_unmask_local_cpu(void);
|
||||
void __init sdei_init(void);
|
||||
void __init acpi_sdei_init(void);
|
||||
void sdei_handler_abort(void);
|
||||
#else
|
||||
static inline int sdei_mask_local_cpu(void) { return 0; }
|
||||
static inline int sdei_unmask_local_cpu(void) { return 0; }
|
||||
static inline void sdei_init(void) { }
|
||||
static inline void acpi_sdei_init(void) { }
|
||||
static inline void sdei_handler_abort(void) { }
|
||||
#endif /* CONFIG_ARM_SDE_INTERFACE */
|
||||
|
||||
|
||||
@@ -390,6 +390,7 @@ struct mlx5_core_rsc_common {
|
||||
enum mlx5_res_type res;
|
||||
refcount_t refcount;
|
||||
struct completion free;
|
||||
bool invalid;
|
||||
};
|
||||
|
||||
struct mlx5_uars_page {
|
||||
|
||||
@@ -8955,14 +8955,14 @@ __perf_event_account_interrupt(struct perf_event *event, int throttle)
|
||||
hwc->interrupts = 1;
|
||||
} else {
|
||||
hwc->interrupts++;
|
||||
if (unlikely(throttle &&
|
||||
hwc->interrupts > max_samples_per_tick)) {
|
||||
__this_cpu_inc(perf_throttled_count);
|
||||
tick_dep_set_cpu(smp_processor_id(), TICK_DEP_BIT_PERF_EVENTS);
|
||||
hwc->interrupts = MAX_INTERRUPTS;
|
||||
perf_log_throttle(event, 0);
|
||||
ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (unlikely(throttle && hwc->interrupts >= max_samples_per_tick)) {
|
||||
__this_cpu_inc(perf_throttled_count);
|
||||
tick_dep_set_cpu(smp_processor_id(), TICK_DEP_BIT_PERF_EVENTS);
|
||||
hwc->interrupts = MAX_INTERRUPTS;
|
||||
perf_log_throttle(event, 0);
|
||||
ret = 1;
|
||||
}
|
||||
|
||||
if (event->attr.freq) {
|
||||
|
||||
@@ -49,6 +49,9 @@ ssize_t pm_show_wakelocks(char *buf, bool show_active)
|
||||
len += sysfs_emit_at(buf, len, "%s ", wl->name);
|
||||
}
|
||||
|
||||
if (len > 0)
|
||||
--len;
|
||||
|
||||
len += sysfs_emit_at(buf, len, "\n");
|
||||
|
||||
mutex_unlock(&wakelocks_lock);
|
||||
|
||||
@@ -1604,7 +1604,7 @@ static struct pt_regs *get_bpf_raw_tp_regs(void)
|
||||
struct bpf_raw_tp_regs *tp_regs = this_cpu_ptr(&bpf_raw_tp_regs);
|
||||
int nest_level = this_cpu_inc_return(bpf_raw_tp_nest_level);
|
||||
|
||||
if (WARN_ON_ONCE(nest_level > ARRAY_SIZE(tp_regs->regs))) {
|
||||
if (nest_level > ARRAY_SIZE(tp_regs->regs)) {
|
||||
this_cpu_dec(bpf_raw_tp_nest_level);
|
||||
return ERR_PTR(-EBUSY);
|
||||
}
|
||||
|
||||
@@ -59,19 +59,19 @@ static int nf_br_ip_fragment(struct net *net, struct sock *sk,
|
||||
struct ip_fraglist_iter iter;
|
||||
struct sk_buff *frag;
|
||||
|
||||
if (first_len - hlen > mtu ||
|
||||
skb_headroom(skb) < ll_rs)
|
||||
if (first_len - hlen > mtu)
|
||||
goto blackhole;
|
||||
|
||||
if (skb_cloned(skb))
|
||||
if (skb_cloned(skb) ||
|
||||
skb_headroom(skb) < ll_rs)
|
||||
goto slow_path;
|
||||
|
||||
skb_walk_frags(skb, frag) {
|
||||
if (frag->len > mtu ||
|
||||
skb_headroom(frag) < hlen + ll_rs)
|
||||
if (frag->len > mtu)
|
||||
goto blackhole;
|
||||
|
||||
if (skb_shared(frag))
|
||||
if (skb_shared(frag) ||
|
||||
skb_headroom(frag) < hlen + ll_rs)
|
||||
goto slow_path;
|
||||
}
|
||||
|
||||
|
||||
@@ -155,20 +155,20 @@ int br_ip6_fragment(struct net *net, struct sock *sk, struct sk_buff *skb,
|
||||
struct ip6_fraglist_iter iter;
|
||||
struct sk_buff *frag2;
|
||||
|
||||
if (first_len - hlen > mtu ||
|
||||
skb_headroom(skb) < (hroom + sizeof(struct frag_hdr)))
|
||||
if (first_len - hlen > mtu)
|
||||
goto blackhole;
|
||||
|
||||
if (skb_cloned(skb))
|
||||
if (skb_cloned(skb) ||
|
||||
skb_headroom(skb) < (hroom + sizeof(struct frag_hdr)))
|
||||
goto slow_path;
|
||||
|
||||
skb_walk_frags(skb, frag2) {
|
||||
if (frag2->len > mtu ||
|
||||
skb_headroom(frag2) < (hlen + hroom + sizeof(struct frag_hdr)))
|
||||
if (frag2->len > mtu)
|
||||
goto blackhole;
|
||||
|
||||
/* Partially cloned skb? */
|
||||
if (skb_shared(frag2))
|
||||
if (skb_shared(frag2) ||
|
||||
skb_headroom(frag2) < (hlen + hroom + sizeof(struct frag_hdr)))
|
||||
goto slow_path;
|
||||
}
|
||||
|
||||
|
||||
@@ -154,6 +154,7 @@ void nft_fib6_eval(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
{
|
||||
const struct nft_fib *priv = nft_expr_priv(expr);
|
||||
int noff = skb_network_offset(pkt->skb);
|
||||
const struct net_device *found = NULL;
|
||||
const struct net_device *oif = NULL;
|
||||
u32 *dest = ®s->data[priv->dreg];
|
||||
struct ipv6hdr *iph, _iph;
|
||||
@@ -196,11 +197,15 @@ void nft_fib6_eval(const struct nft_expr *expr, struct nft_regs *regs,
|
||||
if (rt->rt6i_flags & (RTF_REJECT | RTF_ANYCAST | RTF_LOCAL))
|
||||
goto put_rt_err;
|
||||
|
||||
if (oif && oif != rt->rt6i_idev->dev &&
|
||||
l3mdev_master_ifindex_rcu(rt->rt6i_idev->dev) != oif->ifindex)
|
||||
goto put_rt_err;
|
||||
if (!oif) {
|
||||
found = rt->rt6i_idev->dev;
|
||||
} else {
|
||||
if (oif == rt->rt6i_idev->dev ||
|
||||
l3mdev_master_ifindex_rcu(rt->rt6i_idev->dev) == oif->ifindex)
|
||||
found = oif;
|
||||
}
|
||||
|
||||
nft_fib_store_result(dest, priv, rt->rt6i_idev->dev);
|
||||
nft_fib_store_result(dest, priv, found);
|
||||
put_rt_err:
|
||||
ip6_rt_put(rt);
|
||||
}
|
||||
|
||||
@@ -140,16 +140,15 @@ struct ncsi_channel_vlan_filter {
|
||||
};
|
||||
|
||||
struct ncsi_channel_stats {
|
||||
u32 hnc_cnt_hi; /* Counter cleared */
|
||||
u32 hnc_cnt_lo; /* Counter cleared */
|
||||
u32 hnc_rx_bytes; /* Rx bytes */
|
||||
u32 hnc_tx_bytes; /* Tx bytes */
|
||||
u32 hnc_rx_uc_pkts; /* Rx UC packets */
|
||||
u32 hnc_rx_mc_pkts; /* Rx MC packets */
|
||||
u32 hnc_rx_bc_pkts; /* Rx BC packets */
|
||||
u32 hnc_tx_uc_pkts; /* Tx UC packets */
|
||||
u32 hnc_tx_mc_pkts; /* Tx MC packets */
|
||||
u32 hnc_tx_bc_pkts; /* Tx BC packets */
|
||||
u64 hnc_cnt; /* Counter cleared */
|
||||
u64 hnc_rx_bytes; /* Rx bytes */
|
||||
u64 hnc_tx_bytes; /* Tx bytes */
|
||||
u64 hnc_rx_uc_pkts; /* Rx UC packets */
|
||||
u64 hnc_rx_mc_pkts; /* Rx MC packets */
|
||||
u64 hnc_rx_bc_pkts; /* Rx BC packets */
|
||||
u64 hnc_tx_uc_pkts; /* Tx UC packets */
|
||||
u64 hnc_tx_mc_pkts; /* Tx MC packets */
|
||||
u64 hnc_tx_bc_pkts; /* Tx BC packets */
|
||||
u32 hnc_fcs_err; /* FCS errors */
|
||||
u32 hnc_align_err; /* Alignment errors */
|
||||
u32 hnc_false_carrier; /* False carrier detection */
|
||||
@@ -178,7 +177,7 @@ struct ncsi_channel_stats {
|
||||
u32 hnc_tx_1023_frames; /* Tx 512-1023 bytes frames */
|
||||
u32 hnc_tx_1522_frames; /* Tx 1024-1522 bytes frames */
|
||||
u32 hnc_tx_9022_frames; /* Tx 1523-9022 bytes frames */
|
||||
u32 hnc_rx_valid_bytes; /* Rx valid bytes */
|
||||
u64 hnc_rx_valid_bytes; /* Rx valid bytes */
|
||||
u32 hnc_rx_runt_pkts; /* Rx error runt packets */
|
||||
u32 hnc_rx_jabber_pkts; /* Rx error jabber packets */
|
||||
u32 ncsi_rx_cmds; /* Rx NCSI commands */
|
||||
|
||||
@@ -246,16 +246,15 @@ struct ncsi_rsp_gp_pkt {
|
||||
/* Get Controller Packet Statistics */
|
||||
struct ncsi_rsp_gcps_pkt {
|
||||
struct ncsi_rsp_pkt_hdr rsp; /* Response header */
|
||||
__be32 cnt_hi; /* Counter cleared */
|
||||
__be32 cnt_lo; /* Counter cleared */
|
||||
__be32 rx_bytes; /* Rx bytes */
|
||||
__be32 tx_bytes; /* Tx bytes */
|
||||
__be32 rx_uc_pkts; /* Rx UC packets */
|
||||
__be32 rx_mc_pkts; /* Rx MC packets */
|
||||
__be32 rx_bc_pkts; /* Rx BC packets */
|
||||
__be32 tx_uc_pkts; /* Tx UC packets */
|
||||
__be32 tx_mc_pkts; /* Tx MC packets */
|
||||
__be32 tx_bc_pkts; /* Tx BC packets */
|
||||
__be64 cnt; /* Counter cleared */
|
||||
__be64 rx_bytes; /* Rx bytes */
|
||||
__be64 tx_bytes; /* Tx bytes */
|
||||
__be64 rx_uc_pkts; /* Rx UC packets */
|
||||
__be64 rx_mc_pkts; /* Rx MC packets */
|
||||
__be64 rx_bc_pkts; /* Rx BC packets */
|
||||
__be64 tx_uc_pkts; /* Tx UC packets */
|
||||
__be64 tx_mc_pkts; /* Tx MC packets */
|
||||
__be64 tx_bc_pkts; /* Tx BC packets */
|
||||
__be32 fcs_err; /* FCS errors */
|
||||
__be32 align_err; /* Alignment errors */
|
||||
__be32 false_carrier; /* False carrier detection */
|
||||
@@ -284,11 +283,11 @@ struct ncsi_rsp_gcps_pkt {
|
||||
__be32 tx_1023_frames; /* Tx 512-1023 bytes frames */
|
||||
__be32 tx_1522_frames; /* Tx 1024-1522 bytes frames */
|
||||
__be32 tx_9022_frames; /* Tx 1523-9022 bytes frames */
|
||||
__be32 rx_valid_bytes; /* Rx valid bytes */
|
||||
__be64 rx_valid_bytes; /* Rx valid bytes */
|
||||
__be32 rx_runt_pkts; /* Rx error runt packets */
|
||||
__be32 rx_jabber_pkts; /* Rx error jabber packets */
|
||||
__be32 checksum; /* Checksum */
|
||||
};
|
||||
} __packed __aligned(4);
|
||||
|
||||
/* Get NCSI Statistics */
|
||||
struct ncsi_rsp_gns_pkt {
|
||||
|
||||
@@ -933,16 +933,15 @@ static int ncsi_rsp_handler_gcps(struct ncsi_request *nr)
|
||||
|
||||
/* Update HNC's statistics */
|
||||
ncs = &nc->stats;
|
||||
ncs->hnc_cnt_hi = ntohl(rsp->cnt_hi);
|
||||
ncs->hnc_cnt_lo = ntohl(rsp->cnt_lo);
|
||||
ncs->hnc_rx_bytes = ntohl(rsp->rx_bytes);
|
||||
ncs->hnc_tx_bytes = ntohl(rsp->tx_bytes);
|
||||
ncs->hnc_rx_uc_pkts = ntohl(rsp->rx_uc_pkts);
|
||||
ncs->hnc_rx_mc_pkts = ntohl(rsp->rx_mc_pkts);
|
||||
ncs->hnc_rx_bc_pkts = ntohl(rsp->rx_bc_pkts);
|
||||
ncs->hnc_tx_uc_pkts = ntohl(rsp->tx_uc_pkts);
|
||||
ncs->hnc_tx_mc_pkts = ntohl(rsp->tx_mc_pkts);
|
||||
ncs->hnc_tx_bc_pkts = ntohl(rsp->tx_bc_pkts);
|
||||
ncs->hnc_cnt = be64_to_cpu(rsp->cnt);
|
||||
ncs->hnc_rx_bytes = be64_to_cpu(rsp->rx_bytes);
|
||||
ncs->hnc_tx_bytes = be64_to_cpu(rsp->tx_bytes);
|
||||
ncs->hnc_rx_uc_pkts = be64_to_cpu(rsp->rx_uc_pkts);
|
||||
ncs->hnc_rx_mc_pkts = be64_to_cpu(rsp->rx_mc_pkts);
|
||||
ncs->hnc_rx_bc_pkts = be64_to_cpu(rsp->rx_bc_pkts);
|
||||
ncs->hnc_tx_uc_pkts = be64_to_cpu(rsp->tx_uc_pkts);
|
||||
ncs->hnc_tx_mc_pkts = be64_to_cpu(rsp->tx_mc_pkts);
|
||||
ncs->hnc_tx_bc_pkts = be64_to_cpu(rsp->tx_bc_pkts);
|
||||
ncs->hnc_fcs_err = ntohl(rsp->fcs_err);
|
||||
ncs->hnc_align_err = ntohl(rsp->align_err);
|
||||
ncs->hnc_false_carrier = ntohl(rsp->false_carrier);
|
||||
@@ -971,7 +970,7 @@ static int ncsi_rsp_handler_gcps(struct ncsi_request *nr)
|
||||
ncs->hnc_tx_1023_frames = ntohl(rsp->tx_1023_frames);
|
||||
ncs->hnc_tx_1522_frames = ntohl(rsp->tx_1522_frames);
|
||||
ncs->hnc_tx_9022_frames = ntohl(rsp->tx_9022_frames);
|
||||
ncs->hnc_rx_valid_bytes = ntohl(rsp->rx_valid_bytes);
|
||||
ncs->hnc_rx_valid_bytes = be64_to_cpu(rsp->rx_valid_bytes);
|
||||
ncs->hnc_rx_runt_pkts = ntohl(rsp->rx_runt_pkts);
|
||||
ncs->hnc_rx_jabber_pkts = ntohl(rsp->rx_jabber_pkts);
|
||||
|
||||
|
||||
@@ -88,13 +88,13 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
||||
*dest = sk->sk_mark;
|
||||
} else {
|
||||
regs->verdict.code = NFT_BREAK;
|
||||
return;
|
||||
goto out_put_sk;
|
||||
}
|
||||
break;
|
||||
case NFT_SOCKET_WILDCARD:
|
||||
if (!sk_fullsock(sk)) {
|
||||
regs->verdict.code = NFT_BREAK;
|
||||
return;
|
||||
goto out_put_sk;
|
||||
}
|
||||
nft_socket_wildcard(pkt, regs, sk, dest);
|
||||
break;
|
||||
@@ -103,6 +103,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
||||
regs->verdict.code = NFT_BREAK;
|
||||
}
|
||||
|
||||
out_put_sk:
|
||||
if (sk != skb->sk)
|
||||
sock_gen_put(sk);
|
||||
}
|
||||
|
||||
@@ -588,10 +588,10 @@ static int nft_tunnel_opts_dump(struct sk_buff *skb,
|
||||
struct geneve_opt *opt;
|
||||
int offset = 0;
|
||||
|
||||
inner = nla_nest_start_noflag(skb, NFTA_TUNNEL_KEY_OPTS_GENEVE);
|
||||
if (!inner)
|
||||
goto failure;
|
||||
while (opts->len > offset) {
|
||||
inner = nla_nest_start_noflag(skb, NFTA_TUNNEL_KEY_OPTS_GENEVE);
|
||||
if (!inner)
|
||||
goto failure;
|
||||
opt = (struct geneve_opt *)(opts->u.data + offset);
|
||||
if (nla_put_be16(skb, NFTA_TUNNEL_KEY_GENEVE_CLASS,
|
||||
opt->opt_class) ||
|
||||
@@ -601,8 +601,8 @@ static int nft_tunnel_opts_dump(struct sk_buff *skb,
|
||||
opt->length * 4, opt->opt_data))
|
||||
goto inner_failure;
|
||||
offset += sizeof(*opt) + opt->length * 4;
|
||||
nla_nest_end(skb, inner);
|
||||
}
|
||||
nla_nest_end(skb, inner);
|
||||
}
|
||||
nla_nest_end(skb, nest);
|
||||
return 0;
|
||||
|
||||
@@ -1140,6 +1140,9 @@ int netlbl_conn_setattr(struct sock *sk,
|
||||
break;
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
case AF_INET6:
|
||||
if (sk->sk_family != AF_INET6)
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
addr6 = (struct sockaddr_in6 *)addr;
|
||||
entry = netlbl_domhsh_getentry_af6(secattr->domain,
|
||||
&addr6->sin6_addr);
|
||||
|
||||
@@ -859,6 +859,13 @@ more_data:
|
||||
err = tcp_bpf_sendmsg_redir(sk_redir, &msg_redir, send, flags);
|
||||
lock_sock(sk);
|
||||
if (err < 0) {
|
||||
/* Regardless of whether the data represented by
|
||||
* msg_redir is sent successfully, we have already
|
||||
* uncharged it via sk_msg_return_zero(). The
|
||||
* msg->sg.size represents the remaining unprocessed
|
||||
* data, which needs to be uncharged here.
|
||||
*/
|
||||
sk_mem_uncharge(sk, msg->sg.size);
|
||||
*copied -= sk_msg_free_nocharge(sk, &msg_redir);
|
||||
msg->sg.size = 0;
|
||||
}
|
||||
|
||||
@@ -63,16 +63,16 @@ static int validate_nla(struct nlattr *nla, int maxtype,
|
||||
minlen = nla_attr_minlen[pt->type];
|
||||
|
||||
if (libbpf_nla_len(nla) < minlen)
|
||||
return -1;
|
||||
return -EINVAL;
|
||||
|
||||
if (pt->maxlen && libbpf_nla_len(nla) > pt->maxlen)
|
||||
return -1;
|
||||
return -EINVAL;
|
||||
|
||||
if (pt->type == LIBBPF_NLA_STRING) {
|
||||
char *data = libbpf_nla_data(nla);
|
||||
|
||||
if (data[libbpf_nla_len(nla) - 1] != '\0')
|
||||
return -1;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -118,19 +118,18 @@ int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head,
|
||||
if (policy) {
|
||||
err = validate_nla(nla, maxtype, policy);
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
return err;
|
||||
}
|
||||
|
||||
if (tb[type])
|
||||
if (tb[type]) {
|
||||
pr_warn("Attribute of type %#x found multiple times in message, "
|
||||
"previous attribute is being ignored.\n", type);
|
||||
}
|
||||
|
||||
tb[type] = nla;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
errout:
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3081,12 +3081,15 @@ TEST(syscall_restart)
|
||||
ret = get_syscall(_metadata, child_pid);
|
||||
#if defined(__arm__)
|
||||
/*
|
||||
* FIXME:
|
||||
* - native ARM registers do NOT expose true syscall.
|
||||
* - compat ARM registers on ARM64 DO expose true syscall.
|
||||
* - values of utsbuf.machine include 'armv8l' or 'armb8b'
|
||||
* for ARM64 running in compat mode.
|
||||
*/
|
||||
ASSERT_EQ(0, uname(&utsbuf));
|
||||
if (strncmp(utsbuf.machine, "arm", 3) == 0) {
|
||||
if ((strncmp(utsbuf.machine, "arm", 3) == 0) &&
|
||||
(strncmp(utsbuf.machine, "armv8l", 6) != 0) &&
|
||||
(strncmp(utsbuf.machine, "armv8b", 6) != 0)) {
|
||||
EXPECT_EQ(__NR_nanosleep, ret);
|
||||
} else
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user