You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge fd7bf900c3 ("i2c: cadence: cdns_i2c_master_xfer(): Fix runtime PM leak on error path") into android12-5.10-lts
Steps on the way to 5.10.180 Change-Id: I3438288cccc8a544306afc5aa178fde55e7e34fb Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -581,7 +581,7 @@ static int salinfo_cpu_pre_down(unsigned int cpu)
|
||||
* 'data' contains an integer that corresponds to the feature we're
|
||||
* testing
|
||||
*/
|
||||
static int proc_salinfo_show(struct seq_file *m, void *v)
|
||||
static int __maybe_unused proc_salinfo_show(struct seq_file *m, void *v)
|
||||
{
|
||||
unsigned long data = (unsigned long)v;
|
||||
seq_puts(m, (sal_platform_features & data) ? "1\n" : "0\n");
|
||||
|
||||
@@ -79,7 +79,7 @@ skip:
|
||||
return __per_cpu_start + __per_cpu_offset[smp_processor_id()];
|
||||
}
|
||||
|
||||
static inline void
|
||||
static inline __init void
|
||||
alloc_per_cpu_data(void)
|
||||
{
|
||||
size_t size = PERCPU_PAGE_SIZE * num_possible_cpus();
|
||||
|
||||
@@ -1516,6 +1516,14 @@ static int drbg_prepare_hrng(struct drbg_state *drbg)
|
||||
return 0;
|
||||
|
||||
drbg->jent = crypto_alloc_rng("jitterentropy_rng", 0, 0);
|
||||
if (IS_ERR(drbg->jent)) {
|
||||
const int err = PTR_ERR(drbg->jent);
|
||||
|
||||
drbg->jent = NULL;
|
||||
if (fips_enabled)
|
||||
return err;
|
||||
pr_info("DRBG: Continuing without Jitter RNG\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1571,14 +1579,6 @@ static int drbg_instantiate(struct drbg_state *drbg, struct drbg_string *pers,
|
||||
if (ret)
|
||||
goto free_everything;
|
||||
|
||||
if (IS_ERR(drbg->jent)) {
|
||||
ret = PTR_ERR(drbg->jent);
|
||||
drbg->jent = NULL;
|
||||
if (fips_enabled || ret != -ENOENT)
|
||||
goto free_everything;
|
||||
pr_info("DRBG: Continuing without Jitter RNG\n");
|
||||
}
|
||||
|
||||
reseed = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -352,7 +352,6 @@ static void btsdio_remove(struct sdio_func *func)
|
||||
|
||||
BT_DBG("func %p", func);
|
||||
|
||||
cancel_work_sync(&data->work);
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
|
||||
@@ -126,7 +126,8 @@ config NPCM7XX_KCS_IPMI_BMC
|
||||
|
||||
config ASPEED_BT_IPMI_BMC
|
||||
depends on ARCH_ASPEED || COMPILE_TEST
|
||||
depends on REGMAP && REGMAP_MMIO && MFD_SYSCON
|
||||
depends on MFD_SYSCON
|
||||
select REGMAP_MMIO
|
||||
tristate "BT IPMI bmc driver"
|
||||
help
|
||||
Provides a driver for the BT (Block Transfer) IPMI interface
|
||||
|
||||
@@ -115,7 +115,7 @@ static int fpga_bridge_dev_match(struct device *dev, const void *data)
|
||||
/**
|
||||
* fpga_bridge_get - get an exclusive reference to a fpga bridge
|
||||
* @dev: parent device that fpga bridge was registered with
|
||||
* @info: fpga manager info
|
||||
* @info: fpga image specific information
|
||||
*
|
||||
* Given a device, get an exclusive reference to a fpga bridge.
|
||||
*
|
||||
|
||||
@@ -740,6 +740,7 @@ int __init etm_perf_init(void)
|
||||
etm_pmu.addr_filters_sync = etm_addr_filters_sync;
|
||||
etm_pmu.addr_filters_validate = etm_addr_filters_validate;
|
||||
etm_pmu.nr_addr_filters = ETM_ADDR_CMP_MAX;
|
||||
etm_pmu.module = THIS_MODULE;
|
||||
|
||||
ret = perf_pmu_register(&etm_pmu, CORESIGHT_ETM_PMU_NAME, -1);
|
||||
if (ret == 0)
|
||||
|
||||
@@ -792,8 +792,10 @@ static int cdns_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
|
||||
#if IS_ENABLED(CONFIG_I2C_SLAVE)
|
||||
/* Check i2c operating mode and switch if possible */
|
||||
if (id->dev_mode == CDNS_I2C_MODE_SLAVE) {
|
||||
if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE)
|
||||
return -EAGAIN;
|
||||
if (id->slave_state != CDNS_I2C_SLAVE_STATE_IDLE) {
|
||||
ret = -EAGAIN;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Set mode to master */
|
||||
cdns_i2c_set_mode(CDNS_I2C_MODE_MASTER, id);
|
||||
|
||||
@@ -528,6 +528,12 @@ static int max44009_probe(struct i2c_client *client,
|
||||
return devm_iio_device_register(&client->dev, indio_dev);
|
||||
}
|
||||
|
||||
static const struct of_device_id max44009_of_match[] = {
|
||||
{ .compatible = "maxim,max44009" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, max44009_of_match);
|
||||
|
||||
static const struct i2c_device_id max44009_id[] = {
|
||||
{ "max44009", 0 },
|
||||
{ }
|
||||
@@ -537,18 +543,13 @@ MODULE_DEVICE_TABLE(i2c, max44009_id);
|
||||
static struct i2c_driver max44009_driver = {
|
||||
.driver = {
|
||||
.name = MAX44009_DRV_NAME,
|
||||
.of_match_table = max44009_of_match,
|
||||
},
|
||||
.probe = max44009_probe,
|
||||
.id_table = max44009_id,
|
||||
};
|
||||
module_i2c_driver(max44009_driver);
|
||||
|
||||
static const struct of_device_id max44009_of_match[] = {
|
||||
{ .compatible = "maxim,max44009" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, max44009_of_match);
|
||||
|
||||
MODULE_AUTHOR("Robert Eshleman <bobbyeshleman@gmail.com>");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DESCRIPTION("MAX44009 ambient light sensor driver");
|
||||
|
||||
@@ -2212,11 +2212,22 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
||||
{
|
||||
struct r10conf *conf = mddev->private;
|
||||
int d;
|
||||
struct bio *wbio, *wbio2;
|
||||
struct bio *wbio = r10_bio->devs[1].bio;
|
||||
struct bio *wbio2 = r10_bio->devs[1].repl_bio;
|
||||
|
||||
/* Need to test wbio2->bi_end_io before we call
|
||||
* submit_bio_noacct as if the former is NULL,
|
||||
* the latter is free to free wbio2.
|
||||
*/
|
||||
if (wbio2 && !wbio2->bi_end_io)
|
||||
wbio2 = NULL;
|
||||
|
||||
if (!test_bit(R10BIO_Uptodate, &r10_bio->state)) {
|
||||
fix_recovery_read_error(r10_bio);
|
||||
end_sync_request(r10_bio);
|
||||
if (wbio->bi_end_io)
|
||||
end_sync_request(r10_bio);
|
||||
if (wbio2)
|
||||
end_sync_request(r10_bio);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2225,14 +2236,6 @@ static void recovery_request_write(struct mddev *mddev, struct r10bio *r10_bio)
|
||||
* and submit the write request
|
||||
*/
|
||||
d = r10_bio->devs[1].devnum;
|
||||
wbio = r10_bio->devs[1].bio;
|
||||
wbio2 = r10_bio->devs[1].repl_bio;
|
||||
/* Need to test wbio2->bi_end_io before we call
|
||||
* submit_bio_noacct as if the former is NULL,
|
||||
* the latter is free to free wbio2.
|
||||
*/
|
||||
if (wbio2 && !wbio2->bi_end_io)
|
||||
wbio2 = NULL;
|
||||
if (wbio->bi_end_io) {
|
||||
atomic_inc(&conf->mirrors[d].rdev->nr_pending);
|
||||
md_sync_acct(conf->mirrors[d].rdev->bdev, bio_sectors(wbio));
|
||||
@@ -3615,6 +3618,20 @@ static int setup_geo(struct geom *geo, struct mddev *mddev, enum geo_type new)
|
||||
return nc*fc;
|
||||
}
|
||||
|
||||
static void raid10_free_conf(struct r10conf *conf)
|
||||
{
|
||||
if (!conf)
|
||||
return;
|
||||
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
kfree(conf->mirrors);
|
||||
kfree(conf->mirrors_old);
|
||||
kfree(conf->mirrors_new);
|
||||
safe_put_page(conf->tmppage);
|
||||
bioset_exit(&conf->bio_split);
|
||||
kfree(conf);
|
||||
}
|
||||
|
||||
static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
{
|
||||
struct r10conf *conf = NULL;
|
||||
@@ -3697,13 +3714,7 @@ static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
return conf;
|
||||
|
||||
out:
|
||||
if (conf) {
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
kfree(conf->mirrors);
|
||||
safe_put_page(conf->tmppage);
|
||||
bioset_exit(&conf->bio_split);
|
||||
kfree(conf);
|
||||
}
|
||||
raid10_free_conf(conf);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
@@ -3741,6 +3752,9 @@ static int raid10_run(struct mddev *mddev)
|
||||
if (!conf)
|
||||
goto out;
|
||||
|
||||
mddev->thread = conf->thread;
|
||||
conf->thread = NULL;
|
||||
|
||||
if (mddev_is_clustered(conf->mddev)) {
|
||||
int fc, fo;
|
||||
|
||||
@@ -3753,9 +3767,6 @@ static int raid10_run(struct mddev *mddev)
|
||||
}
|
||||
}
|
||||
|
||||
mddev->thread = conf->thread;
|
||||
conf->thread = NULL;
|
||||
|
||||
if (mddev->queue) {
|
||||
blk_queue_max_discard_sectors(mddev->queue,
|
||||
mddev->chunk_sectors);
|
||||
@@ -3909,10 +3920,7 @@ static int raid10_run(struct mddev *mddev)
|
||||
|
||||
out_free_conf:
|
||||
md_unregister_thread(&mddev->thread);
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
safe_put_page(conf->tmppage);
|
||||
kfree(conf->mirrors);
|
||||
kfree(conf);
|
||||
raid10_free_conf(conf);
|
||||
mddev->private = NULL;
|
||||
out:
|
||||
return -EIO;
|
||||
@@ -3920,15 +3928,7 @@ out:
|
||||
|
||||
static void raid10_free(struct mddev *mddev, void *priv)
|
||||
{
|
||||
struct r10conf *conf = priv;
|
||||
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
safe_put_page(conf->tmppage);
|
||||
kfree(conf->mirrors);
|
||||
kfree(conf->mirrors_old);
|
||||
kfree(conf->mirrors_new);
|
||||
bioset_exit(&conf->bio_split);
|
||||
kfree(conf);
|
||||
raid10_free_conf(priv);
|
||||
}
|
||||
|
||||
static void raid10_quiesce(struct mddev *mddev, int quiesce)
|
||||
|
||||
@@ -165,10 +165,16 @@ static int vmci_host_close(struct inode *inode, struct file *filp)
|
||||
static __poll_t vmci_host_poll(struct file *filp, poll_table *wait)
|
||||
{
|
||||
struct vmci_host_dev *vmci_host_dev = filp->private_data;
|
||||
struct vmci_ctx *context = vmci_host_dev->context;
|
||||
struct vmci_ctx *context;
|
||||
__poll_t mask = 0;
|
||||
|
||||
if (vmci_host_dev->ct_type == VMCIOBJ_CONTEXT) {
|
||||
/*
|
||||
* Read context only if ct_type == VMCIOBJ_CONTEXT to make
|
||||
* sure that context is initialized
|
||||
*/
|
||||
context = vmci_host_dev->context;
|
||||
|
||||
/* Check for VMCI calls to this VM context. */
|
||||
if (wait)
|
||||
poll_wait(filp, &context->host_context.wait_queue,
|
||||
|
||||
@@ -650,7 +650,7 @@ static int nmclan_config(struct pcmcia_device *link)
|
||||
} else {
|
||||
pr_notice("mace id not found: %x %x should be 0x40 0x?9\n",
|
||||
sig[0], sig[1]);
|
||||
return -ENODEV;
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2641,6 +2641,14 @@ static int ixgbe_get_rss_hash_opts(struct ixgbe_adapter *adapter,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
if (adapter->hw.mac.type < ixgbe_mac_X550)
|
||||
return 16;
|
||||
else
|
||||
return 64;
|
||||
}
|
||||
|
||||
static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
|
||||
u32 *rule_locs)
|
||||
{
|
||||
@@ -2649,7 +2657,8 @@ static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
|
||||
|
||||
switch (cmd->cmd) {
|
||||
case ETHTOOL_GRXRINGS:
|
||||
cmd->data = adapter->num_rx_queues;
|
||||
cmd->data = min_t(int, adapter->num_rx_queues,
|
||||
ixgbe_rss_indir_tbl_max(adapter));
|
||||
ret = 0;
|
||||
break;
|
||||
case ETHTOOL_GRXCLSRLCNT:
|
||||
@@ -3051,14 +3060,6 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter)
|
||||
{
|
||||
if (adapter->hw.mac.type < ixgbe_mac_X550)
|
||||
return 16;
|
||||
else
|
||||
return 64;
|
||||
}
|
||||
|
||||
static u32 ixgbe_get_rxfh_key_size(struct net_device *netdev)
|
||||
{
|
||||
return IXGBE_RSS_KEY_SIZE;
|
||||
@@ -3107,8 +3108,8 @@ static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir,
|
||||
int i;
|
||||
u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter);
|
||||
|
||||
if (hfunc)
|
||||
return -EINVAL;
|
||||
if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Fill out the redirection table */
|
||||
if (indir) {
|
||||
|
||||
@@ -1194,9 +1194,6 @@ static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
|
||||
int ret;
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
if (!ldo)
|
||||
return 0;
|
||||
|
||||
if (enable) {
|
||||
ret = regulator_enable(ldo);
|
||||
if (ret)
|
||||
@@ -1227,14 +1224,11 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
|
||||
of_get_phy_mode(dev->of_node, &bsp_priv->phy_iface);
|
||||
bsp_priv->ops = ops;
|
||||
|
||||
bsp_priv->regulator = devm_regulator_get_optional(dev, "phy");
|
||||
bsp_priv->regulator = devm_regulator_get(dev, "phy");
|
||||
if (IS_ERR(bsp_priv->regulator)) {
|
||||
if (PTR_ERR(bsp_priv->regulator) == -EPROBE_DEFER) {
|
||||
dev_err(dev, "phy regulator is not available yet, deferred probing\n");
|
||||
return ERR_PTR(-EPROBE_DEFER);
|
||||
}
|
||||
dev_err(dev, "no regulator found\n");
|
||||
bsp_priv->regulator = NULL;
|
||||
ret = PTR_ERR(bsp_priv->regulator);
|
||||
dev_err_probe(dev, ret, "failed to get phy regulator\n");
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
ret = of_property_read_string(dev->of_node, "clock_in_out", &strings);
|
||||
|
||||
@@ -1372,13 +1372,13 @@ static void iwl_ini_get_rxf_data(struct iwl_fw_runtime *fwrt,
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
memset(data, 0, sizeof(*data));
|
||||
|
||||
/* make sure only one bit is set in only one fid */
|
||||
if (WARN_ONCE(hweight_long(fid1) + hweight_long(fid2) != 1,
|
||||
"fid1=%x, fid2=%x\n", fid1, fid2))
|
||||
return;
|
||||
|
||||
memset(data, 0, sizeof(*data));
|
||||
|
||||
if (fid1) {
|
||||
fifo_idx = ffs(fid1) - 1;
|
||||
if (WARN_ONCE(fifo_idx >= MAX_NUM_LMAC, "fifo_idx=%d\n",
|
||||
|
||||
@@ -344,8 +344,10 @@ static void *iwl_dbgfs_fw_info_seq_next(struct seq_file *seq,
|
||||
const struct iwl_fw *fw = priv->fwrt->fw;
|
||||
|
||||
*pos = ++state->pos;
|
||||
if (*pos >= fw->ucode_capa.n_cmd_versions)
|
||||
if (*pos >= fw->ucode_capa.n_cmd_versions) {
|
||||
kfree(state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -191,6 +191,12 @@ static int iwl_dbg_tlv_alloc_buf_alloc(struct iwl_trans *trans,
|
||||
alloc_id != IWL_FW_INI_ALLOCATION_ID_INTERNAL)
|
||||
goto err;
|
||||
|
||||
if (buf_location == IWL_FW_INI_LOCATION_DRAM_PATH &&
|
||||
alloc->req_size == 0) {
|
||||
IWL_ERR(trans, "WRT: Invalid DRAM buffer allocation requested size (0)\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
trans->dbg.fw_mon_cfg[alloc_id] = *alloc;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1885,6 +1885,11 @@ static ssize_t iwl_dbgfs_mem_read(struct file *file, char __user *user_buf,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (iwl_rx_packet_payload_len(hcmd.resp_pkt) < sizeof(*rsp)) {
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
rsp = (void *)hcmd.resp_pkt->data;
|
||||
if (le32_to_cpu(rsp->status) != DEBUG_MEM_STATUS_SUCCESS) {
|
||||
ret = -ENXIO;
|
||||
@@ -1962,6 +1967,11 @@ static ssize_t iwl_dbgfs_mem_write(struct file *file,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (iwl_rx_packet_payload_len(hcmd.resp_pkt) < sizeof(*rsp)) {
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
rsp = (void *)hcmd.resp_pkt->data;
|
||||
if (rsp->status != DEBUG_MEM_STATUS_SUCCESS) {
|
||||
ret = -ENXIO;
|
||||
|
||||
@@ -620,7 +620,6 @@ static int iwl_pcie_set_hw_ready(struct iwl_trans *trans)
|
||||
int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||
{
|
||||
int ret;
|
||||
int t = 0;
|
||||
int iter;
|
||||
|
||||
IWL_DEBUG_INFO(trans, "iwl_trans_prepare_card_hw enter\n");
|
||||
@@ -635,6 +634,8 @@ int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
|
||||
usleep_range(1000, 2000);
|
||||
|
||||
for (iter = 0; iter < 10; iter++) {
|
||||
int t = 0;
|
||||
|
||||
/* If HW is not ready, prepare the conditions to check again */
|
||||
iwl_set_bit(trans, CSR_HW_IF_CONFIG_REG,
|
||||
CSR_HW_IF_CONFIG_REG_PREPARE);
|
||||
|
||||
@@ -278,8 +278,8 @@ static ssize_t rtl_debugfs_set_write_reg(struct file *filp,
|
||||
|
||||
tmp_len = (count > sizeof(tmp) - 1 ? sizeof(tmp) - 1 : count);
|
||||
|
||||
if (!buffer || copy_from_user(tmp, buffer, tmp_len))
|
||||
return count;
|
||||
if (copy_from_user(tmp, buffer, tmp_len))
|
||||
return -EFAULT;
|
||||
|
||||
tmp[tmp_len] = '\0';
|
||||
|
||||
@@ -287,7 +287,7 @@ static ssize_t rtl_debugfs_set_write_reg(struct file *filp,
|
||||
num = sscanf(tmp, "%x %x %x", &addr, &val, &len);
|
||||
|
||||
if (num != 3)
|
||||
return count;
|
||||
return -EINVAL;
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
@@ -375,8 +375,8 @@ static ssize_t rtl_debugfs_set_write_rfreg(struct file *filp,
|
||||
|
||||
tmp_len = (count > sizeof(tmp) - 1 ? sizeof(tmp) - 1 : count);
|
||||
|
||||
if (!buffer || copy_from_user(tmp, buffer, tmp_len))
|
||||
return count;
|
||||
if (copy_from_user(tmp, buffer, tmp_len))
|
||||
return -EFAULT;
|
||||
|
||||
tmp[tmp_len] = '\0';
|
||||
|
||||
@@ -386,7 +386,7 @@ static ssize_t rtl_debugfs_set_write_rfreg(struct file *filp,
|
||||
if (num != 4) {
|
||||
rtl_dbg(rtlpriv, COMP_ERR, DBG_DMESG,
|
||||
"Format is <path> <addr> <mask> <data>\n");
|
||||
return count;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rtl_set_rfreg(hw, path, addr, bitmask, data);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user