The clk_init_data structure contains several mutually-exclusive members
for different methods to specify the possible parents of a clock,
prompting drivers to initialize only the members they need. However,
not initializing all members may cause subtle issues, which are only
exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
enabled.
Make sure all members are fully initialized, to avoid such bugs, and to
prevent future breakage when converting drivers to a different method
for specifying the parents.
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Compile-tested only.
---
drivers/clk/tegra/clk-audio-sync.c | 2 +-
drivers/clk/tegra/clk-divider.c | 2 +-
drivers/clk/tegra/clk-periph-fixed.c | 2 +-
drivers/clk/tegra/clk-periph-gate.c | 2 +-
drivers/clk/tegra/clk-periph.c | 2 +-
drivers/clk/tegra/clk-pll-out.c | 2 +-
drivers/clk/tegra/clk-pll.c | 2 +-
drivers/clk/tegra/clk-sdmmc-mux.c | 2 +-
drivers/clk/tegra/clk-super.c | 4 ++--
drivers/clk/tegra/clk-tegra-super-cclk.c | 2 +-
drivers/clk/tegra/clk-tegra124-emc.c | 2 +-
drivers/clk/tegra/clk-tegra20-emc.c | 2 +-
drivers/clk/tegra/clk-tegra210-emc.c | 2 +-
13 files changed, 14 insertions(+), 14 deletions(-)
@@ -47,7 +47,7 @@ struct clk *tegra_clk_register_sync_source(const char *name,
unsigned long max_rate)
{
struct tegra_clk_sync_source *sync;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk *clk;
sync = kzalloc_obj(*sync);
@@ -145,8 +145,8 @@ struct clk *tegra_clk_register_divider(const char *name,
u8 frac_width, spinlock_t *lock)
{
struct tegra_clk_frac_div *divider;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
divider = kzalloc_obj(*divider);
if (!divider) {
@@ -77,7 +77,7 @@ struct clk *tegra_clk_register_periph_fixed(const char *name,
{
const struct tegra_clk_periph_regs *regs;
struct tegra_clk_periph_fixed *fixed;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk *clk;
regs = get_reg_bank(num);
@@ -139,7 +139,7 @@ struct clk *tegra_clk_register_periph_gate(const char *name,
{
struct tegra_clk_periph_gate *gate;
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *pregs;
pregs = get_reg_bank(clk_num);
@@ -166,7 +166,7 @@ static struct clk *_tegra_clk_register_periph(const char *name,
unsigned long flags)
{
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *bank;
bool div = !(periph->gate.flags & TEGRA_PERIPH_NO_DIV);
@@ -90,8 +90,8 @@ struct clk *tegra_clk_register_pll_out(const char *name,
spinlock_t *lock)
{
struct tegra_clk_pll_out *pll_out;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
pll_out = kzalloc_obj(*pll_out);
if (!pll_out)
@@ -1903,7 +1903,7 @@ static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll,
const char *name, const char *parent_name, unsigned long flags,
const struct clk_ops *ops)
{
- struct clk_init_data init;
+ struct clk_init_data init = {};
init.name = name;
init.ops = ops;
@@ -236,7 +236,7 @@ struct clk *tegra_clk_register_sdmmc_mux_div(const char *name,
unsigned long flags, void *lock)
{
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *bank;
struct tegra_sdmmc_mux *sdmmc_mux;
@@ -204,8 +204,8 @@ struct clk *tegra_clk_register_super_mux(const char *name,
u8 width, u8 pllx_index, u8 div2_index, spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
super = kzalloc_obj(*super);
if (!super)
@@ -240,8 +240,8 @@ struct clk *tegra_clk_register_super_clk(const char *name,
spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
super = kzalloc_obj(*super);
if (!super)
@@ -135,8 +135,8 @@ struct clk *tegra_clk_register_super_cclk(const char *name,
spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
u32 val;
if (WARN_ON(cclk_super))
@@ -485,8 +485,8 @@ static const struct clk_ops tegra_clk_emc_ops = {
struct clk *tegra124_clk_register_emc(void __iomem *base, struct device_node *np,
spinlock_t *lock)
{
+ struct clk_init_data init = {};
struct tegra_clk_emc *tegra;
- struct clk_init_data init;
struct device_node *node;
u32 node_ram_code;
struct clk *clk;
@@ -245,8 +245,8 @@ bool tegra20_clk_emc_driver_available(struct clk_hw *emc_hw)
struct clk *tegra20_clk_register_emc(void __iomem *ioaddr, bool low_jitter)
{
+ struct clk_init_data init = {};
struct tegra_clk_emc *emc;
- struct clk_init_data init;
struct clk *clk;
emc = kzalloc_obj(*emc);
@@ -274,8 +274,8 @@ static const struct clk_ops tegra210_clk_emc_ops = {
struct clk *tegra210_clk_register_emc(struct device_node *np,
void __iomem *regs)
{
+ struct clk_init_data init = {};
struct tegra210_clk_emc *emc;
- struct clk_init_data init;
struct clk *clk;
emc = kzalloc_obj(*emc);