diff --git a/arch/arm64/configs/vendor/alioth_defconfig b/arch/arm64/configs/vendor/alioth_defconfig index f557405a7a53..085375736fdb 100644 --- a/arch/arm64/configs/vendor/alioth_defconfig +++ b/arch/arm64/configs/vendor/alioth_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -91,7 +91,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/apollo_defconfig b/arch/arm64/configs/vendor/apollo_defconfig index 2caedafaec26..59156ac08bb0 100644 --- a/arch/arm64/configs/vendor/apollo_defconfig +++ b/arch/arm64/configs/vendor/apollo_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -91,7 +91,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/cas_defconfig b/arch/arm64/configs/vendor/cas_defconfig index 679af83e63d8..2dfc45817c94 100644 --- a/arch/arm64/configs/vendor/cas_defconfig +++ b/arch/arm64/configs/vendor/cas_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 CONFIG_SCHED_WALT=y CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -90,7 +90,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/cmi_defconfig b/arch/arm64/configs/vendor/cmi_defconfig index 9f207ff9f8d8..37baca6de49f 100644 --- a/arch/arm64/configs/vendor/cmi_defconfig +++ b/arch/arm64/configs/vendor/cmi_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -91,7 +91,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/lmi_defconfig b/arch/arm64/configs/vendor/lmi_defconfig index cd3d747eaffa..f551ec477f1e 100644 --- a/arch/arm64/configs/vendor/lmi_defconfig +++ b/arch/arm64/configs/vendor/lmi_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -97,7 +97,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/thyme_defconfig b/arch/arm64/configs/vendor/thyme_defconfig index b153725c8a68..99e003bd0d89 100644 --- a/arch/arm64/configs/vendor/thyme_defconfig +++ b/arch/arm64/configs/vendor/thyme_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -91,7 +91,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/configs/vendor/umi_defconfig b/arch/arm64/configs/vendor/umi_defconfig index ca54ff802eec..27eab82ccb8b 100644 --- a/arch/arm64/configs/vendor/umi_defconfig +++ b/arch/arm64/configs/vendor/umi_defconfig @@ -11,11 +11,11 @@ CONFIG_SCHEDUTIL_DOWN_RATE_LIMIT=20000 CONFIG_CPU_INPUT_BOOST=y CONFIG_INPUT_BOOST_DURATION_MS=100 CONFIG_INPUT_BOOST_FREQ_LP=1708800 -CONFIG_INPUT_BOOST_FREQ_PERF=2150400 -CONFIG_INPUT_BOOST_FREQ_PRIME=2553600 +CONFIG_INPUT_BOOST_FREQ_PERF=2054400 +CONFIG_INPUT_BOOST_FREQ_PRIME=2169600 CONFIG_MAX_BOOST_FREQ_LP=1708800 -CONFIG_MAX_BOOST_FREQ_PERF=2150400 -CONFIG_MAX_BOOST_FREQ_PRIME=2553600 +CONFIG_MAX_BOOST_FREQ_PERF=2054400 +CONFIG_MAX_BOOST_FREQ_PRIME=2169600 # CONFIG_SCHED_WALT is not set CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y @@ -91,7 +91,7 @@ CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 # CONFIG_PM_WAKELOCKS_GC is not set CONFIG_WIREGUARD=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set CONFIG_ENERGY_MODEL=y CONFIG_CPU_IDLE=y CONFIG_ARM_CPUIDLE=y diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c index 9579968e7222..a137291e7837 100644 --- a/arch/arm64/kernel/ptrace.c +++ b/arch/arm64/kernel/ptrace.c @@ -879,7 +879,7 @@ static int sve_set(struct task_struct *target, const void *kbuf, const void __user *ubuf) { int ret; - struct user_sve_header header; + struct user_sve_header header = { 0 }; unsigned int vq; unsigned long start, end; diff --git a/crypto/ecc.c b/crypto/ecc.c index ad739255951f..38f35d7785bb 100644 --- a/crypto/ecc.c +++ b/crypto/ecc.c @@ -750,7 +750,7 @@ static void xycz_add(u64 *x1, u64 *y1, u64 *x2, u64 *y2, u64 *curve_prime, unsigned int ndigits) { /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */ - u64 t5[ECC_MAX_DIGITS]; + u64 t5[ECC_MAX_DIGITS] = { 0 }; /* t5 = x2 - x1 */ vli_mod_sub(t5, x2, x1, curve_prime, ndigits); @@ -791,9 +791,9 @@ static void xycz_add_c(u64 *x1, u64 *y1, u64 *x2, u64 *y2, u64 *curve_prime, unsigned int ndigits) { /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */ - u64 t5[ECC_MAX_DIGITS]; - u64 t6[ECC_MAX_DIGITS]; - u64 t7[ECC_MAX_DIGITS]; + u64 t5[ECC_MAX_DIGITS] = { 0 }; + u64 t6[ECC_MAX_DIGITS] = { 0 }; + u64 t7[ECC_MAX_DIGITS] = { 0 }; /* t5 = x2 - x1 */ vli_mod_sub(t5, x2, x1, curve_prime, ndigits); @@ -847,9 +847,9 @@ static void ecc_point_mult(struct ecc_point *result, { /* R0 and R1 */ u64 rx[2][ECC_MAX_DIGITS]; - u64 ry[2][ECC_MAX_DIGITS]; + u64 ry[2][ECC_MAX_DIGITS] = { 0 }; u64 z[ECC_MAX_DIGITS]; - u64 sk[2][ECC_MAX_DIGITS]; + u64 sk[2][ECC_MAX_DIGITS] = { 0 }; u64 *curve_prime = curve->p; int i, nb; int num_bits; @@ -1074,7 +1074,7 @@ int crypto_ecdh_shared_secret(unsigned int curve_id, unsigned int ndigits, { int ret = 0; struct ecc_point *product, *pk; - u64 priv[ECC_MAX_DIGITS]; + u64 priv[ECC_MAX_DIGITS] = { 0 }; u64 rand_z[ECC_MAX_DIGITS]; unsigned int nbytes; const struct ecc_curve *curve = ecc_get_curve(curve_id); diff --git a/drivers/bus/mhi/core/mhi_internal.h b/drivers/bus/mhi/core/mhi_internal.h index f078adc92207..c6fbad39c156 100644 --- a/drivers/bus/mhi/core/mhi_internal.h +++ b/drivers/bus/mhi/core/mhi_internal.h @@ -529,15 +529,15 @@ enum MHI_XFER_TYPE { #define MHI_DEV_WAKE_DB (127) #define MHI_MAX_MTU (0xffff) -#define MHI_TIMESYNC_DB_SETUP(er_index) ((MHI_TIMESYNC_CHAN_DB << \ - TIMESYNC_CFG_CHAN_DB_ID_SHIFT) & TIMESYNC_CFG_CHAN_DB_ID_MASK | \ - (1 << TIMESYNC_CFG_ENABLED_SHIFT) & TIMESYNC_CFG_ENABLED_MASK | \ - ((er_index) << TIMESYNC_CFG_ER_ID_SHIFT) & TIMESYNC_CFG_ER_ID_MASK) - -#define MHI_BW_SCALE_SETUP(er_index) ((MHI_BW_SCALE_CHAN_DB << \ - BW_SCALE_CFG_CHAN_DB_ID_SHIFT) & BW_SCALE_CFG_CHAN_DB_ID_MASK | \ - (1 << BW_SCALE_CFG_ENABLED_SHIFT) & BW_SCALE_CFG_ENABLED_MASK | \ - ((er_index) << BW_SCALE_CFG_ER_ID_SHIFT) & BW_SCALE_CFG_ER_ID_MASK) +#define MHI_TIMESYNC_DB_SETUP(er_index) (((MHI_TIMESYNC_CHAN_DB << \ + TIMESYNC_CFG_CHAN_DB_ID_SHIFT) & TIMESYNC_CFG_CHAN_DB_ID_MASK) | \ + ((1 << TIMESYNC_CFG_ENABLED_SHIFT) & TIMESYNC_CFG_ENABLED_MASK) | \ + (((er_index) << TIMESYNC_CFG_ER_ID_SHIFT) & TIMESYNC_CFG_ER_ID_MASK)) + +#define MHI_BW_SCALE_SETUP(er_index) (((MHI_BW_SCALE_CHAN_DB << \ + BW_SCALE_CFG_CHAN_DB_ID_SHIFT) & BW_SCALE_CFG_CHAN_DB_ID_MASK) | \ + ((1 << BW_SCALE_CFG_ENABLED_SHIFT) & BW_SCALE_CFG_ENABLED_MASK) | \ + (((er_index) << BW_SCALE_CFG_ER_ID_SHIFT) & BW_SCALE_CFG_ER_ID_MASK)) #define MHI_BW_SCALE_RESULT(status, seq) ((status & 0xF) << 8 | (seq & 0xFF)) #define MHI_BW_SCALE_NACK 0xF diff --git a/drivers/bus/mhi/core/mhi_main.c b/drivers/bus/mhi/core/mhi_main.c index 0ad2e80f0f0b..eb6f98e90bcc 100644 --- a/drivers/bus/mhi/core/mhi_main.c +++ b/drivers/bus/mhi/core/mhi_main.c @@ -2165,7 +2165,7 @@ int mhi_debugfs_mhi_regdump_show(struct seq_file *m, void *d) enum mhi_dev_state state; enum mhi_ee ee; int i, ret; - u32 val; + u32 val = 0; void __iomem *mhi_base = mhi_cntrl->regs; void __iomem *bhi_base = mhi_cntrl->bhi; void __iomem *bhie_base = mhi_cntrl->bhie; @@ -2818,7 +2818,7 @@ void mhi_debug_reg_dump(struct mhi_controller *mhi_cntrl) enum mhi_dev_state state; enum mhi_ee ee; int i, ret; - u32 val; + u32 val = 0; void __iomem *mhi_base = mhi_cntrl->regs; void __iomem *bhi_base = mhi_cntrl->bhi; void __iomem *bhie_base = mhi_cntrl->bhie; diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index 52eb9c55f983..05d247cdc29e 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -1303,7 +1303,7 @@ static int context_build_overlap(struct smq_invoke_ctx *ctx) int inbufs = REMOTE_SCALARS_INBUFS(ctx->sc); int outbufs = REMOTE_SCALARS_OUTBUFS(ctx->sc); int nbufs = inbufs + outbufs; - struct overlap max; + struct overlap max = { 0 }; for (i = 0; i < nbufs; ++i) { ctx->overs[i].start = (uintptr_t)lpra[i].buf.pv; diff --git a/drivers/char/diag/diag_masks.c b/drivers/char/diag/diag_masks.c index 4697f1912976..ba1140006537 100644 --- a/drivers/char/diag/diag_masks.c +++ b/drivers/char/diag/diag_masks.c @@ -1480,7 +1480,7 @@ static int diag_cmd_update_event_mask(unsigned char *src_buf, int src_len, struct diag_event_mask_config_t rsp; struct diag_event_mask_config_t *req; struct diag_event_mask_config_sub_t rsp_sub; - struct diag_event_mask_config_sub_t *req_sub; + struct diag_event_mask_config_sub_t *req_sub = NULL; struct diag_mask_info *mask_info = NULL; struct diag_md_session_t *info = NULL; struct diag_multisim_masks *ms_ptr = NULL; diff --git a/drivers/char/diag/diag_memorydevice.c b/drivers/char/diag/diag_memorydevice.c index 8f090854f887..fcfaa42c1c13 100644 --- a/drivers/char/diag/diag_memorydevice.c +++ b/drivers/char/diag/diag_memorydevice.c @@ -210,7 +210,7 @@ int diag_md_write(int id, unsigned char *buf, int len, int ctx) { int i, peripheral, pid = 0, type = 0; uint8_t found = 0; - unsigned long flags, flags_sec; + unsigned long flags, flags_sec = 0; struct diag_md_info *ch = NULL; struct diag_md_session_t *session_info = NULL; diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c index 183b62296208..0f9f519252c2 100644 --- a/drivers/cpufreq/qcom-cpufreq-hw.c +++ b/drivers/cpufreq/qcom-cpufreq-hw.c @@ -464,7 +464,7 @@ static int qcom_cpufreq_hw_read_lut(struct platform_device *pdev, { struct device *dev = &pdev->dev, *cpu_dev; void __iomem *base_freq, *base_volt; - u32 data, src, lval, i, core_count, prev_cc, prev_freq, cur_freq, volt; + u32 data, src, lval, i, core_count, prev_cc, prev_freq = 0, cur_freq, volt; u32 vc; unsigned long cpu; int ret, of_len; diff --git a/drivers/esoc/esoc_dev.c b/drivers/esoc/esoc_dev.c index 04e7a644e666..601589644596 100644 --- a/drivers/esoc/esoc_dev.c +++ b/drivers/esoc/esoc_dev.c @@ -220,7 +220,7 @@ static long esoc_dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int err; - u32 esoc_cmd, status, req, evt; + u32 esoc_cmd, status, req = 0, evt; struct esoc_uhandle *uhandle = file->private_data; struct esoc_udev *esoc_udev = uhandle->esoc_udev; struct esoc_clink *esoc_clink = uhandle->esoc_clink; diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c index af5139eb96b5..ed2a5dcb50d4 100644 --- a/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c @@ -507,7 +507,7 @@ int scmi_version_get(const struct scmi_handle *handle, u8 protocol, { int ret; __le32 *rev_info; - struct scmi_xfer *t; + struct scmi_xfer *t = NULL; ret = scmi_xfer_get_init(handle, PROTOCOL_VERSION, protocol, 0, sizeof(*version), &t); diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c index 05c617bffb15..68a439722083 100644 --- a/drivers/input/evdev.c +++ b/drivers/input/evdev.c @@ -1038,7 +1038,7 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd, struct evdev_client *client = file->private_data; struct evdev *evdev = client->evdev; struct input_dev *dev = evdev->handle.dev; - struct input_absinfo abs; + struct input_absinfo abs = { 0 }; struct input_mask mask; struct ff_effect effect; int __user *ip = (int __user *)p; diff --git a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c index 70cfa215ca59..a1e309e6182e 100644 --- a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c +++ b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_core.c @@ -4560,7 +4560,7 @@ EXPORT_SYMBOL(synaptics_rmi4_new_function); static int synaptics_rmi4_probe(struct platform_device *pdev) { - int retval; + int retval = 0; struct synaptics_rmi4_data *rmi4_data; const struct synaptics_dsx_hw_interface *hw_if; const struct synaptics_dsx_board_data *bdata; diff --git a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_test_reporting.c b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_test_reporting.c index 3a0be3cbb66a..6b1acff5c5da 100755 --- a/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_test_reporting.c +++ b/drivers/input/touchscreen/synaptics_dsx/synaptics_dsx_test_reporting.c @@ -3200,7 +3200,7 @@ static void test_set_data(void) static int test_set_controls(void) { int retval; - unsigned char length; + unsigned char length = '\0'; unsigned char num_of_sensing_freqs; unsigned short reg_addr = f54->control_base_addr; struct f54_control *control = &f54->control; diff --git a/drivers/media/dvb-core/dvb_demux.c b/drivers/media/dvb-core/dvb_demux.c index a0cfe74b9523..04ee361fbe30 100644 --- a/drivers/media/dvb-core/dvb_demux.c +++ b/drivers/media/dvb-core/dvb_demux.c @@ -1674,7 +1674,7 @@ static inline void _dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, { int p = 0, i = 0, j = 0; const u8 *q; - ktime_t pre_time; + ktime_t pre_time = 0; u8 timestamp[TIMESTAMP_LEN]; unsigned long flags; diff --git a/drivers/media/platform/msm/cvp/msm_cvp.c b/drivers/media/platform/msm/cvp/msm_cvp.c index 9d930d17d020..9a8d0c9ec9de 100644 --- a/drivers/media/platform/msm/cvp/msm_cvp.c +++ b/drivers/media/platform/msm/cvp/msm_cvp.c @@ -768,7 +768,7 @@ static int msm_cvp_map_buf(struct msm_cvp_inst *inst, int i, rc = 0; u32 version; unsigned int iova; - u64 ktid; + u64 ktid = 0; struct msm_cvp_frame *frame; version = get_hfi_version(); diff --git a/drivers/media/platform/msm/cvp/msm_v4l2_private.c b/drivers/media/platform/msm/cvp/msm_v4l2_private.c index a3e65a14a0fe..1e6adecb4c17 100644 --- a/drivers/media/platform/msm/cvp/msm_v4l2_private.c +++ b/drivers/media/platform/msm/cvp/msm_v4l2_private.c @@ -199,7 +199,7 @@ static void _set_deprecate_bitmask(struct cvp_kmd_arg *kp, static void print_hfi_short(struct cvp_kmd_arg __user *up) { struct cvp_kmd_hfi_packet *pkt; - unsigned int words[5]; + unsigned int words[5] = { 0 }; pkt = &up->data.hfi_pkt; if (get_user(words[0], &up->type) || diff --git a/drivers/media/radio/rtc6226/radio-rtc6226-common.c b/drivers/media/radio/rtc6226/radio-rtc6226-common.c index 2766bfe0c88d..db7ced4bbf20 100644 --- a/drivers/media/radio/rtc6226/radio-rtc6226-common.c +++ b/drivers/media/radio/rtc6226/radio-rtc6226-common.c @@ -806,7 +806,7 @@ static void rtc6226_update_af_list(struct rtc6226_device *radio) u8 i = 0; u8 af_data = radio->block[2] >> 8; u32 af_freq_khz; - u32 tuned_freq_khz; + u32 tuned_freq_khz = 0; struct kfifo *buff; struct af_list_ev ev; spinlock_t lock = radio->buf_lock[RTC6226_FM_BUF_AF_LIST]; @@ -2238,7 +2238,7 @@ static int rtc6226_vidioc_g_frequency(struct file *file, void *priv, { struct rtc6226_device *radio = video_drvdata(file); int retval = 0; - unsigned int frq; + unsigned int frq = 0; FMDBG("%s enter freq %d\n", __func__, freq->frequency); diff --git a/drivers/misc/max31760.c b/drivers/misc/max31760.c index 3d7b1726faf9..3f15c61d7d04 100644 --- a/drivers/misc/max31760.c +++ b/drivers/misc/max31760.c @@ -211,7 +211,7 @@ static int max31760_parse_dt(struct device *dev, static int max31760_fan_pwr_enable_vregs(struct device *dev, struct max31760 *pdata) { - int ret; + int ret = 0; struct regulator *reg; /* Fan Control LDO L10A */ @@ -248,7 +248,7 @@ static const struct regmap_config max31760_regmap = { static int max31760_probe(struct i2c_client *client, const struct i2c_device_id *id) { - int ret; + int ret = 0; struct max31760 *pdata; if (!client || !client->dev.of_node) { diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c index 18d335c5b791..18c3705f90ab 100644 --- a/drivers/misc/uid_sys_stats.c +++ b/drivers/misc/uid_sys_stats.c @@ -540,7 +540,7 @@ static ssize_t uid_remove_write(struct file *file, { struct uid_entry *uid_entry; struct hlist_node *tmp; - char uids[128]; + char uids[128] = "0"; char *start_uid, *end_uid = NULL; uid_t uid_start = 0, uid_end = 0; u64 uid; @@ -720,7 +720,7 @@ static ssize_t uid_procstat_write(struct file *file, struct uid_entry *uid_entry; uid_t uid; int argc, state; - char input[128]; + char input[128] = "0"; if (count >= sizeof(input)) return -EINVAL; diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c index 8269e6b769fe..601d02a0b78a 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_command.c @@ -205,7 +205,7 @@ static void rmnet_map_process_flow_end(struct sk_buff *skb, bool rmnet_perf) { struct rmnet_map_dl_ind_trl *dltrl; - struct rmnet_map_control_command_header *qcmd; + struct rmnet_map_control_command_header *qcmd = NULL; u32 data_format; bool is_dl_mark_v2; diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 89a241569677..46386e3059dc 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2922,7 +2922,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd, struct net *net = sock_net(&tfile->sk); struct tun_struct *tun; void __user* argp = (void __user*)arg; - struct ifreq ifr; + struct ifreq ifr = { 0 }; kuid_t owner; kgid_t group; int sndbuf; diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 5dd31706dd9d..966b0b0f2080 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -579,7 +579,7 @@ static void lan78xx_update_stats(struct lan78xx_net *dev) u32 *p, *count, *max; u64 *data; int i; - struct lan78xx_statstage lan78xx_stats; + struct lan78xx_statstage lan78xx_stats = { 0 }; if (usb_autopm_get_interface(dev->intf) < 0) return; @@ -1933,7 +1933,7 @@ static void lan78xx_irq_bus_sync_unlock(struct irq_data *irqd) struct irq_domain_data *data = irq_data_get_irq_chip_data(irqd); struct lan78xx_net *dev = container_of(data, struct lan78xx_net, domain_data); - u32 buf; + u32 buf = 0; int ret; /* call register access here because irq_bus_lock & irq_bus_sync_unlock diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index b0345945f6df..4a85c407a145 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -4635,7 +4635,7 @@ static void cnss_mhi_notify_status(struct mhi_controller *mhi_ctrl, void *priv, { struct cnss_pci_data *pci_priv = priv; struct cnss_plat_data *plat_priv; - enum cnss_recovery_reason cnss_reason; + enum cnss_recovery_reason cnss_reason = 0; if (!pci_priv) { cnss_pr_err("pci_priv is NULL"); diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 8736d233cfc3..618d5463c852 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -69,7 +69,7 @@ static ssize_t bin_attr_nvmem_cell_read(struct file *filp, struct kobject *kobj, char *buf, loff_t pos, size_t count) { struct nvmem_cell *cell; - size_t len; + size_t len = 0; u8 *data; cell = attr->private; diff --git a/drivers/perf/qcom_llcc_pmu.c b/drivers/perf/qcom_llcc_pmu.c index accab0b4f846..4e7941a427fb 100644 --- a/drivers/perf/qcom_llcc_pmu.c +++ b/drivers/perf/qcom_llcc_pmu.c @@ -116,7 +116,7 @@ static void mon_enable(struct llcc_pmu *llccpmu, int cpu) static unsigned long read_cnt(struct llcc_pmu *llccpmu, int cpu) { - unsigned long value; + unsigned long value = 0; if (!llccpmu->ver) { pr_err("LLCCPMU version not correct\n"); diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c index 20a98727e2ee..45a432db257e 100644 --- a/drivers/pinctrl/qcom/pinctrl-msm.c +++ b/drivers/pinctrl/qcom/pinctrl-msm.c @@ -1291,7 +1291,7 @@ static int msm_gpio_domain_alloc(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs, void *arg) { int ret; - irq_hw_number_t hwirq; + irq_hw_number_t hwirq = 0; struct gpio_chip *gc = domain->host_data; struct msm_pinctrl *pctrl = gpiochip_get_data(gc); struct irq_fwspec *fwspec = arg; diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_wigig.c b/drivers/platform/msm/ipa/ipa_clients/ipa_wigig.c index 500ab5b25280..a723208eefca 100644 --- a/drivers/platform/msm/ipa/ipa_clients/ipa_wigig.c +++ b/drivers/platform/msm/ipa/ipa_clients/ipa_wigig.c @@ -1347,7 +1347,7 @@ static int ipa_wigig_store_client_smmu_info (struct ipa_wigig_conn_tx_in_params_smmu *in, enum ipa_client_type client) { int ret; - unsigned int idx; + unsigned int idx = 0; IPA_WIGIG_DBG("\n"); @@ -1398,7 +1398,7 @@ static int ipa_wigig_get_tx_smmu_info( struct ipa_wigig_tx_pipe_data_buffer_info_smmu **dbuff_smmu, enum ipa_client_type client) { - unsigned int idx; + unsigned int idx = 0; int ret; ret = ipa_wigig_client_to_idx(client, &idx); @@ -1427,7 +1427,7 @@ static int ipa_wigig_clean_smmu_info(enum ipa_client_type client) if (!ipa_wigig_ctx->shared_cb) ipa_wigig_clean_rx_buff_smmu_info(); } else { - unsigned int idx; + unsigned int idx = 0; ret = ipa_wigig_client_to_idx(client, &idx); if (ret) @@ -1574,7 +1574,7 @@ EXPORT_SYMBOL(ipa_wigig_set_perf_profile); static int ipa_wigig_store_client_mac(enum ipa_client_type client, const char *mac) { - unsigned int idx; + unsigned int idx = 0; if (ipa_wigig_client_to_idx(client, &idx)) { IPA_WIGIG_ERR("couldn't acquire idx\n"); @@ -1586,7 +1586,7 @@ static int ipa_wigig_store_client_mac(enum ipa_client_type client, static int ipa_wigig_get_client_mac(enum ipa_client_type client, char *mac) { - unsigned int idx; + unsigned int idx = 0; if (ipa_wigig_client_to_idx(client, &idx)) { IPA_WIGIG_ERR("couldn't acquire idx\n"); @@ -1607,7 +1607,7 @@ int ipa_wigig_conn_client(struct ipa_wigig_conn_tx_in_params *in, struct ipa_wigig_conn_out_params *out) { char dev_name[IPA_RESOURCE_NAME_MAX]; - unsigned int idx; + unsigned int idx = 0; IPA_WIGIG_DBG("\n"); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c b/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c index 0842d11ea233..6d7b7de9de0b 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c @@ -1696,7 +1696,7 @@ static enum mhip_status_type ipa_mpm_start_stop_mhip_chan( int probe_id, enum ipa_mpm_start_stop_type start_stop) { - int ipa_ep_idx; + int ipa_ep_idx = 0; struct ipa3_ep_context *ep; bool is_start; enum ipa_client_type ul_chan, dl_chan; @@ -2829,7 +2829,7 @@ int ipa_mpm_mhip_xdci_pipe_enable(enum ipa_usb_teth_prot xdci_teth_prot) int probe_id = IPA_MPM_MHIP_CH_ID_MAX; int i; enum ipa_mpm_mhip_client_type mhip_client; - enum mhip_status_type status; + enum mhip_status_type status = 0; int pipe_idx; bool is_acted = true; int ret = 0; diff --git a/drivers/platform/msm/sps/sps_bam.c b/drivers/platform/msm/sps/sps_bam.c index c0c9ae60eea2..c54624cc62cb 100644 --- a/drivers/platform/msm/sps/sps_bam.c +++ b/drivers/platform/msm/sps/sps_bam.c @@ -266,7 +266,7 @@ int sps_bam_enable(struct sps_bam *dev) { u32 num_pipes; u32 irq_mask; - int result; + int result = 0; int rc; int MTIenabled; @@ -1548,7 +1548,7 @@ int sps_bam_pipe_transfer(struct sps_bam *dev, u32 pipe_index, struct sps_transfer *transfer) { struct sps_iovec *iovec; - u32 count; + u32 count = 0; u32 flags; void *user; int n; diff --git a/drivers/soc/qcom/dcc_v2.c b/drivers/soc/qcom/dcc_v2.c index 4ddf7ef5edc9..a419d0fcbe66 100644 --- a/drivers/soc/qcom/dcc_v2.c +++ b/drivers/soc/qcom/dcc_v2.c @@ -343,19 +343,19 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata, int curr_list) ret = dcc_sram_writel(drvdata, addr, sram_offset); if (ret) goto overstep; - sram_offset += 4; - + sram_offset += 4; + ret = dcc_sram_writel(drvdata, entry->mask, sram_offset); if (ret) goto overstep; - sram_offset += 4; + sram_offset += 4; ret = dcc_sram_writel(drvdata, entry->write_val, sram_offset); if (ret) goto overstep; - sram_offset += 4; + sram_offset += 4; addr = 0; break; } @@ -438,18 +438,18 @@ static int __dcc_ll_cfg(struct dcc_drvdata *drvdata, int curr_list) ret = dcc_sram_writel(drvdata, addr, sram_offset); if (ret) goto overstep; - sram_offset += 4; + sram_offset += 4; ret = dcc_sram_writel(drvdata, link, sram_offset); if (ret) goto overstep; - sram_offset += 4; + sram_offset += 4; ret = dcc_sram_writel(drvdata, entry->write_val, sram_offset); if (ret) goto overstep; - sram_offset += 4; + sram_offset += 4; addr = 0x00; link = 0; break; diff --git a/drivers/soc/qcom/msm_bus/msm_bus_arb_rpmh.c b/drivers/soc/qcom/msm_bus/msm_bus_arb_rpmh.c index e07d6820cb74..2e7381e7f3f3 100644 --- a/drivers/soc/qcom/msm_bus/msm_bus_arb_rpmh.c +++ b/drivers/soc/qcom/msm_bus/msm_bus_arb_rpmh.c @@ -1400,7 +1400,7 @@ static int update_client_alc(struct msm_bus_client *client, bool log_trns, { int lnode, cur_idx; uint64_t req_idle_time, req_fal, dual_idle_time, dual_fal, - cur_idle_time, cur_fal; + cur_idle_time = 0, cur_fal = 0; int ret = 0; struct msm_bus_scale_pdata *pdata; struct device *src_dev; diff --git a/drivers/staging/qca-wifi-host-cmn/hif/src/ce/ce_main.c b/drivers/staging/qca-wifi-host-cmn/hif/src/ce/ce_main.c index ccf04ce52f13..f74efa48cc83 100644 --- a/drivers/staging/qca-wifi-host-cmn/hif/src/ce/ce_main.c +++ b/drivers/staging/qca-wifi-host-cmn/hif/src/ce/ce_main.c @@ -905,8 +905,8 @@ static void hif_select_service_to_pipe_map(struct hif_softc *scn, */ static bool ce_mark_datapath(struct CE_state *ce_state) { - struct service_to_pipe *svc_map; - uint32_t map_sz, map_len; + struct service_to_pipe *svc_map = NULL; + uint32_t map_sz = 0, map_len; int i; bool rc = false; diff --git a/drivers/staging/qca-wifi-host-cmn/wmi/src/wmi_unified.c b/drivers/staging/qca-wifi-host-cmn/wmi/src/wmi_unified.c index e48f75b11661..dd15d72688d7 100644 --- a/drivers/staging/qca-wifi-host-cmn/wmi/src/wmi_unified.c +++ b/drivers/staging/qca-wifi-host-cmn/wmi/src/wmi_unified.c @@ -1233,7 +1233,7 @@ static int debug_wmi_log_size_show(struct seq_file *m, void *v) ((struct seq_file *)file->private_data)->private;\ struct wmi_log_buf_t *wmi_log = &wmi_handle->log_info. \ wmi_##func_base##_buf_info; \ - char locbuf[50]; \ + char locbuf[50] = "0"; \ \ if ((!buf) || (count > 50)) \ return -EFAULT; \ @@ -1289,7 +1289,7 @@ static ssize_t debug_wmi_enable_write(struct file *file, const char __user *buf, wmi_unified_t wmi_handle = ((struct seq_file *)file->private_data)->private; int k, ret; - char locbuf[50]; + char locbuf[50] = "0"; if ((!buf) || (count > 50)) return -EFAULT; diff --git a/drivers/staging/qcacld-3.0/core/sme/src/csr/csr_api_roam.c b/drivers/staging/qcacld-3.0/core/sme/src/csr/csr_api_roam.c index 53808203764c..389a304d05c0 100644 --- a/drivers/staging/qcacld-3.0/core/sme/src/csr/csr_api_roam.c +++ b/drivers/staging/qcacld-3.0/core/sme/src/csr/csr_api_roam.c @@ -11069,7 +11069,7 @@ void csr_roam_joined_state_msg_processor(struct mac_context *mac, void *msg_buf) struct csr_roam_session *pSession; tSirSmeAssocIndToUpperLayerCnf *pUpperLayerAssocCnf; struct csr_roam_info *roam_info; - uint32_t sessionId; + uint32_t sessionId = 0; QDF_STATUS status; sme_debug("ASSOCIATION confirmation can be given to upper layer "); diff --git a/drivers/staging/qcacld-3.0/os_if/sync/src/osif_driver_sync.c b/drivers/staging/qcacld-3.0/os_if/sync/src/osif_driver_sync.c index d28bf64fcddb..375bab24b03c 100644 --- a/drivers/staging/qcacld-3.0/os_if/sync/src/osif_driver_sync.c +++ b/drivers/staging/qcacld-3.0/os_if/sync/src/osif_driver_sync.c @@ -113,7 +113,7 @@ int __osif_driver_sync_create_and_trans(struct osif_driver_sync **out_driver_sync, const char *desc) { - struct osif_driver_sync *driver_sync; + struct osif_driver_sync *driver_sync = NULL; QDF_STATUS status; int errno; diff --git a/drivers/staging/qcacld-3.0/os_if/sync/src/osif_psoc_sync.c b/drivers/staging/qcacld-3.0/os_if/sync/src/osif_psoc_sync.c index 71ca1eb12a1b..0cce60ba11b7 100644 --- a/drivers/staging/qcacld-3.0/os_if/sync/src/osif_psoc_sync.c +++ b/drivers/staging/qcacld-3.0/os_if/sync/src/osif_psoc_sync.c @@ -127,7 +127,7 @@ int osif_psoc_sync_create(struct osif_psoc_sync **out_psoc_sync) int __osif_psoc_sync_create_and_trans(struct osif_psoc_sync **out_psoc_sync, const char *desc) { - struct osif_psoc_sync *psoc_sync; + struct osif_psoc_sync *psoc_sync = NULL; QDF_STATUS status; int errno; diff --git a/drivers/usb/gadget/function/f_qdss.h b/drivers/usb/gadget/function/f_qdss.h index 1c638dd3cd5c..8226213ed20c 100644 --- a/drivers/usb/gadget/function/f_qdss.h +++ b/drivers/usb/gadget/function/f_qdss.h @@ -65,7 +65,7 @@ struct f_qdss { bool qdss_close; }; -static void *_qdss_ipc_log; +static void *_qdss_ipc_log __maybe_unused; #define NUM_PAGES 10 /* # of pages for ipc logging */ diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c index 737b765d0f6e..38f9356eaced 100644 --- a/drivers/usb/storage/transport.c +++ b/drivers/usb/storage/transport.c @@ -461,7 +461,7 @@ static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe, int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe, struct scsi_cmnd* srb) { - unsigned int partial; + unsigned int partial = 0; int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb), scsi_sg_count(srb), scsi_bufflen(srb), &partial); @@ -484,7 +484,7 @@ int usb_stor_bulk_transfer_sg(struct us_data* us, unsigned int pipe, void *buf, unsigned int length_left, int use_sg, int *residual) { int result; - unsigned int partial; + unsigned int partial = 0; /* are we scatter-gathering? */ if (use_sg) { diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 27a04f492541..e03cb35730e8 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c @@ -523,7 +523,7 @@ static Node *create_entry(const char __user *buffer, size_t count) */ static int parse_command(const char __user *buffer, size_t count) { - char s[4]; + char s[4] = "0"; if (count > 3) return -EINVAL; diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index f0e5fe53bf0a..1a9bfb72161b 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -3434,7 +3434,7 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, struct ext4_sb_info *sbi; struct ext4_extent_header *eh; struct ext4_map_blocks split_map; - struct ext4_extent zero_ex1, zero_ex2; + struct ext4_extent zero_ex1 = { 0 }, zero_ex2 = { 0 }; struct ext4_extent *ex, *abut_ex; ext4_lblk_t ee_block, eof_block; unsigned int ee_len, depth, map_len = map->m_len; diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index d51f23cfda86..aef3c8fc50d2 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h @@ -454,7 +454,7 @@ struct pin_cookie { }; #define NIL_COOKIE (struct pin_cookie){ } -#define lockdep_pin_lock(l) ({ struct pin_cookie cookie; cookie; }) +#define lockdep_pin_lock(l) ({ struct pin_cookie cookie = { }; cookie; }) #define lockdep_repin_lock(l, c) do { (void)(l); (void)(c); } while (0) #define lockdep_unpin_lock(l, c) do { (void)(l); (void)(c); } while (0) diff --git a/include/linux/sched.h b/include/linux/sched.h index 00e86db8c873..cffe1abc4e65 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -109,9 +109,6 @@ struct task_group; #define task_is_stopped_or_traced(task) ((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0) -#define task_contributes_to_load(task) ((task->state & TASK_UNINTERRUPTIBLE) != 0 && \ - (task->flags & PF_FROZEN) == 0 && \ - (task->state & TASK_NOLOAD) == 0) enum task_boost_type { TASK_BOOST_NONE = 0, @@ -1809,6 +1806,11 @@ static inline bool cpupri_check_rt(void) } #endif +void sched_migrate_to_cpumask_start(struct cpumask *old_mask, + const struct cpumask *dest); +void sched_migrate_to_cpumask_end(const struct cpumask *old_mask, + const struct cpumask *dest); + #ifndef cpu_relax_yield #define cpu_relax_yield() cpu_relax() #endif @@ -2075,7 +2077,6 @@ static inline void set_task_cpu(struct task_struct *p, unsigned int cpu) # define vcpu_is_preempted(cpu) false #endif -extern long msm_sched_setaffinity(pid_t pid, struct cpumask *new_mask); extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask); extern long sched_getaffinity(pid_t pid, struct cpumask *mask); diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h index a41d954de370..7e880dd6136f 100644 --- a/include/linux/sched/sysctl.h +++ b/include/linux/sched/sysctl.h @@ -159,7 +159,6 @@ extern int sysctl_numa_balancing(struct ctl_table *table, int write, extern int sysctl_schedstats(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); - #define LIB_PATH_LENGTH 512 extern char sched_lib_name[LIB_PATH_LENGTH]; extern unsigned int sched_lib_mask_force; diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 471cc5c117a5..f5c2d50a704a 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -1368,7 +1368,7 @@ static int btf_array_check_member(struct btf_verifier_env *env, { u32 struct_bits_off = member->offset; u32 struct_size, bytes_offset; - u32 array_type_id, array_size; + u32 array_type_id, array_size = 0; struct btf *btf = env->btf; if (BITS_PER_BYTE_MASKED(struct_bits_off)) { diff --git a/kernel/sched/core.c b/kernel/sched/core.c index a1b590b72fde..8fbc5dc84010 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -30,22 +30,6 @@ DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues); -#ifdef CONFIG_SCHED_DEBUG -/* - * Debugging: various feature bits - * - * If SCHED_DEBUG is disabled, each compilation unit has its own copy of - * sysctl_sched_features, defined in sched.h, to allow constants propagation - * at compile time and compiler optimization based on features default. - */ -#define SCHED_FEAT(name, enabled) \ - (1UL << __SCHED_FEAT_##name) * enabled | -const_debug unsigned int sysctl_sched_features = -#include "features.h" - 0; -#undef SCHED_FEAT -#endif - /* * Number of tasks to iterate in a single balance run. * Limited because this is done with IRQs disabled. @@ -1352,17 +1336,11 @@ static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags) void activate_task(struct rq *rq, struct task_struct *p, int flags) { - if (task_contributes_to_load(p)) - rq->nr_uninterruptible--; - enqueue_task(rq, p, flags); } void deactivate_task(struct rq *rq, struct task_struct *p, int flags) { - if (task_contributes_to_load(p)) - rq->nr_uninterruptible++; - if (flags & DEQUEUE_SLEEP) clear_ed_task(p, rq); @@ -1936,6 +1914,48 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, return ret; } +/* + * Calls to sched_migrate_to_cpumask_start() cannot nest. This can only be used + * in process context. + */ +void sched_migrate_to_cpumask_start(struct cpumask *old_mask, + const struct cpumask *dest) +{ + struct task_struct *p = current; + + raw_spin_lock_irq(&p->pi_lock); + *cpumask_bits(old_mask) = *cpumask_bits(&p->cpus_allowed); + raw_spin_unlock_irq(&p->pi_lock); + + /* + * This will force the current task onto the destination cpumask. It + * will sleep when a migration to another CPU is actually needed. + */ + set_cpus_allowed_ptr(p, dest); +} + +void sched_migrate_to_cpumask_end(const struct cpumask *old_mask, + const struct cpumask *dest) +{ + struct task_struct *p = current; + + /* + * Check that cpus_allowed didn't change from what it was temporarily + * set to earlier. If so, we can go ahead and lazily restore the old + * cpumask. There's no need to immediately migrate right now. + */ + raw_spin_lock_irq(&p->pi_lock); + if (*cpumask_bits(&p->cpus_allowed) == *cpumask_bits(dest)) { + struct rq *rq = this_rq(); + + raw_spin_lock(&rq->lock); + update_rq_clock(rq); + do_set_cpus_allowed(p, old_mask); + raw_spin_unlock(&rq->lock); + } + raw_spin_unlock_irq(&p->pi_lock); +} + /* * wait_task_inactive - wait for a thread to unschedule. * @@ -2360,13 +2380,18 @@ ttwu_do_activate(struct rq *rq, struct task_struct *p, int wake_flags, lockdep_assert_held(&rq->lock); -#ifdef CONFIG_SMP if (p->sched_contributes_to_load) rq->nr_uninterruptible--; +#ifdef CONFIG_SMP if (wake_flags & WF_MIGRATED) en_flags |= ENQUEUE_MIGRATED; + else #endif + if (p->in_iowait) { + delayacct_blkio_end(p); + atomic_dec(&task_rq(p)->nr_iowait); + } ttwu_activate(rq, p, en_flags); ttwu_do_wakeup(rq, p, wake_flags, rf); @@ -2397,6 +2422,7 @@ static int ttwu_remote(struct task_struct *p, int wake_flags) } #ifdef CONFIG_SMP +#if SCHED_FEAT_TTWU_QUEUE void sched_ttwu_pending(void) { struct rq *rq = this_rq(); @@ -2410,11 +2436,19 @@ void sched_ttwu_pending(void) rq_lock_irqsave(rq, &rf); update_rq_clock(rq); - llist_for_each_entry_safe(p, t, llist, wake_entry) + llist_for_each_entry_safe(p, t, llist, wake_entry) { + if (WARN_ON_ONCE(p->on_cpu)) + smp_cond_load_acquire(&p->on_cpu, !VAL); + + if (WARN_ON_ONCE(task_cpu(p) != cpu_of(rq))) + set_task_cpu(p, cpu_of(rq)); + ttwu_do_activate(rq, p, p->sched_remote_wakeup ? WF_MIGRATED : 0, &rf); + } rq_unlock_irqrestore(rq, &rf); } +#endif void scheduler_ipi(void) { @@ -2426,8 +2460,13 @@ void scheduler_ipi(void) */ preempt_fold_need_resched(); +#if SCHED_FEAT_TTWU_QUEUE if (llist_empty(&this_rq()->wake_list) && !got_nohz_idle_kick()) return; +#else + if (!got_nohz_idle_kick()) + return; +#endif /* * Not all reschedule IPI handlers call irq_enter/irq_exit, since @@ -2455,7 +2494,24 @@ void scheduler_ipi(void) irq_exit(); } -static void ttwu_queue_remote(struct task_struct *p, int cpu, int wake_flags) +void send_call_function_single_ipi(int cpu) +{ + struct rq *rq = cpu_rq(cpu); + + if (!set_nr_if_polling(rq->idle)) + arch_send_call_function_single_ipi(cpu); + else + trace_sched_wake_idle_without_ipi(cpu); +} + +#if SCHED_FEAT_TTWU_QUEUE +/* + * Queue a task on the target CPUs wake_list and wake the CPU via IPI if + * necessary. The wakee CPU on receipt of the IPI will queue the task + * via sched_ttwu_wakeup() for activation so the wakee incurs the cost + * of the wakeup instead of the waker. + */ +static void __ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags) { struct rq *rq = cpu_rq(cpu); @@ -2468,6 +2524,7 @@ static void ttwu_queue_remote(struct task_struct *p, int cpu, int wake_flags) trace_sched_wake_idle_without_ipi(cpu); } } +#endif void wake_up_if_idle(int cpu) { @@ -2497,6 +2554,43 @@ bool cpus_share_cache(int this_cpu, int that_cpu) { return per_cpu(sd_llc_id, this_cpu) == per_cpu(sd_llc_id, that_cpu); } + +#if SCHED_FEAT_TTWU_QUEUE +static inline bool ttwu_queue_cond(int cpu, int wake_flags) +{ + /* + * If the CPU does not share cache, then queue the task on the + * remote rqs wakelist to avoid accessing remote data. + */ + if (!cpus_share_cache(smp_processor_id(), cpu)) + return true; + + /* + * If the task is descheduling and the only running task on the + * CPU then use the wakelist to offload the task activation to + * the soon-to-be-idle CPU as the current CPU is likely busy. + * nr_running is checked to avoid unnecessary task stacking. + */ + if ((wake_flags & WF_ON_RQ) && cpu_rq(cpu)->nr_running <= 1) + return true; + + return false; +} + +static bool ttwu_queue_wakelist(struct task_struct *p, int cpu, int wake_flags) +{ + if (sched_feat(TTWU_QUEUE) && ttwu_queue_cond(cpu, wake_flags)) { + if (WARN_ON_ONCE(cpu == smp_processor_id())) + return false; + + sched_clock_cpu(cpu); /* Sync clocks across CPUs */ + __ttwu_queue_wakelist(p, cpu, wake_flags); + return true; + } + + return false; +} +#endif #endif /* CONFIG_SMP */ static void ttwu_queue(struct task_struct *p, int cpu, int wake_flags) @@ -2505,11 +2599,10 @@ static void ttwu_queue(struct task_struct *p, int cpu, int wake_flags) struct rq_flags rf; #if defined(CONFIG_SMP) - if (sched_feat(TTWU_QUEUE) && !cpus_share_cache(smp_processor_id(), cpu)) { - sched_clock_cpu(cpu); /* Sync clocks across CPUs */ - ttwu_queue_remote(p, cpu, wake_flags); +#if SCHED_FEAT_TTWU_QUEUE + if (ttwu_queue_wakelist(p, cpu, wake_flags)) return; - } +#endif #endif rq_lock(rq, &rf); @@ -2659,6 +2752,29 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, unsigned long flags; int cpu, success = 0; + preempt_disable(); + if (p == current) { + /* + * We're waking current, this means 'p->on_rq' and 'task_cpu(p) + * == smp_processor_id()'. Together this means we can special + * case the whole 'p->on_rq && ttwu_remote()' case below + * without taking any locks. + * + * In particular: + * - we rely on Program-Order guarantees for all the ordering, + * - we're serialized against set_special_state() by virtue of + * it disabling IRQs (this allows not taking ->pi_lock). + */ + if (!(p->state & state)) + goto out; + + success = 1; + trace_sched_waking(p); + p->state = TASK_RUNNING; + trace_sched_wakeup(p); + goto out; + } + /* * If we are going to wake up a thread waiting for CONDITION we * need to ensure that CONDITION=1 done by the caller can not be @@ -2668,13 +2784,12 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, raw_spin_lock_irqsave(&p->pi_lock, flags); smp_mb__after_spinlock(); if (!(p->state & state)) - goto out; + goto unlock; trace_sched_waking(p); /* We're going to change ->state: */ success = 1; - cpu = task_cpu(p); /* * Ensure we load p->on_rq _after_ p->state, otherwise it would @@ -2697,8 +2812,8 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, * __schedule(). See the comment for smp_mb__after_spinlock(). */ smp_rmb(); - if (p->on_rq && ttwu_remote(p, wake_flags)) - goto stat; + if (READ_ONCE(p->on_rq) && ttwu_remote(p, wake_flags)) + goto unlock; #ifdef CONFIG_SMP /* @@ -2719,8 +2834,45 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, * * Pairs with the LOCK+smp_mb__after_spinlock() on rq->lock in * __schedule(). See the comment for smp_mb__after_spinlock(). + * + * Form a control-dep-acquire with p->on_rq == 0 above, to ensure + * schedule()'s deactivate_task() has 'happened' and p will no longer + * care about it's own p->state. See the comment in __schedule(). */ - smp_rmb(); + smp_acquire__after_ctrl_dep(); + + /* + * We're doing the wakeup (@success == 1), they did a dequeue (p->on_rq + * == 0), which means we need to do an enqueue, change p->state to + * TASK_WAKING such that we can unlock p->pi_lock before doing the + * enqueue, such as ttwu_queue_wakelist(). + */ + p->state = TASK_WAKING; + +#if SCHED_FEAT_TTWU_QUEUE + /* + * If the owning (remote) CPU is still in the middle of schedule() with + * this task as prev, considering queueing p on the remote CPUs wake_list + * which potentially sends an IPI instead of spinning on p->on_cpu to + * let the waker make forward progress. This is safe because IRQs are + * disabled and the IPI will deliver after on_cpu is cleared. + * + * Ensure we load task_cpu(p) after p->on_cpu: + * + * set_task_cpu(p, cpu); + * STORE p->cpu = @cpu + * __schedule() (switch to task 'p') + * LOCK rq->lock + * smp_mb__after_spin_lock() smp_cond_load_acquire(&p->on_cpu) + * STORE p->on_cpu = 1 LOAD p->cpu + * + * to ensure we observe the correct CPU on which the task is currently + * scheduling. + */ + if (smp_load_acquire(&p->on_cpu) && + ttwu_queue_wakelist(p, task_cpu(p), wake_flags | WF_ON_RQ)) + goto unlock; +#endif /* * If the owning (remote) CPU is still in the middle of schedule() with @@ -2735,36 +2887,29 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags, walt_try_to_wake_up(p); - p->sched_contributes_to_load = !!task_contributes_to_load(p); - p->state = TASK_WAKING; - - if (p->in_iowait) { - delayacct_blkio_end(p); - atomic_dec(&task_rq(p)->nr_iowait); - } - cpu = select_task_rq(p, p->wake_cpu, SD_BALANCE_WAKE, wake_flags, sibling_count_hint); if (task_cpu(p) != cpu) { + if (p->in_iowait) { + delayacct_blkio_end(p); + atomic_dec(&task_rq(p)->nr_iowait); + } + wake_flags |= WF_MIGRATED; psi_ttwu_dequeue(p); set_task_cpu(p, cpu); } - -#else /* CONFIG_SMP */ - - if (p->in_iowait) { - delayacct_blkio_end(p); - atomic_dec(&task_rq(p)->nr_iowait); - } - +#else + cpu = task_cpu(p); #endif /* CONFIG_SMP */ ttwu_queue(p, cpu, wake_flags); -stat: - ttwu_stat(p, cpu, wake_flags); -out: +unlock: raw_spin_unlock_irqrestore(&p->pi_lock, flags); +out: + if (success) + ttwu_stat(p, task_cpu(p), wake_flags); + preempt_enable(); #ifdef CONFIG_SCHED_WALT if (success && sched_predl) { @@ -4246,6 +4391,7 @@ static void __sched notrace __schedule(bool preempt) { struct task_struct *prev, *next; unsigned long *switch_count; + unsigned long prev_state; struct rq_flags rf; struct rq *rq; int cpu; @@ -4266,7 +4412,14 @@ static void __sched notrace __schedule(bool preempt) /* * Make sure that signal_pending_state()->signal_pending() below * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE) - * done by the caller to avoid the race with signal_wake_up(). + * done by the caller to avoid the race with signal_wake_up(): + * + * __set_current_state(@state) signal_wake_up() + * schedule() set_tsk_thread_flag(p, TIF_SIGPENDING) + * wake_up_state(p, state) + * LOCK rq->lock LOCK p->pi_state + * smp_mb__after_spinlock() smp_mb__after_spinlock() + * if (signal_pending_state()) if (p->state & @state) * * The membarrier system call requires a full memory barrier * after coming from user-space, before storing to rq->curr. @@ -4279,10 +4432,38 @@ static void __sched notrace __schedule(bool preempt) update_rq_clock(rq); switch_count = &prev->nivcsw; - if (!preempt && prev->state) { - if (unlikely(signal_pending_state(prev->state, prev))) { + + /* + * We must load prev->state once (task_struct::state is volatile), such + * that: + * + * - we form a control dependency vs deactivate_task() below. + * - ptrace_{,un}freeze_traced() can change ->state underneath us. + */ + prev_state = prev->state; + if (!preempt && prev_state) { + if (unlikely(signal_pending_state(prev_state, prev))) { prev->state = TASK_RUNNING; } else { + prev->sched_contributes_to_load = + (prev_state & TASK_UNINTERRUPTIBLE) && + !(prev_state & TASK_NOLOAD) && + !(prev->flags & PF_FROZEN); + + if (prev->sched_contributes_to_load) + rq->nr_uninterruptible++; + + /* + * __schedule() ttwu() + * prev_state = prev->state; if (p->on_rq && ...) + * if (prev_state) goto out; + * p->on_rq = 0; smp_acquire__after_ctrl_dep(); + * p->state = TASK_WAKING + * + * Where __schedule() and ttwu() have matching control dependencies. + * + * After this, schedule() must not care about p->state any more. + */ deactivate_task(rq, prev, DEQUEUE_SLEEP | DEQUEUE_NOCLOCK); prev->on_rq = 0; @@ -4869,8 +5050,10 @@ int idle_cpu(int cpu) return 0; #ifdef CONFIG_SMP +#if SCHED_FEAT_TTWU_QUEUE if (!llist_empty(&rq->wake_list)) return 0; +#endif #endif return 1; @@ -5745,8 +5928,10 @@ unsigned int sched_lib_mask_force; bool is_sched_lib_based_app(pid_t pid) { const char *name = NULL; + char *libname, *lib_list; struct vm_area_struct *vma; char path_buf[LIB_PATH_LENGTH]; + char *tmp_lib_name; bool found = false; struct task_struct *p; struct mm_struct *mm; @@ -5754,11 +5939,16 @@ bool is_sched_lib_based_app(pid_t pid) if (strnlen(sched_lib_name, LIB_PATH_LENGTH) == 0) return false; + tmp_lib_name = kmalloc(LIB_PATH_LENGTH, GFP_KERNEL); + if (!tmp_lib_name) + return false; + rcu_read_lock(); p = find_process_by_pid(pid); if (!p) { rcu_read_unlock(); + kfree(tmp_lib_name); return false; } @@ -5778,10 +5968,15 @@ bool is_sched_lib_based_app(pid_t pid) if (IS_ERR(name)) goto release_sem; - if (strnstr(name, sched_lib_name, + strlcpy(tmp_lib_name, sched_lib_name, LIB_PATH_LENGTH); + lib_list = tmp_lib_name; + while ((libname = strsep(&lib_list, ","))) { + libname = skip_spaces(libname); + if (strnstr(name, libname, strnlen(name, LIB_PATH_LENGTH))) { - found = true; - break; + found = true; + goto release_sem; + } } } } @@ -5791,6 +5986,7 @@ bool is_sched_lib_based_app(pid_t pid) mmput(mm); put_task_struct: put_task_struct(p); + kfree(tmp_lib_name); return found; } @@ -7344,7 +7540,9 @@ void __init sched_init(void) rq->idle_stamp = 0; rq->avg_idle = 2*sysctl_sched_migration_cost; rq->max_idle_balance_cost = sysctl_sched_migration_cost; +#ifdef CONFIG_SCHED_WALT rq->push_task = NULL; +#endif walt_sched_init_rq(rq); INIT_LIST_HEAD(&rq->cfs_tasks); diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index f88ee03e95c8..e36587b3d86c 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -48,135 +48,10 @@ static unsigned long nsec_low(unsigned long long nsec) #define SPLIT_NS(x) nsec_high(x), nsec_low(x) -#define SCHED_FEAT(name, enabled) \ - #name , - -static const char * const sched_feat_names[] = { -#include "features.h" -}; - -#undef SCHED_FEAT - -static int sched_feat_show(struct seq_file *m, void *v) -{ - int i; - - for (i = 0; i < __SCHED_FEAT_NR; i++) { - if (!(sysctl_sched_features & (1UL << i))) - seq_puts(m, "NO_"); - seq_printf(m, "%s ", sched_feat_names[i]); - } - seq_puts(m, "\n"); - - return 0; -} - -#ifdef CONFIG_JUMP_LABEL - -#define jump_label_key__true STATIC_KEY_INIT_TRUE -#define jump_label_key__false STATIC_KEY_INIT_FALSE - -#define SCHED_FEAT(name, enabled) \ - jump_label_key__##enabled , - -struct static_key sched_feat_keys[__SCHED_FEAT_NR] = { -#include "features.h" -}; - -#undef SCHED_FEAT - -static void sched_feat_disable(int i) -{ - static_key_disable_cpuslocked(&sched_feat_keys[i]); -} - -static void sched_feat_enable(int i) -{ - static_key_enable_cpuslocked(&sched_feat_keys[i]); -} -#else -static void sched_feat_disable(int i) { }; -static void sched_feat_enable(int i) { }; -#endif /* CONFIG_JUMP_LABEL */ - -static int sched_feat_set(char *cmp) -{ - int i; - int neg = 0; - - if (strncmp(cmp, "NO_", 3) == 0) { - neg = 1; - cmp += 3; - } - - i = match_string(sched_feat_names, __SCHED_FEAT_NR, cmp); - if (i < 0) - return i; - - if (neg) { - sysctl_sched_features &= ~(1UL << i); - sched_feat_disable(i); - } else { - sysctl_sched_features |= (1UL << i); - sched_feat_enable(i); - } - - return 0; -} - -static ssize_t -sched_feat_write(struct file *filp, const char __user *ubuf, - size_t cnt, loff_t *ppos) -{ - char buf[64]; - char *cmp; - int ret; - struct inode *inode; - - if (cnt > 63) - cnt = 63; - - if (copy_from_user(&buf, ubuf, cnt)) - return -EFAULT; - - buf[cnt] = 0; - cmp = strstrip(buf); - - /* Ensure the static_key remains in a consistent state */ - inode = file_inode(filp); - cpus_read_lock(); - inode_lock(inode); - ret = sched_feat_set(cmp); - inode_unlock(inode); - cpus_read_unlock(); - if (ret < 0) - return ret; - - *ppos += cnt; - - return cnt; -} - -static int sched_feat_open(struct inode *inode, struct file *filp) -{ - return single_open(filp, sched_feat_show, NULL); -} - -static const struct file_operations sched_feat_fops = { - .open = sched_feat_open, - .write = sched_feat_write, - .read = seq_read, - .llseek = seq_lseek, - .release = single_release, -}; - __read_mostly bool sched_debug_enabled; static __init int sched_init_debug(void) { - debugfs_create_file("sched_features", 0644, NULL, NULL, - &sched_feat_fops); - debugfs_create_bool("sched_debug", 0644, NULL, &sched_debug_enabled); @@ -776,7 +651,6 @@ static void sched_debug_header(struct seq_file *m) PN(sysctl_sched_min_granularity); PN(sysctl_sched_wakeup_granularity); P(sysctl_sched_child_runs_first); - P(sysctl_sched_features); #ifdef CONFIG_SCHED_WALT P(sched_init_task_load_windows); P(sched_ravg_window); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 818751ca2296..9f141906a386 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6250,7 +6250,10 @@ stune_util(int cpu, unsigned long other_util, trace_sched_boost_cpu(cpu, util, margin); - return util + margin; + if (sched_feat(SCHEDTUNE_BOOST_UTIL)) + return util + margin; + else + return util; } #else /* CONFIG_SCHED_TUNE */ @@ -7882,7 +7885,7 @@ static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu, struct sched_domain *sd; cpumask_t *candidates; bool is_rtg, curr_is_rtg; - struct find_best_target_env fbt_env; + struct find_best_target_env fbt_env = { 0 }; bool need_idle = wake_to_idle(p); int placement_boost = task_boost_policy(p); u64 start_t = 0; @@ -8943,16 +8946,12 @@ int can_migrate_task(struct task_struct *p, struct lb_env *env) if (env->flags & LBF_IGNORE_PREFERRED_CLUSTER_TASKS && !preferred_cluster(cpu_rq(env->dst_cpu)->cluster, p)) return 0; +#endif /* Don't detach task if it doesn't fit on the destination */ if (env->flags & LBF_IGNORE_BIG_TASKS && !task_fits_max(p, env->dst_cpu)) return 0; -#endif - - /* Don't detach task if it is under active migration */ - if (env->src_rq->push_task == p) - return 0; if (task_running(env->src_rq, p)) { schedstat_inc(p->se.statistics.nr_failed_migrations_running); @@ -11226,8 +11225,9 @@ static int active_load_balance_cpu_stop(void *data) struct sched_domain *sd = NULL; struct task_struct *p = NULL; struct rq_flags rf; - struct task_struct *push_task; + struct task_struct *push_task = NULL; int push_task_detached = 0; +#ifdef CONFIG_SCHED_WALT struct lb_env env = { .sd = sd, .dst_cpu = target_cpu, @@ -11238,6 +11238,7 @@ static int active_load_balance_cpu_stop(void *data) .flags = 0, .loop = 0, }; +#endif bool moved = false; rq_lock_irq(busiest_rq, &rf); @@ -11265,6 +11266,7 @@ static int active_load_balance_cpu_stop(void *data) */ BUG_ON(busiest_rq == target_rq); +#ifdef CONFIG_SCHED_WALT push_task = busiest_rq->push_task; target_cpu = busiest_rq->push_cpu; if (push_task) { @@ -11279,6 +11281,7 @@ static int active_load_balance_cpu_stop(void *data) } goto out_unlock; } +#endif /* Search for an sd spanning us and the target CPU. */ rcu_read_lock(); @@ -11321,12 +11324,14 @@ static int active_load_balance_cpu_stop(void *data) rcu_read_unlock(); out_unlock: busiest_rq->active_balance = 0; +#ifdef CONFIG_SCHED_WALT push_task = busiest_rq->push_task; target_cpu = busiest_rq->push_cpu; clear_reserved(target_cpu); if (push_task) busiest_rq->push_task = NULL; +#endif rq_unlock(busiest_rq, &rf); diff --git a/kernel/sched/features.h b/kernel/sched/features.h index 989ac6ee2a2d..d052c06298c8 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h @@ -4,66 +4,66 @@ * them to run sooner, but does not allow tons of sleepers to * rip the spread apart. */ -SCHED_FEAT(GENTLE_FAIR_SLEEPERS, true) +#define SCHED_FEAT_GENTLE_FAIR_SLEEPERS 1 /* * Place new tasks ahead so that they do not starve already running * tasks */ -SCHED_FEAT(START_DEBIT, true) +#define SCHED_FEAT_START_DEBIT 1 /* * Prefer to schedule the task we woke last (assuming it failed * wakeup-preemption), since its likely going to consume data we * touched, increases cache locality. */ -SCHED_FEAT(NEXT_BUDDY, false) +#define SCHED_FEAT_NEXT_BUDDY 0 /* * Prefer to schedule the task that ran last (when we did * wake-preempt) as that likely will touch the same data, increases * cache locality. */ -SCHED_FEAT(LAST_BUDDY, true) +#define SCHED_FEAT_LAST_BUDDY 1 /* * Consider buddies to be cache hot, decreases the likelyness of a * cache buddy being migrated away, increases cache locality. */ -SCHED_FEAT(CACHE_HOT_BUDDY, true) +#define SCHED_FEAT_CACHE_HOT_BUDDY 1 /* * Allow wakeup-time preemption of the current task: */ -SCHED_FEAT(WAKEUP_PREEMPTION, true) +#define SCHED_FEAT_WAKEUP_PREEMPTION 1 -SCHED_FEAT(HRTICK, false) -SCHED_FEAT(DOUBLE_TICK, false) -SCHED_FEAT(LB_BIAS, true) +#define SCHED_FEAT_HRTICK 0 +#define SCHED_FEAT_DOUBLE_TICK 0 +#define SCHED_FEAT_LB_BIAS 1 /* * Decrement CPU capacity based on time not spent running tasks */ -SCHED_FEAT(NONTASK_CAPACITY, true) +#define SCHED_FEAT_NONTASK_CAPACITY 1 /* * Queue remote wakeups on the target CPU and process them * using the scheduler IPI. Reduces rq->lock contention/bounces. */ -SCHED_FEAT(TTWU_QUEUE, false) +#define SCHED_FEAT_TTWU_QUEUE 0 /* * When doing wakeups, attempt to limit superfluous scans of the LLC domain. */ -SCHED_FEAT(SIS_AVG_CPU, false) -SCHED_FEAT(SIS_PROP, true) +#define SCHED_FEAT_SIS_AVG_CPU 0 +#define SCHED_FEAT_SIS_PROP 1 /* * Issue a WARN when we do multiple update_rq_clock() calls * in a single rq->lock section. Default disabled because the * annotations are not complete. */ -SCHED_FEAT(WARN_DOUBLE_CLOCK, false) +#define SCHED_FEAT_WARN_DOUBLE_CLOCK 0 #ifdef HAVE_RT_PUSH_IPI /* @@ -75,27 +75,29 @@ SCHED_FEAT(WARN_DOUBLE_CLOCK, false) * IPI to that CPU and let that CPU push the RT task to where * it should go may be a better scenario. */ -SCHED_FEAT(RT_PUSH_IPI, true) +#define SCHED_FEAT_RT_PUSH_IPI 1 +#else +#define SCHED_FEAT_RT_PUSH_IPI 0 #endif -SCHED_FEAT(RT_RUNTIME_SHARE, false) -SCHED_FEAT(LB_MIN, false) -SCHED_FEAT(ATTACH_AGE_LOAD, true) +#define SCHED_FEAT_RT_RUNTIME_SHARE 0 +#define SCHED_FEAT_LB_MIN 0 +#define SCHED_FEAT_ATTACH_AGE_LOAD 1 -SCHED_FEAT(WA_IDLE, true) -SCHED_FEAT(WA_WEIGHT, true) -SCHED_FEAT(WA_BIAS, true) +#define SCHED_FEAT_WA_IDLE 1 +#define SCHED_FEAT_WA_WEIGHT 1 +#define SCHED_FEAT_WA_BIAS 1 /* * UtilEstimation. Use estimated CPU utilization. */ -SCHED_FEAT(UTIL_EST, true) -SCHED_FEAT(UTIL_EST_FASTUP, true) +#define SCHED_FEAT_UTIL_EST 1 +#define SCHED_FEAT_UTIL_EST_FASTUP 1 /* * Fast pre-selection of CPU candidates for EAS. */ -SCHED_FEAT(FIND_BEST_TARGET, true) +#define SCHED_FEAT_FIND_BEST_TARGET 1 /* * Energy aware scheduling algorithm choices: @@ -104,12 +106,12 @@ SCHED_FEAT(FIND_BEST_TARGET, true) * the EAS path for wakeup task placement. Otherwise, put * those tasks through the mainline slow path. */ -SCHED_FEAT(EAS_PREFER_IDLE, true) +#define SCHED_FEAT_EAS_PREFER_IDLE 1 /* * Request max frequency from schedutil whenever a RT task is running. */ -SCHED_FEAT(SUGOV_RT_MAX_FREQ, false) +#define SCHED_FEAT_SUGOV_RT_MAX_FREQ 0 /* * Apply schedtune boost hold to tasks of all sched classes. @@ -120,4 +122,11 @@ SCHED_FEAT(SUGOV_RT_MAX_FREQ, false) * If disabled, this behaviour will only apply to tasks of the * RT class. */ -SCHED_FEAT(SCHEDTUNE_BOOST_HOLD_ALL, false) +#define SCHED_FEAT_SCHEDTUNE_BOOST_HOLD_ALL 0 + +/* + * Inflate the effective utilization of SchedTune-boosted tasks, which + * generally leads to usage of higher frequencies. + * If disabled, boosts will only bias tasks to higher-capacity CPUs. + */ +#define SCHED_FEAT_SCHEDTUNE_BOOST_UTIL 0 diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index 672fad5042c0..2a37dfd1439f 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -1323,7 +1323,7 @@ __poll_t psi_trigger_poll(void **trigger_ptr, static ssize_t psi_write(struct file *file, const char __user *user_buf, size_t nbytes, enum psi_res res) { - char buf[32]; + char buf[32] = "0"; size_t buf_size; struct seq_file *seq; struct psi_trigger *new; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index e432da442550..a2b9c4323b8a 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -75,6 +75,7 @@ #include "cpupri.h" #include "cpudeadline.h" +#include "features.h" #ifdef CONFIG_SCHED_DEBUG # define SCHED_WARN_ON(x) WARN_ONCE(x, #x) @@ -1018,7 +1019,9 @@ struct rq { /* For active balancing */ int active_balance; int push_cpu; +#ifdef CONFIG_SCHED_WALT struct task_struct *push_task; +#endif struct cpu_stop_work active_balance_work; /* CPU of this runqueue: */ @@ -1114,8 +1117,10 @@ struct rq { #endif #ifdef CONFIG_SMP +#if SCHED_FEAT_TTWU_QUEUE struct llist_head wake_list; #endif +#endif #ifdef CONFIG_CPU_IDLE /* Must be inspected within a rcu lock section */ @@ -1442,7 +1447,11 @@ queue_balance_callback(struct rq *rq, rq->balance_callback = head; } +#if SCHED_FEAT_TTWU_QUEUE extern void sched_ttwu_pending(void); +#else +static inline void sched_ttwu_pending(void) { } +#endif #define rcu_dereference_check_sched_domain(p) \ rcu_dereference_check((p), \ @@ -1668,60 +1677,7 @@ static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu) # define const_debug const #endif -#define SCHED_FEAT(name, enabled) \ - __SCHED_FEAT_##name , - -enum { -#include "features.h" - __SCHED_FEAT_NR, -}; - -#undef SCHED_FEAT - -#ifdef CONFIG_SCHED_DEBUG - -/* - * To support run-time toggling of sched features, all the translation units - * (but core.c) reference the sysctl_sched_features defined in core.c. - */ -extern const_debug unsigned int sysctl_sched_features; - -#ifdef CONFIG_JUMP_LABEL -#define SCHED_FEAT(name, enabled) \ -static __always_inline bool static_branch_##name(struct static_key *key) \ -{ \ - return static_key_##enabled(key); \ -} - -#include "features.h" -#undef SCHED_FEAT - -extern struct static_key sched_feat_keys[__SCHED_FEAT_NR]; -#define sched_feat(x) (static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x])) - -#else /* !CONFIG_JUMP_LABEL */ - -#define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x)) - -#endif /* CONFIG_JUMP_LABEL */ - -#else /* !SCHED_DEBUG */ - -/* - * Each translation unit has its own copy of sysctl_sched_features to allow - * constants propagation at compile time and compiler optimization based on - * features default. - */ -#define SCHED_FEAT(name, enabled) \ - (1UL << __SCHED_FEAT_##name) * enabled | -static const_debug __maybe_unused unsigned int sysctl_sched_features = -#include "features.h" - 0; -#undef SCHED_FEAT - -#define sched_feat(x) !!(sysctl_sched_features & (1UL << __SCHED_FEAT_##x)) - -#endif /* SCHED_DEBUG */ +#define sched_feat(x) SCHED_FEAT_##x extern struct static_key_false sched_numa_balancing; extern struct static_key_false sched_schedstats; @@ -1768,7 +1724,8 @@ static inline int task_on_rq_migrating(struct task_struct *p) */ #define WF_SYNC 0x01 /* Waker goes to sleep after wakeup */ #define WF_FORK 0x02 /* Child wakeup after fork */ -#define WF_MIGRATED 0x4 /* Internal use, task got migrated */ +#define WF_MIGRATED 0x04 /* internal use, task got migrated */ +#define WF_ON_RQ 0x08 /* wakee is on_rq */ /* * To aid in avoiding the subversion of "niceness" due to uneven distribution @@ -3093,9 +3050,6 @@ static inline int sched_boost(void) static inline bool task_placement_boost_enabled(struct task_struct *p) { - if (task_sched_boost(p)) - return sched_boost_policy() != SCHED_BOOST_NONE; - return false; } @@ -3111,21 +3065,7 @@ static inline bool is_full_throttle_boost(void) static inline enum sched_boost_policy task_boost_policy(struct task_struct *p) { - enum sched_boost_policy policy = task_sched_boost(p) ? - sched_boost_policy() : - SCHED_BOOST_NONE; - if (policy == SCHED_BOOST_ON_BIG) { - /* - * Filter out tasks less than min task util threshold - * under conservative boost. - */ - if (sched_boost() == CONSERVATIVE_BOOST && - task_util(p) <= - sysctl_sched_min_task_util_for_boost) - policy = SCHED_BOOST_NONE; - } - - return policy; + return false; } struct walt_sched_stats; diff --git a/kernel/sched/walt.c b/kernel/sched/walt.c index bee7852c8279..7165ac25afbd 100644 --- a/kernel/sched/walt.c +++ b/kernel/sched/walt.c @@ -2006,8 +2006,8 @@ update_task_rq_cpu_cycles(struct task_struct *p, struct rq *rq, int event, u64 wallclock, u64 irqtime) { u64 cur_cycles; - u64 cycles_delta; - u64 time_delta; + u64 cycles_delta = 0; + u64 time_delta = 0; int cpu = cpu_of(rq); lockdep_assert_held(&rq->lock); diff --git a/kernel/sched/walt.h b/kernel/sched/walt.h index c4e3bc5a96c4..1f6eae0f3a72 100644 --- a/kernel/sched/walt.h +++ b/kernel/sched/walt.h @@ -435,7 +435,7 @@ static inline void walt_dump(void) printk_deferred("============ WALT RQ DUMP END ==============\n"); } -static int in_sched_bug; +static int in_sched_bug __maybe_unused; #define SCHED_BUG_ON(condition) \ ({ \ if (unlikely(!!(condition)) && !in_sched_bug) { \ diff --git a/kernel/sys.c b/kernel/sys.c index 4b949f75fe97..a015147defa6 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2070,7 +2070,7 @@ static int prctl_set_auxv(struct mm_struct *mm, unsigned long addr, * up to the caller to provide sane values here, otherwise userspace * tools which use this vector might be unhappy. */ - unsigned long user_auxv[AT_VECTOR_SIZE]; + unsigned long user_auxv[AT_VECTOR_SIZE] = { 0 }; if (len > sizeof(user_auxv)) return -EINVAL; diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 28990b49d18a..89e59eb79419 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -134,6 +134,7 @@ static int __maybe_unused one = 1; static int __maybe_unused two = 2; static int __maybe_unused three = 3; static int __maybe_unused four = 4; +static int __maybe_unused five = 5; static unsigned long zero_ul; static unsigned long one_ul = 1; static unsigned long long_max = LONG_MAX; diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index bfaa44a80c03..ef5bce8c9e92 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -1010,7 +1010,7 @@ static void posix_cpu_timer_rearm(struct k_itimer *timer) struct task_struct *p = timer->it.cpu.task; struct sighand_struct *sighand; unsigned long flags; - u64 now; + u64 now = 0; if (WARN_ON_ONCE(!p)) return; diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index c52fbdee5ef1..8578a462ad22 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -4514,7 +4514,7 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf, { struct seq_file *m = filp->private_data; struct trace_array *tr = m->private; - char buf[64]; + char buf[64] = "0"; int ret; if (cnt >= sizeof(buf)) @@ -5479,7 +5479,7 @@ tracing_set_trace_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos) { struct trace_array *tr = filp->private_data; - char buf[MAX_TRACER_SIZE+1]; + char buf[MAX_TRACER_SIZE+1] = "0"; int i; size_t ret; int err; @@ -6314,7 +6314,7 @@ static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf, { struct seq_file *m = filp->private_data; struct trace_array *tr = m->private; - char buf[64]; + char buf[64] = "0"; const char *clockstr; int ret; diff --git a/lib/kstrtox.c b/lib/kstrtox.c index 1a02b87b19c7..6143099e4bdd 100644 --- a/lib/kstrtox.c +++ b/lib/kstrtox.c @@ -381,7 +381,7 @@ EXPORT_SYMBOL(kstrtobool); int kstrtobool_from_user(const char __user *s, size_t count, bool *res) { /* Longest string needed to differentiate, newline, terminator */ - char buf[4]; + char buf[4] = "0"; count = min(count, sizeof(buf) - 1); if (copy_from_user(buf, s, count)) @@ -395,7 +395,7 @@ EXPORT_SYMBOL(kstrtobool_from_user); int f(const char __user *s, size_t count, unsigned int base, type *res) \ { \ /* sign, base 2 representation, newline, terminator */ \ - char buf[1 + sizeof(type) * 8 + 1 + 1]; \ + char buf[1 + sizeof(type) * 8 + 1 + 1] = "0"; \ \ count = min(count, sizeof(buf) - 1); \ if (copy_from_user(buf, s, count)) \ diff --git a/lib/zstd/decompress.c b/lib/zstd/decompress.c index b17846725ca0..da80ab30ffbb 100644 --- a/lib/zstd/decompress.c +++ b/lib/zstd/decompress.c @@ -297,7 +297,7 @@ size_t ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src, size_t unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize) { { - ZSTD_frameParams fParams; + ZSTD_frameParams fParams = { 0 }; if (ZSTD_getFrameParams(&fParams, src, srcSize) != 0) return ZSTD_CONTENTSIZE_ERROR; if (fParams.windowSize == 0) { diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8239905874c7..a47f86f0e74b 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3293,7 +3293,7 @@ struct page *rmqueue(struct zone *preferred_zone, gfp_t gfp_flags, unsigned int alloc_flags, int migratetype) { - unsigned long flags; + unsigned long flags = 0; struct page *page; if (likely(order == 0)) { diff --git a/mm/process_reclaim.c b/mm/process_reclaim.c index 44f812555a56..0ed1ea016d01 100644 --- a/mm/process_reclaim.c +++ b/mm/process_reclaim.c @@ -117,7 +117,7 @@ static void swap_fn(struct work_struct *work) short min_score_adj = 360; int total_scan = 0; int total_reclaimed = 0; - int nr_to_reclaim; + int nr_to_reclaim = 0; int efficiency; if (!tsk_nomap_swap_sz && !per_swap_size) diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 76bd6b122724..6e31c9802ffc 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -2045,7 +2045,7 @@ static void connectable_update_work(struct work_struct *work) { struct hci_dev *hdev = container_of(work, struct hci_dev, connectable_update); - u8 status; + u8 status = 0; hci_req_sync(hdev, connectable_update, 0, HCI_CMD_TIMEOUT, &status); mgmt_set_connectable_complete(hdev, status); @@ -2158,7 +2158,7 @@ static void discoverable_update_work(struct work_struct *work) { struct hci_dev *hdev = container_of(work, struct hci_dev, discoverable_update); - u8 status; + u8 status = 0; hci_req_sync(hdev, discoverable_update, 0, HCI_CMD_TIMEOUT, &status); mgmt_set_discoverable_complete(hdev, status); @@ -2270,7 +2270,7 @@ static void bg_scan_update(struct work_struct *work) struct hci_dev *hdev = container_of(work, struct hci_dev, bg_scan_update); struct hci_conn *conn; - u8 status; + u8 status = 0; int err; err = hci_req_sync(hdev, update_bg_scan, 0, HCI_CMD_TIMEOUT, &status); @@ -2323,7 +2323,7 @@ static void le_scan_disable_work(struct work_struct *work) { struct hci_dev *hdev = container_of(work, struct hci_dev, le_scan_disable.work); - u8 status; + u8 status = 0; BT_DBG("%s", hdev->name); @@ -2414,7 +2414,7 @@ static void le_scan_restart_work(struct work_struct *work) struct hci_dev *hdev = container_of(work, struct hci_dev, le_scan_restart.work); unsigned long timeout, duration, scan_start, now; - u8 status; + u8 status = 0; BT_DBG("%s", hdev->name); diff --git a/net/compat.c b/net/compat.c index 2778a236e091..f8a57b73ed73 100644 --- a/net/compat.c +++ b/net/compat.c @@ -845,7 +845,7 @@ COMPAT_SYSCALL_DEFINE5(recvmmsg, int, fd, struct compat_mmsghdr __user *, mmsg, COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args) { - u32 a[AUDITSC_ARGS]; + u32 a[AUDITSC_ARGS] = { 0 }; unsigned int len; u32 a0, a1; int ret; diff --git a/net/core/datagram.c b/net/core/datagram.c index 865a8cb7b0bd..f4f9cf0bb839 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c @@ -294,7 +294,7 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags, struct sk_buff *skb), int *peeked, int *off, int *err) { - struct sk_buff *skb, *last; + struct sk_buff *skb, *last = NULL; long timeo; timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 4db9512feba8..1146c86019e8 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -954,7 +954,7 @@ static noinline_for_stack int ethtool_get_sset_info(struct net_device *dev, static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev, u32 cmd, void __user *useraddr) { - struct ethtool_rxnfc info; + struct ethtool_rxnfc info = { 0 }; size_t info_size = sizeof(info); int rc; @@ -986,7 +986,7 @@ static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev, static noinline_for_stack int ethtool_get_rxnfc(struct net_device *dev, u32 cmd, void __user *useraddr) { - struct ethtool_rxnfc info; + struct ethtool_rxnfc info = { 0 }; size_t info_size = sizeof(info); const struct ethtool_ops *ops = dev->ethtool_ops; int ret; diff --git a/net/netfilter/nf_conntrack_h323_main.c b/net/netfilter/nf_conntrack_h323_main.c index 040ec8b0a1b2..fe1da5820ef8 100644 --- a/net/netfilter/nf_conntrack_h323_main.c +++ b/net/netfilter/nf_conntrack_h323_main.c @@ -576,8 +576,8 @@ static int h245_help(struct sk_buff *skb, unsigned int protoff, { static MultimediaSystemControlMessage mscm; unsigned char *data = NULL; - int datalen; - int dataoff; + int datalen = 0; + int dataoff = 0; int ret; /* Until there's been traffic both ways, don't look in packets. */ @@ -1141,8 +1141,8 @@ static int q931_help(struct sk_buff *skb, unsigned int protoff, { static Q931 q931; unsigned char *data = NULL; - int datalen; - int dataoff; + int datalen = 0; + int dataoff = 0; int ret; /* Until there's been traffic both ways, don't look in packets. */ diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index 5dd6f6ce92e6..e72a3c0b7ce5 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c @@ -1427,7 +1427,7 @@ struct xt_table *xt_register_table(struct net *net, struct xt_table_info *bootstrap, struct xt_table_info *newinfo) { - int ret; + int ret = 0; struct xt_table_info *private; struct xt_table *t, *table; diff --git a/net/rfkill/core.c b/net/rfkill/core.c index 88841a30f2cb..3b9a372ae891 100644 --- a/net/rfkill/core.c +++ b/net/rfkill/core.c @@ -1214,7 +1214,7 @@ static ssize_t rfkill_fop_write(struct file *file, const char __user *buf, size_t count, loff_t *pos) { struct rfkill *rfkill; - struct rfkill_event ev; + struct rfkill_event ev = { 0 }; int ret; /* we don't need the 'hard' variable but accept it */ diff --git a/net/socket.c b/net/socket.c index 64c72a66fcae..74bdbcac26cc 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2181,7 +2181,7 @@ static int ___sys_sendmsg(struct socket *sock, struct user_msghdr __user *msg, struct sockaddr_storage address; struct iovec iovstack[UIO_FASTIOV], *iov = iovstack; unsigned char ctl[sizeof(struct cmsghdr) + 20] - __aligned(sizeof(__kernel_size_t)); + __aligned(sizeof(__kernel_size_t)) = "0"; /* 20 is size of ipv6_pktinfo */ unsigned char *ctl_buf = ctl; int ctl_len; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index e2c45b49856c..d6a2b1ca1ba9 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -68,7 +68,7 @@ __cfg80211_wdev_from_attrs(struct net *netns, struct nlattr **attrs) struct wireless_dev *result = NULL; bool have_ifidx = attrs[NL80211_ATTR_IFINDEX]; bool have_wdev_id = attrs[NL80211_ATTR_WDEV]; - u64 wdev_id; + u64 wdev_id = 0; int wiphy_idx = -1; int ifidx = -1; diff --git a/net/wireless/util.c b/net/wireless/util.c index 59382be925f2..8b29bcf27510 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -1268,7 +1268,7 @@ static u32 cfg80211_calculate_bitrate_he(struct rate_info *rate) u32 rates_52[3] = { 18820000, 17777777, 16000000 }; u32 rates_26[3] = { 9411111, 8888888, 8000000 }; u64 tmp; - u32 result; + u32 result = 0; if (WARN_ON_ONCE(rate->mcs > 11)) return 0; diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c index 76a80a41615b..f573caeecf45 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c @@ -736,7 +736,7 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd, if (iwp->length == descr->max_tokens + 1) essid_compat = 1; else if (IW_IS_SET(cmd) && (iwp->length != 0)) { - char essid[IW_ESSID_MAX_SIZE + 1]; + char essid[IW_ESSID_MAX_SIZE + 1] = "0"; unsigned int len; len = iwp->length * descr->token_size; diff --git a/techpack/audio/dsp/q6afe.c b/techpack/audio/dsp/q6afe.c index e9463efacbf4..425f17685506 100644 --- a/techpack/audio/dsp/q6afe.c +++ b/techpack/audio/dsp/q6afe.c @@ -10707,7 +10707,7 @@ static void afe_release_uevent_data(struct kobject *kobj) #if defined(CONFIG_MACH_XIAOMI_LMI) || defined(CONFIG_MACH_XIAOMI_PICASSO) int send_tfa_cal_apr(void *buf, int cmd_size, bool bRead) { - int32_t result, port_id = AFE_PORT_ID_TFADSP_RX; + int32_t result = 0, port_id = AFE_PORT_ID_TFADSP_RX; uint32_t port_index = 0, payload_size = 0; size_t len; struct rtac_cal_block_data *tfa_cal = &(this_afe.tfa_cal); diff --git a/techpack/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c b/techpack/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c index 09b4b8d3e0f6..4dde6946e525 100644 --- a/techpack/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c +++ b/techpack/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c @@ -1515,8 +1515,8 @@ int cam_jpeg_hw_mgr_init(struct device_node *of_node, uint64_t *hw_mgr_hdl, int *iommu_hdl) { int i, rc; - uint32_t num_dev; - uint32_t num_dma_dev; + uint32_t num_dev = 0; + uint32_t num_dma_dev = 0; struct cam_hw_mgr_intf *hw_mgr_intf; struct cam_iommu_handle cdm_handles; diff --git a/techpack/display/msm/dsi/dsi_display.c b/techpack/display/msm/dsi/dsi_display.c index 92e360505b1c..a19eed117dca 100644 --- a/techpack/display/msm/dsi/dsi_display.c +++ b/techpack/display/msm/dsi/dsi_display.c @@ -5252,22 +5252,82 @@ static ssize_t sysfs_fod_ui_read(struct device *dev, return snprintf(buf, PAGE_SIZE, "%d\n", status); } +static ssize_t sysfs_hbm_read(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct dsi_display *display = dev_get_drvdata(dev); + if (!display->panel) + return 0; + + return scnprintf(buf, PAGE_SIZE, "%d\n", display->panel->hbm_mode); +} + +static ssize_t sysfs_hbm_write(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + struct dsi_display *display = dev_get_drvdata(dev); + int ret, hbm_mode; + + if (!display->panel) + return -EINVAL; + + ret = kstrtoint(buf, 10, &hbm_mode); + if (ret) { + pr_err("kstrtoint failed. ret=%d\n", ret); + return ret; + } + + mutex_lock(&display->display_lock); + + display->panel->hbm_mode = hbm_mode; + if (!dsi_panel_initialized(display->panel)) + goto error; + + ret = dsi_display_clk_ctrl(display->dsi_clk_handle, + DSI_CORE_CLK, DSI_CLK_ON); + if (ret) { + pr_err("[%s] failed to enable DSI core clocks, rc=%d\n", + display->name, ret); + goto error; + } + + ret = dsi_panel_apply_hbm_mode(display->panel); + if (ret) + pr_err("unable to set hbm mode\n"); + + ret = dsi_display_clk_ctrl(display->dsi_clk_handle, + DSI_CORE_CLK, DSI_CLK_OFF); + if (ret) { + pr_err("[%s] failed to disable DSI core clocks, rc=%d\n", + display->name, ret); + goto error; + } +error: + mutex_unlock(&display->display_lock); + return ret == 0 ? count : ret; +} + static DEVICE_ATTR(doze_status, 0644, - sysfs_doze_status_read, - sysfs_doze_status_write); + sysfs_doze_status_read, + sysfs_doze_status_write); static DEVICE_ATTR(doze_mode, 0644, - sysfs_doze_mode_read, - sysfs_doze_mode_write); + sysfs_doze_mode_read, + sysfs_doze_mode_write); static DEVICE_ATTR(fod_ui, 0444, sysfs_fod_ui_read, NULL); +static DEVICE_ATTR(hbm, 0644, + sysfs_hbm_read, + sysfs_hbm_write); + static struct attribute *display_fs_attrs[] = { &dev_attr_doze_status.attr, &dev_attr_doze_mode.attr, &dev_attr_fod_ui.attr, + &dev_attr_hbm.attr, NULL, }; static struct attribute_group display_fs_attrs_group = { diff --git a/techpack/display/msm/dsi/dsi_panel.c b/techpack/display/msm/dsi/dsi_panel.c index 052ba1c042a7..22a319064ef3 100644 --- a/techpack/display/msm/dsi/dsi_panel.c +++ b/techpack/display/msm/dsi/dsi_panel.c @@ -5030,6 +5030,9 @@ int dsi_panel_enable(struct dsi_panel *panel) mutex_unlock(&panel->panel_lock); display_utc_time_marker("DSI_CMD_SET_ON"); + if (panel->hbm_mode) + dsi_panel_apply_hbm_mode(panel); + return rc; } @@ -5287,3 +5290,26 @@ int dsi_panel_post_unprepare(struct dsi_panel *panel) mutex_unlock(&panel->panel_lock); return rc; } + +int dsi_panel_apply_hbm_mode(struct dsi_panel *panel) +{ + static const enum dsi_cmd_set_type type_map[] = { + DSI_CMD_SET_MI_HBM_FOD_OFF, + DSI_CMD_SET_MI_HBM_FOD_ON + }; + + enum dsi_cmd_set_type type; + int rc; + + if (panel->hbm_mode >= 0 && + panel->hbm_mode < ARRAY_SIZE(type_map)) + type = type_map[panel->hbm_mode]; + else + type = DSI_CMD_SET_MI_HBM_FOD_OFF; + + mutex_lock(&panel->panel_lock); + rc = dsi_panel_tx_cmd_set(panel, type); + mutex_unlock(&panel->panel_lock); + + return rc; +} diff --git a/techpack/display/msm/dsi/dsi_panel.h b/techpack/display/msm/dsi/dsi_panel.h index e8a7e1cc2b20..75f297fd843b 100644 --- a/techpack/display/msm/dsi/dsi_panel.h +++ b/techpack/display/msm/dsi/dsi_panel.h @@ -233,6 +233,8 @@ struct dsi_panel { int power_mode; enum dsi_panel_physical_type panel_type; + int hbm_mode; + struct brightness_alpha_pair *fod_dim_lut; uint32_t fod_dim_lut_count; @@ -380,4 +382,6 @@ uint32_t dsi_panel_get_fod_dim_alpha(struct dsi_panel *panel); int dsi_panel_set_doze_status(struct dsi_panel *panel, bool status); int dsi_panel_set_doze_mode(struct dsi_panel *panel, enum dsi_doze_mode_type mode); +int dsi_panel_apply_hbm_mode(struct dsi_panel *panel); + #endif /* _DSI_PANEL_H_ */ diff --git a/techpack/display/msm/sde/sde_connector.c b/techpack/display/msm/sde/sde_connector.c index 02564f870086..129a60056a38 100644 --- a/techpack/display/msm/sde/sde_connector.c +++ b/techpack/display/msm/sde/sde_connector.c @@ -1064,7 +1064,7 @@ int sde_connector_pre_kickoff(struct drm_connector *connector) struct sde_connector *c_conn; struct sde_connector_state *c_state; struct msm_display_kickoff_params params; - struct dsi_display *display; + struct dsi_display *display = NULL; int rc; if (!connector) { diff --git a/techpack/display/msm/sde/sde_plane.c b/techpack/display/msm/sde/sde_plane.c index b520173c8c7c..2644baa8f9b5 100644 --- a/techpack/display/msm/sde/sde_plane.c +++ b/techpack/display/msm/sde/sde_plane.c @@ -2337,7 +2337,7 @@ static void _sde_plane_get_max_downscale_limits(struct sde_plane *psde, { bool rotated, has_predown; const struct sde_sspp_sub_blks *sblk; - struct sde_hw_inline_pre_downscale_cfg *pd; + struct sde_hw_inline_pre_downscale_cfg *pd = NULL; rotated = pstate->rotation & DRM_MODE_ROTATE_90; sblk = psde->pipe_sblk; diff --git a/techpack/display/rotator/sde_rotator_core.c b/techpack/display/rotator/sde_rotator_core.c index e80be7ef216b..3ebb29e61e15 100644 --- a/techpack/display/rotator/sde_rotator_core.c +++ b/techpack/display/rotator/sde_rotator_core.c @@ -2866,7 +2866,7 @@ static int sde_rotator_get_dt_vreg_data(struct device *dev, struct device_node *of_node = NULL; int dt_vreg_total = 0; int i; - int rc; + int rc = 0; if (!dev || !mp) { SDEROT_ERR("%s: invalid input\n", __func__); diff --git a/techpack/video/msm/vidc/msm_vidc_bus_iris1.c b/techpack/video/msm/vidc/msm_vidc_bus_iris1.c index 91c1f6f2ec69..8c1616ca6eba 100644 --- a/techpack/video/msm/vidc/msm_vidc_bus_iris1.c +++ b/techpack/video/msm/vidc/msm_vidc_bus_iris1.c @@ -335,9 +335,9 @@ static unsigned long __calculate_encoder(struct vidc_bus_vote_data *d) /* Encoder Parameters */ int width, height, fps, lcu_size, bitrate, lcu_per_frame, collocated_bytes_per_lcu, tnbr_per_lcu, dpb_bpp, - original_color_format, vertical_tile_width; + original_color_format, vertical_tile_width, rotation; bool work_mode_1, original_compression_enabled, - low_power, rotation, cropping_or_scaling, + low_power, cropping_or_scaling, b_frames_enabled = false, llc_ref_chroma_cache_enabled = false, llc_top_line_buf_enabled = false,