5.10.182-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.10.182-rc1 review
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.182-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.10.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.10.182-rc1
Paul Blakey <[email protected]>
netfilter: ctnetlink: Support offloaded conntrack entry deletion
Nicolas Dichtel <[email protected]>
ipv{4,6}/raw: fix output xfrm lookup wrt protocol
Carlos Llamas <[email protected]>
binder: fix UAF caused by faulty buffer cleanup
Ruihan Li <[email protected]>
bluetooth: Add cmd validity checks at the start of hci_sock_ioctl()
David Epping <[email protected]>
net: phy: mscc: enable VSC8501/2 RGMII RX clock
Shay Drory <[email protected]>
net/mlx5: Devcom, serialize devcom registration
Mark Bloch <[email protected]>
net/mlx5: devcom only supports 2 ports
Alexander Stein <[email protected]>
regulator: pca9450: Fix BUCK2 enable_mask
Axel Lin <[email protected]>
regulator: pca9450: Convert to use regulator_set_ramp_delay_regmap
Matti Vaittinen <[email protected]>
regulator: Add regmap helper for ramp-delay setting
Hans de Goede <[email protected]>
power: supply: bq24190: Call power_supply_changed() after updating input current
Hans de Goede <[email protected]>
power: supply: core: Refactor power_supply_set_input_current_limit_from_supplier()
Hans de Goede <[email protected]>
power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize
Hans de Goede <[email protected]>
power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes
Hans de Goede <[email protected]>
power: supply: bq27xxx: Move bq27xxx_battery_update() down
Sicelo A. Mhlongo <[email protected]>
power: supply: bq27xxx: expose battery data when CI=1
Hans de Goede <[email protected]>
power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()
Matthias Schiffer <[email protected]>
power: supply: bq27xxx: make status more robust
Matthias Schiffer <[email protected]>
power: supply: bq27xxx: fix sign of current_now for newer ICs
Andreas Kemnade <[email protected]>
power: supply: bq27xxx: fix polarity of current_now
Tony Luck <[email protected]>
x86/cpu: Drop spurious underscore from RAPTOR_LAKE #define
Tony Luck <[email protected]>
x86/cpu: Add Raptor Lake to Intel family
-------------
Diffstat:
Makefile | 4 +- arch/x86/include/asm/intel-family.h | 2 + drivers/android/binder.c | 26 ++- .../net/ethernet/mellanox/mlx5/core/lib/devcom.c | 35 ++-- .../net/ethernet/mellanox/mlx5/core/lib/devcom.h | 2 + drivers/net/phy/mscc/mscc.h | 1 + drivers/net/phy/mscc/mscc_main.c | 54 ++--- drivers/power/supply/bq24190_charger.c | 13 +- drivers/power/supply/bq27xxx_battery.c | 224 +++++++++++---------- drivers/power/supply/power_supply_core.c | 57 +++--- drivers/regulator/helpers.c | 65 ++++++ drivers/regulator/pca9450-regulator.c | 55 +++-- include/linux/power/bq27xxx_battery.h | 3 + include/linux/power_supply.h | 5 +- include/linux/regulator/driver.h | 5 + include/net/ip.h | 2 + include/uapi/linux/in.h | 2 + net/bluetooth/hci_sock.c | 28 +++ net/ipv4/ip_sockglue.c | 12 +- net/ipv4/raw.c | 5 +- net/ipv6/raw.c | 3 +- net/netfilter/nf_conntrack_netlink.c | 8 - 22 files changed, 387 insertions(+), 224 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/22 x86/cpu: Add Raptor Lake to Intel family
From: Tony Luck <[email protected]>
[ Upstream commit fbdb5e8f2926ae9636c9fa6f42c7426132ddeeb2 ]
Add model ID for Raptor Lake.
[ dhansen: These get added as soon as possible so that folks doing
development can leverage them. ]
Stable-dep-of: ce0b15d11ad8 ("x86/mm: Avoid incomplete Global INVLPG flushes")
--- arch/x86/include/asm/intel-family.h | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/include/asm/intel-family.h +2 -0
@@ -104,6 +104,8 @@#define INTEL_FAM6_RAPTORLAKE_P 0xBA#define INTEL_FAM6_RAPTORLAKE_S 0xBF +#define INTEL_FAM6_RAPTOR_LAKE 0xB7 +/* "Small Core" Processors (Atom) */ #define INTEL_FAM6_ATOM_BONNELL 0x1C/* Diamondville, Pineview */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 2/22 x86/cpu: Drop spurious underscore from RAPTOR_LAKE #define
In reply to Greg Kroah-HartmanFrom: Tony Luck <[email protected]>
[ Upstream commit 7d697f0d5737768fa1039b8953b67c08d8d406d1 ]
Convention for all the other "lake" CPUs is all one word.
So s/RAPTOR_LAKE/RAPTORLAKE/
Stable-dep-of: ce0b15d11ad8 ("x86/mm: Avoid incomplete Global INVLPG flushes")
--- arch/x86/include/asm/intel-family.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/include/asm/intel-family.h +1 -1
@@ -104,7 +104,7 @@#define INTEL_FAM6_RAPTORLAKE_P 0xBA#define INTEL_FAM6_RAPTORLAKE_S 0xBF -#define INTEL_FAM6_RAPTOR_LAKE 0xB7 +#define INTEL_FAM6_RAPTORLAKE 0xB7/* "Small Core" Processors (Atom) */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 3/22 power: supply: bq27xxx: fix polarity of current_now
In reply to Greg Kroah-HartmanFrom: Andreas Kemnade <[email protected]>
[ Upstream commit cd060b4d0868c806c2738a5e64e8ab9bd0fbec07 ]
current_now has to be negative during discharging and positive during charging, the behavior seen is the other way round.
Tested on GTA04 with Openmoko battery.
Stable-dep-of: 35092c5819f8 ("power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()")
--- drivers/power/supply/bq27xxx_battery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/supply/bq27xxx_battery.c +2 -2
@@ -1773,7 +1773,7 @@ static int bq27xxx_battery_current(struct bq27xxx_device_info *di,if (di->opts &BQ27XXX_O_ZERO ) { flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , true); -if (flags &BQ27000_FLAG_CHGS ) { +if (!(flags &BQ27000_FLAG_CHGS )) {dev_dbg (di->dev,"negative current!\n" ); curr = -curr; }
@@ -1781,7 +1781,7 @@ static int bq27xxx_battery_current(struct bq27xxx_device_info *di, val->intval = curr *BQ27XXX_CURRENT_CONSTANT /BQ27XXX_RS ; }else {/* Other gauges return signed value */ - val->intval = (int )((s16 )curr) *1000 ; + val->intval = -(int )((s16 )curr) *1000 ; }return 0 ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 4/22 power: supply: bq27xxx: fix sign of current_now for newer ICs
In reply to Greg Kroah-HartmanFrom: Matthias Schiffer <[email protected]>
[ Upstream commit b67fdcb7099e9c640bad625c4dd6399debb3376a ]
Commit cd060b4d0868 ("power: supply: bq27xxx: fix polarity of current_now") changed the sign of current_now for all bq27xxx variants, but on BQ28Z610 I'm now seeing negated values *with* that patch.
The GTA04/Openmoko device that was used for testing uses a BQ27000 or BQ27010 IC, so I assume only the BQ27XXX_O_ZERO code path was incorrect. Revert the behaviour for newer ICs.
Stable-dep-of: 35092c5819f8 ("power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()")
--- drivers/power/supply/bq27xxx_battery.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/power/supply/bq27xxx_battery.c +1 -1
@@ -1781,7 +1781,7 @@ static int bq27xxx_battery_current(struct bq27xxx_device_info *di, val->intval = curr *BQ27XXX_CURRENT_CONSTANT /BQ27XXX_RS ; }else {/* Other gauges return signed value */ - val->intval = -(int )((s16 )curr) *1000 ; + val->intval = (int )((s16 )curr) *1000 ; }return 0 ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 5/22 power: supply: bq27xxx: make status more robust
In reply to Greg Kroah-HartmanFrom: Matthias Schiffer <[email protected]>
[ Upstream commit c3a6d6a1dfc8a9bf12d79a0b1a30cb24c92a2ddf ]
There are multiple issues in bq27xxx_battery_status():
- On BQ28Q610 is was observed that the "full" flag may be set even while the battery is charging or discharging. With the current logic to make "full" override everything else, it look a very long time (>20min) for the status to change from "full" to "discharging" after unplugging the supply on a device with low power consumption
- The POWER_SUPPLY_STATUS_NOT_CHARGING check depends on power_supply_am_i_supplied(), which will not work when the supply doesn't exist as a separate device known to Linux
We can solve both issues by deriving the status from the current instead of the flags field. The flags are now only used to distinguish "full" from "not charging", and to determine the sign of the current on BQ27XXX_O_ZERO devices.
Stable-dep-of: 35092c5819f8 ("power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()")
--- drivers/power/supply/bq27xxx_battery.c | 88 +++++++++++++------------- 1 file changed, 43 insertions(+), 45 deletions(-)
drivers/power/supply/bq27xxx_battery.c +43 -45
@@ -1754,14 +1754,27 @@ static void bq27xxx_battery_poll(struct work_struct *work)bq27xxx_battery_update (di); } +static bool bq27xxx_battery_is_full (struct bq27xxx_device_info *di,int flags) +{ +if (di->opts &BQ27XXX_O_ZERO ) +return (flags &BQ27000_FLAG_FC ); +else if (di->opts &BQ27Z561_O_BITS ) +return (flags &BQ27Z561_FLAG_FC ); +else +return (flags &BQ27XXX_FLAG_FC ); +} +/* -* Return the battery average current in µA +* Return the battery average current in µA and the status * Note that current can be negative signed as well * Or 0 if something fails. */ -static int bq27xxx_battery_current (struct bq27xxx_device_info *di, -union power_supply_propval *val) +static int bq27xxx_battery_current_and_status ( +struct bq27xxx_device_info *di, +union power_supply_propval *val_curr, +union power_supply_propval *val_status) { +bool single_flags = (di->opts &BQ27XXX_O_ZERO );int curr;int flags;
@@ -1771,17 +1784,39 @@ static int bq27xxx_battery_current(struct bq27xxx_device_info *di,return curr; } + flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , single_flags); +if (flags <0 ) { +dev_err (di->dev,"error reading flags\n" ); +return flags; + } +if (di->opts &BQ27XXX_O_ZERO ) { - flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , true);if (!(flags &BQ27000_FLAG_CHGS )) {dev_dbg (di->dev,"negative current!\n" ); curr = -curr; } - val->intval = curr *BQ27XXX_CURRENT_CONSTANT /BQ27XXX_RS ; + curr = curr *BQ27XXX_CURRENT_CONSTANT /BQ27XXX_RS ; }else {/* Other gauges return signed value */ - val->intval = (int )((s16 )curr) *1000 ; + curr = (int )((s16 )curr) *1000 ; + } + +if (val_curr) + val_curr->intval = curr; + +if (val_status) { +if (curr >0 ) { + val_status->intval =POWER_SUPPLY_STATUS_CHARGING ; + }else if (curr <0 ) { + val_status->intval =POWER_SUPPLY_STATUS_DISCHARGING ; + }else { +if (bq27xxx_battery_is_full (di, flags)) + val_status->intval =POWER_SUPPLY_STATUS_FULL ; +else + val_status->intval = +POWER_SUPPLY_STATUS_NOT_CHARGING ; + } }return 0 ;
@@ -1813,43 +1848,6 @@ static int bq27xxx_battery_pwr_avg(struct bq27xxx_device_info *di,return 0 ; } -static int bq27xxx_battery_status (struct bq27xxx_device_info *di, -union power_supply_propval *val) -{ -int status; - -if (di->opts &BQ27XXX_O_ZERO ) { -if (di->cache.flags &BQ27000_FLAG_FC ) - status =POWER_SUPPLY_STATUS_FULL ; -else if (di->cache.flags &BQ27000_FLAG_CHGS ) - status =POWER_SUPPLY_STATUS_CHARGING ; -else - status =POWER_SUPPLY_STATUS_DISCHARGING ; - }else if (di->opts &BQ27Z561_O_BITS ) { -if (di->cache.flags &BQ27Z561_FLAG_FC ) - status =POWER_SUPPLY_STATUS_FULL ; -else if (di->cache.flags &BQ27Z561_FLAG_DIS_CH ) - status =POWER_SUPPLY_STATUS_DISCHARGING ; -else - status =POWER_SUPPLY_STATUS_CHARGING ; - }else { -if (di->cache.flags &BQ27XXX_FLAG_FC ) - status =POWER_SUPPLY_STATUS_FULL ; -else if (di->cache.flags &BQ27XXX_FLAG_DSC ) - status =POWER_SUPPLY_STATUS_DISCHARGING ; -else - status =POWER_SUPPLY_STATUS_CHARGING ; - } - -if ((status ==POWER_SUPPLY_STATUS_DISCHARGING ) && - (power_supply_am_i_supplied (di->bat) >0 )) - status =POWER_SUPPLY_STATUS_NOT_CHARGING ; - - val->intval = status; - -return 0 ; -} -static int bq27xxx_battery_capacity_level (struct bq27xxx_device_info *di,union power_supply_propval *val) {
@@ -1935,7 +1933,7 @@ static int bq27xxx_battery_get_property(struct power_supply *psy,switch (psp) {case POWER_SUPPLY_PROP_STATUS : - ret =bq27xxx_battery_status (di, val); + ret =bq27xxx_battery_current_and_status (di,NULL , val);break ;case POWER_SUPPLY_PROP_VOLTAGE_NOW : ret =bq27xxx_battery_voltage (di, val);
@@ -1944,7 +1942,7 @@ static int bq27xxx_battery_get_property(struct power_supply *psy, val->intval = di->cache.flags <0 ?0 :1 ;break ;case POWER_SUPPLY_PROP_CURRENT_NOW : - ret =bq27xxx_battery_current (di, val); + ret =bq27xxx_battery_current_and_status (di, val,NULL );break ;case POWER_SUPPLY_PROP_CAPACITY : ret =bq27xxx_simple_value (di->cache.capacity, val);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 6/22 power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 35092c5819f8c5acc7bafe3fdbb13d6307c4f5e1 ]
Add a cache parameter to bq27xxx_battery_current_and_status() so that it can optionally use cached flags instead of re-reading them itself.
This is a preparation patch for making bq27xxx_battery_update() check the status and have it call power_supply_changed() on status changes.
--- drivers/power/supply/bq27xxx_battery.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
drivers/power/supply/bq27xxx_battery.c +12 -7
@@ -1772,7 +1772,8 @@ static bool bq27xxx_battery_is_full(struct bq27xxx_device_info *di, int flags)static int bq27xxx_battery_current_and_status (struct bq27xxx_device_info *di,union power_supply_propval *val_curr, -union power_supply_propval *val_status) +union power_supply_propval *val_status, +struct bq27xxx_reg_cache *cache) {bool single_flags = (di->opts &BQ27XXX_O_ZERO );int curr;
@@ -1784,10 +1785,14 @@ static int bq27xxx_battery_current_and_status(return curr; } - flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , single_flags); -if (flags <0 ) { -dev_err (di->dev,"error reading flags\n" ); -return flags; +if (cache) { + flags = cache->flags; + }else { + flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , single_flags); +if (flags <0 ) { +dev_err (di->dev,"error reading flags\n" ); +return flags; + } }if (di->opts &BQ27XXX_O_ZERO ) {
@@ -1933,7 +1938,7 @@ static int bq27xxx_battery_get_property(struct power_supply *psy,switch (psp) {case POWER_SUPPLY_PROP_STATUS : - ret =bq27xxx_battery_current_and_status (di,NULL , val); + ret =bq27xxx_battery_current_and_status (di,NULL , val,NULL );break ;case POWER_SUPPLY_PROP_VOLTAGE_NOW : ret =bq27xxx_battery_voltage (di, val);
@@ -1942,7 +1947,7 @@ static int bq27xxx_battery_get_property(struct power_supply *psy, val->intval = di->cache.flags <0 ?0 :1 ;break ;case POWER_SUPPLY_PROP_CURRENT_NOW : - ret =bq27xxx_battery_current_and_status (di, val,NULL ); + ret =bq27xxx_battery_current_and_status (di, val,NULL ,NULL );break ;case POWER_SUPPLY_PROP_CAPACITY : ret =bq27xxx_simple_value (di->cache.capacity, val);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 7/22 power: supply: bq27xxx: expose battery data when CI=1
In reply to Greg Kroah-HartmanFrom: Sicelo A. Mhlongo <[email protected]>
[ Upstream commit 68fdbe090c362e8be23890a7333d156e18c27781 ]
When the Capacity Inaccurate flag is set, the chip still provides data about the battery, albeit inaccurate. Instead of discarding capacity values for CI=1, expose the stale data and use the POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED property to indicate that the values should be used with care.
Stable-dep-of: ff4c4a2a4437 ("power: supply: bq27xxx: Move bq27xxx_battery_update() down")
--- drivers/power/supply/bq27xxx_battery.c | 60 ++++++++++++-------------- 1 file changed, 27 insertions(+), 33 deletions(-)
drivers/power/supply/bq27xxx_battery.c +27 -33
@@ -1507,14 +1507,6 @@ static int bq27xxx_battery_read_charge(struct bq27xxx_device_info *di, u8 reg)*/ static inline int bq27xxx_battery_read_nac (struct bq27xxx_device_info *di) { -int flags; - -if (di->opts &BQ27XXX_O_ZERO ) { - flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , true); -if (flags >=0 && (flags &BQ27000_FLAG_CI )) -return -ENODATA ; - } -return bq27xxx_battery_read_charge (di,BQ27XXX_REG_NAC ); }
@@ -1668,6 +1660,18 @@ static bool bq27xxx_battery_dead(struct bq27xxx_device_info *di, u16 flags)return flags & (BQ27XXX_FLAG_SOC1 |BQ27XXX_FLAG_SOCF ); } +/* +* Returns true if reported battery capacity is inaccurate +*/ +static bool bq27xxx_battery_capacity_inaccurate (struct bq27xxx_device_info *di, +u16 flags) +{ +if (di->opts &BQ27XXX_O_HAS_CI ) +return (flags &BQ27000_FLAG_CI ); +else +return false; +} +static int bq27xxx_battery_read_health (struct bq27xxx_device_info *di) {/* Unlikely but important to return first */
@@ -1677,6 +1681,8 @@ static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di)return POWER_SUPPLY_HEALTH_COLD ;if (unlikely (bq27xxx_battery_dead (di, di->cache.flags)))return POWER_SUPPLY_HEALTH_DEAD ; +if (unlikely (bq27xxx_battery_capacity_inaccurate (di, di->cache.flags))) +return POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED ;return POWER_SUPPLY_HEALTH_GOOD ; }
@@ -1684,7 +1690,6 @@ static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di)static void bq27xxx_battery_update_unlocked (struct bq27xxx_device_info *di) {struct bq27xxx_reg_cache cache = {0 , }; -bool has_ci_flag = di->opts &BQ27XXX_O_HAS_CI ;bool has_singe_flag = di->opts &BQ27XXX_O_ZERO ; cache.flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , has_singe_flag);
@@ -1692,30 +1697,19 @@ static void bq27xxx_battery_update_unlocked(struct bq27xxx_device_info *di) cache.flags =-1 ;/* read error */ if (cache.flags >=0 ) { cache.temperature =bq27xxx_battery_read_temperature (di); -if (has_ci_flag && (cache.flags &BQ27000_FLAG_CI )) { -dev_info_once (di->dev,"battery is not calibrated! ignoring capacity values\n" ); - cache.capacity = -ENODATA ; - cache.energy = -ENODATA ; - cache.time_to_empty = -ENODATA ; - cache.time_to_empty_avg = -ENODATA ; - cache.time_to_full = -ENODATA ; - cache.charge_full = -ENODATA ; - cache.health = -ENODATA ; - }else { -if (di->regs[BQ27XXX_REG_TTE ] !=INVALID_REG_ADDR ) - cache.time_to_empty =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTE ); -if (di->regs[BQ27XXX_REG_TTECP ] !=INVALID_REG_ADDR ) - cache.time_to_empty_avg =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTECP ); -if (di->regs[BQ27XXX_REG_TTF ] !=INVALID_REG_ADDR ) - cache.time_to_full =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTF ); - - cache.charge_full =bq27xxx_battery_read_fcc (di); - cache.capacity =bq27xxx_battery_read_soc (di); -if (di->regs[BQ27XXX_REG_AE ] !=INVALID_REG_ADDR ) - cache.energy =bq27xxx_battery_read_energy (di); - di->cache.flags = cache.flags; - cache.health =bq27xxx_battery_read_health (di); - } +if (di->regs[BQ27XXX_REG_TTE ] !=INVALID_REG_ADDR ) + cache.time_to_empty =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTE ); +if (di->regs[BQ27XXX_REG_TTECP ] !=INVALID_REG_ADDR ) + cache.time_to_empty_avg =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTECP ); +if (di->regs[BQ27XXX_REG_TTF ] !=INVALID_REG_ADDR ) + cache.time_to_full =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTF ); + + cache.charge_full =bq27xxx_battery_read_fcc (di); + cache.capacity =bq27xxx_battery_read_soc (di); +if (di->regs[BQ27XXX_REG_AE ] !=INVALID_REG_ADDR ) + cache.energy =bq27xxx_battery_read_energy (di); + di->cache.flags = cache.flags; + cache.health =bq27xxx_battery_read_health (di);if (di->regs[BQ27XXX_REG_CYCT ] !=INVALID_REG_ADDR ) cache.cycle_count =bq27xxx_battery_read_cyct (di);
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 8/22 power: supply: bq27xxx: Move bq27xxx_battery_update() down
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit ff4c4a2a4437a6d03787c7aafb2617f20c3ef45f ]
Move the bq27xxx_battery_update() functions to below the bq27xxx_battery_current_and_status() function.
This is just moving a block of text, no functional changes.
This is a preparation patch for making bq27xxx_battery_update() check the status and have it call power_supply_changed() on status changes.
--- drivers/power/supply/bq27xxx_battery.c | 122 ++++++++++++------------- 1 file changed, 61 insertions(+), 61 deletions(-)
drivers/power/supply/bq27xxx_battery.c +61 -61
@@ -1687,67 +1687,6 @@ static int bq27xxx_battery_read_health(struct bq27xxx_device_info *di)return POWER_SUPPLY_HEALTH_GOOD ; } -static void bq27xxx_battery_update_unlocked (struct bq27xxx_device_info *di) -{ -struct bq27xxx_reg_cache cache = {0 , }; -bool has_singe_flag = di->opts &BQ27XXX_O_ZERO ; - - cache.flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , has_singe_flag); -if ((cache.flags &0xff ) ==0xff ) - cache.flags =-1 ;/* read error */ -if (cache.flags >=0 ) { - cache.temperature =bq27xxx_battery_read_temperature (di); -if (di->regs[BQ27XXX_REG_TTE ] !=INVALID_REG_ADDR ) - cache.time_to_empty =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTE ); -if (di->regs[BQ27XXX_REG_TTECP ] !=INVALID_REG_ADDR ) - cache.time_to_empty_avg =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTECP ); -if (di->regs[BQ27XXX_REG_TTF ] !=INVALID_REG_ADDR ) - cache.time_to_full =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTF ); - - cache.charge_full =bq27xxx_battery_read_fcc (di); - cache.capacity =bq27xxx_battery_read_soc (di); -if (di->regs[BQ27XXX_REG_AE ] !=INVALID_REG_ADDR ) - cache.energy =bq27xxx_battery_read_energy (di); - di->cache.flags = cache.flags; - cache.health =bq27xxx_battery_read_health (di); -if (di->regs[BQ27XXX_REG_CYCT ] !=INVALID_REG_ADDR ) - cache.cycle_count =bq27xxx_battery_read_cyct (di); - -/* We only have to read charge design full once */ -if (di->charge_design_full <=0 ) - di->charge_design_full =bq27xxx_battery_read_dcap (di); - } - -if ((di->cache.capacity != cache.capacity) || - (di->cache.flags != cache.flags)) -power_supply_changed (di->bat); - -if (memcmp (&di->cache, &cache,sizeof (cache)) !=0 ) - di->cache = cache; - - di->last_update = jiffies; - -if (!di->removed && poll_interval >0 ) -mod_delayed_work (system_wq, &di->work, poll_interval *HZ ); -} - -void bq27xxx_battery_update (struct bq27xxx_device_info *di) -{ -mutex_lock (&di->lock); -bq27xxx_battery_update_unlocked (di); -mutex_unlock (&di->lock); -} -EXPORT_SYMBOL_GPL (bq27xxx_battery_update); - -static void bq27xxx_battery_poll (struct work_struct *work) -{ -struct bq27xxx_device_info *di = - container_of(work, struct bq27xxx_device_info, - work.work); - -bq27xxx_battery_update (di); -} -static bool bq27xxx_battery_is_full (struct bq27xxx_device_info *di,int flags) {if (di->opts &BQ27XXX_O_ZERO )
@@ -1821,6 +1760,67 @@ static int bq27xxx_battery_current_and_status(return 0 ; } +static void bq27xxx_battery_update_unlocked (struct bq27xxx_device_info *di) +{ +struct bq27xxx_reg_cache cache = {0 , }; +bool has_singe_flag = di->opts &BQ27XXX_O_ZERO ; + + cache.flags =bq27xxx_read (di,BQ27XXX_REG_FLAGS , has_singe_flag); +if ((cache.flags &0xff ) ==0xff ) + cache.flags =-1 ;/* read error */ +if (cache.flags >=0 ) { + cache.temperature =bq27xxx_battery_read_temperature (di); +if (di->regs[BQ27XXX_REG_TTE ] !=INVALID_REG_ADDR ) + cache.time_to_empty =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTE ); +if (di->regs[BQ27XXX_REG_TTECP ] !=INVALID_REG_ADDR ) + cache.time_to_empty_avg =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTECP ); +if (di->regs[BQ27XXX_REG_TTF ] !=INVALID_REG_ADDR ) + cache.time_to_full =bq27xxx_battery_read_time (di,BQ27XXX_REG_TTF ); + + cache.charge_full =bq27xxx_battery_read_fcc (di); + cache.capacity =bq27xxx_battery_read_soc (di); +if (di->regs[BQ27XXX_REG_AE ] !=INVALID_REG_ADDR ) + cache.energy =bq27xxx_battery_read_energy (di); + di->cache.flags = cache.flags; + cache.health =bq27xxx_battery_read_health (di); +if (di->regs[BQ27XXX_REG_CYCT ] !=INVALID_REG_ADDR ) + cache.cycle_count =bq27xxx_battery_read_cyct (di); + +/* We only have to read charge design full once */ +if (di->charge_design_full <=0 ) + di->charge_design_full =bq27xxx_battery_read_dcap (di); + } + +if ((di->cache.capacity != cache.capacity) || + (di->cache.flags != cache.flags)) +power_supply_changed (di->bat); + +if (memcmp (&di->cache, &cache,sizeof (cache)) !=0 ) + di->cache = cache; + + di->last_update = jiffies; + +if (!di->removed && poll_interval >0 ) +mod_delayed_work (system_wq, &di->work, poll_interval *HZ ); +} + +void bq27xxx_battery_update (struct bq27xxx_device_info *di) +{ +mutex_lock (&di->lock); +bq27xxx_battery_update_unlocked (di); +mutex_unlock (&di->lock); +} +EXPORT_SYMBOL_GPL (bq27xxx_battery_update); + +static void bq27xxx_battery_poll (struct work_struct *work) +{ +struct bq27xxx_device_info *di = + container_of(work, struct bq27xxx_device_info, + work.work); + +bq27xxx_battery_update (di); +} +/* * Get the average power in µW * Return < 0 if something fails.
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 9/22 power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 939a116142012926e25de0ea6b7e2f8d86a5f1b6 ]
On gauges where the current register is signed, there is no charging flag in the flags register. So only checking flags will not result in power_supply_changed() getting called when e.g. a charger is plugged in and the current sign changes from negative (discharging) to positive (charging).
This causes userspace's notion of the status to lag until userspace does a poll.
And when a power_supply_leds.c LED trigger is used to indicate charging status with a LED, this LED will lag until the capacity percentage changes, which may take many minutes (because the LED trigger only is updated on power_supply_changed() calls).
Fix this by calling bq27xxx_battery_current_and_status() on gauges with a signed current register and checking if the status has changed.
--- drivers/power/supply/bq27xxx_battery.c | 13 ++++++++++++- include/linux/power/bq27xxx_battery.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-)
drivers/power/supply/bq27xxx_battery.c +12 -1
@@ -1762,6 +1762,7 @@ static int bq27xxx_battery_current_and_status(static void bq27xxx_battery_update_unlocked (struct bq27xxx_device_info *di) { +union power_supply_propval status = di->last_status;struct bq27xxx_reg_cache cache = {0 , };bool has_singe_flag = di->opts &BQ27XXX_O_ZERO ;
@@ -1786,14 +1787,24 @@ static void bq27xxx_battery_update_unlocked(struct bq27xxx_device_info *di)if (di->regs[BQ27XXX_REG_CYCT ] !=INVALID_REG_ADDR ) cache.cycle_count =bq27xxx_battery_read_cyct (di); +/* +* On gauges with signed current reporting the current must be +* checked to detect charging <-> discharging status changes. +*/ +if (!(di->opts &BQ27XXX_O_ZERO )) +bq27xxx_battery_current_and_status (di,NULL , &status, &cache); +/* We only have to read charge design full once */ if (di->charge_design_full <=0 ) di->charge_design_full =bq27xxx_battery_read_dcap (di); }if ((di->cache.capacity != cache.capacity) || - (di->cache.flags != cache.flags)) + (di->cache.flags != cache.flags) || + (di->last_status.intval != status.intval)) { + di->last_status.intval = status.intval;power_supply_changed (di->bat); + }if (memcmp (&di->cache, &cache,sizeof (cache)) !=0 ) di->cache = cache;
include/linux/power/bq27xxx_battery.h +3 -0
@@ -2,6 +2,8 @@#ifndef __LINUX_BQ27X00_BATTERY_H__#define __LINUX_BQ27X00_BATTERY_H__ +#include <linux/power_supply.h> +enum bq27xxx_chip {BQ27000 =1 ,/* bq27000, bq27200 */ BQ27010, /* bq27010, bq27210 */
@@ -69,6 +71,7 @@ struct bq27xxx_device_info {int charge_design_full;bool removed;unsigned long last_update; +union power_supply_propval last_status;struct delayed_work work;struct power_supply *bat;struct list_head list;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 10/22 power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 59a99cd462fbdf71f4e845e09f37783035088b4f ]
bq27xxx_external_power_changed() gets called when the charger is plugged in or out. Rather then immediately scheduling an update wait 0.5 seconds for things to stabilize, so that e.g. the (dis)charge current is stable when bq27xxx_battery_update() runs.
--- drivers/power/supply/bq27xxx_battery.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/power/supply/bq27xxx_battery.c +2 -2
@@ -2022,8 +2022,8 @@ static void bq27xxx_external_power_changed(struct power_supply *psy) {struct bq27xxx_device_info *di =power_supply_get_drvdata (psy); -cancel_delayed_work_sync (&di->work); -schedule_delayed_work (&di->work,0 ); +/* After charger plug in/out wait 0.5s for things to stabilize */ +mod_delayed_work (system_wq, &di->work,HZ /2 ); }int bq27xxx_battery_setup (struct bq27xxx_device_info *di)
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 11/22 power: supply: core: Refactor power_supply_set_input_current_limit_from_supplier()
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 2220af8ca61ae67de4ec3deec1c6395a2f65b9fd ]
Some (USB) charger ICs have variants with USB D+ and D- pins to do their own builtin charger-type detection, like e.g. the bq24190 and bq25890 and also variants which lack this functionality, e.g. the bq24192 and bq25892.
In case the charger-type; and thus the input-current-limit detection is done outside the charger IC then we need some way to communicate this to the charger IC. In the past extcon was used for this, but if the external detection does e.g. full USB PD negotiation then the extcon cable-types do not convey enough information.
For these setups it was decided to model the external charging "brick" and the parameters negotiated with it as a power_supply class-device itself; and power_supply_set_input_current_limit_from_supplier() was introduced to allow drivers to get the input-current-limit this way.
But in some cases psy drivers may want to know other properties, e.g. the bq25892 can do "quick-charge" negotiation by pulsing its current draw, but this should only be done if the usb_type psy-property of its supplier is set to DCP (and device-properties indicate the board allows higher voltages).
Instead of adding extra helper functions for each property which a psy-driver wants to query from its supplier, refactor power_supply_set_input_current_limit_from_supplier() into a more generic power_supply_get_property_from_supplier() function.
Stable-dep-of: 77c2a3097d70 ("power: supply: bq24190: Call power_supply_changed() after updating input current")
--- drivers/power/supply/bq24190_charger.c | 12 ++++- drivers/power/supply/power_supply_core.c | 57 +++++++++++++----------- include/linux/power_supply.h | 5 ++- 3 files changed, 44 insertions(+), 30 deletions(-)
drivers/power/supply/bq24190_charger.c +11 -1
@@ -1203,8 +1203,18 @@ static void bq24190_input_current_limit_work(struct work_struct *work)struct bq24190_dev_info *bdi = container_of(work, struct bq24190_dev_info, input_current_limit_work.work); +union power_supply_propval val; +int ret; + + ret =power_supply_get_property_from_supplier (bdi->charger, +POWER_SUPPLY_PROP_CURRENT_MAX , + &val); +if (ret) +return ; -power_supply_set_input_current_limit_from_supplier (bdi->charger); +bq24190_charger_set_property (bdi->charger, +POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT , + &val); }/* Sync the input-current-limit with our parent supply (if we have one) */
drivers/power/supply/power_supply_core.c +30 -27
76 lines not on this page · raw message
include/linux/power_supply.h +3 -2
@@ -413,8 +413,9 @@ power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table int table_len, int temp);extern void power_supply_changed (struct power_supply *psy);extern int power_supply_am_i_supplied (struct power_supply *psy); -extern int power_supply_set_input_current_limit_from_supplier ( -struct power_supply *psy); +int power_supply_get_property_from_supplier (struct power_supply *psy, +enum power_supply_property psp, +union power_supply_propval *val);extern int power_supply_set_battery_charged (struct power_supply *psy);#ifdef CONFIG_POWER_SUPPLY
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 12/22 power: supply: bq24190: Call power_supply_changed() after updating input current
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit 77c2a3097d7029441e8a91aa0de1b4e5464593da ]
The bq24192 model relies on external charger-type detection and once that is done the bq24190_charger code will update the input current.
In this case, when the initial power_supply_changed() call is made from the interrupt handler, the input settings are 5V/0.5A which on many devices is not enough power to charge (while the device is on).
On many devices the fuel-gauge relies in its external_power_changed callback to timely signal userspace about charging <-> discharging status changes. Add a power_supply_changed() call after updating the input current. This allows the fuel-gauge driver to timely recheck if the battery is charging after the new input current has been applied and then it can immediately notify userspace about this.
--- drivers/power/supply/bq24190_charger.c | 1 + 1 file changed, 1 insertion(+)
drivers/power/supply/bq24190_charger.c +1 -0
@@ -1215,6 +1215,7 @@ static void bq24190_input_current_limit_work(struct work_struct *work)bq24190_charger_set_property (bdi->charger,POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT , &val); +power_supply_changed (bdi->charger); }/* Sync the input-current-limit with our parent supply (if we have one) */
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 13/22 regulator: Add regmap helper for ramp-delay setting
In reply to Greg Kroah-HartmanFrom: Matti Vaittinen <[email protected]>
[ Upstream commit fb8fee9efdcf084d9e31ba14cc4734d97e5dd972 ]
Quite a few regulator ICs do support setting ramp-delay by writing a value matching the delay to a ramp-delay register.
Provide a simple helper for table-based delay setting.
Stable-dep-of: d67dada3e252 ("regulator: pca9450: Fix BUCK2 enable_mask")
--- drivers/regulator/helpers.c | 65 ++++++++++++++++++++++++++++++++ include/linux/regulator/driver.h | 5 +++ 2 files changed, 70 insertions(+)
drivers/regulator/helpers.c +65 -0
@@ -879,3 +879,68 @@ bool regulator_is_equal(struct regulator *reg1, struct regulator *reg2)return reg1->rdev == reg2->rdev; }EXPORT_SYMBOL_GPL (regulator_is_equal); + +static int find_closest_bigger (unsigned int target,const unsigned int *table, +unsigned int num_sel,unsigned int *sel) +{ +unsigned int s, tmp, max, maxsel =0 ; +bool found = false; + + max = table[0 ]; + +for (s =0 ; s < num_sel; s++) { +if (table[s] > max) { + max = table[s]; + maxsel = s; + } +if (table[s] >= target) { +if (!found || table[s] - target < tmp - target) { + tmp = table[s]; + *sel = s; + found = true; +if (tmp == target) +break ; + } + } + } + +if (!found) { + *sel = maxsel; +return -EINVAL ; + } + +return 0 ; +} + +/** +* regulator_set_ramp_delay_regmap - set_ramp_delay() helper +* +* @rdev: regulator to operate on +* +* Regulators that use regmap for their register I/O can set the ramp_reg +* and ramp_mask fields in their descriptor and then use this as their +* set_ramp_delay operation, saving some code. +*/ +int regulator_set_ramp_delay_regmap (struct regulator_dev *rdev,int ramp_delay) +{ +int ret; +unsigned int sel; + +if (!rdev->desc->n_ramp_values) +return -EINVAL ; + + ret =find_closest_bigger (ramp_delay, rdev->desc->ramp_delay_table, + rdev->desc->n_ramp_values, &sel); + +if (ret) { +dev_warn (rdev_get_dev (rdev), +"Can't set ramp-delay %u, setting %u\n" , ramp_delay, + rdev->desc->ramp_delay_table[sel]); + } + + sel <<=ffs (rdev->desc->ramp_mask) -1 ; + +return regmap_update_bits (rdev->regmap, rdev->desc->ramp_reg, + rdev->desc->ramp_mask, sel); +} +EXPORT_SYMBOL_GPL (regulator_set_ramp_delay_regmap);
include/linux/regulator/driver.h +5 -0
@@ -370,6 +370,10 @@ struct regulator_desc {unsigned int pull_down_reg;unsigned int pull_down_mask;unsigned int pull_down_val_on; +unsigned int ramp_reg; +unsigned int ramp_mask; +const unsigned int *ramp_delay_table; +unsigned int n_ramp_values;unsigned int enable_time;
@@ -532,6 +536,7 @@ int regulator_set_current_limit_regmap(struct regulator_dev *rdev, int min_uA, int max_uA);int regulator_get_current_limit_regmap (struct regulator_dev *rdev);void *regulator_get_init_drvdata (struct regulator_init_data *reg_init_data); +int regulator_set_ramp_delay_regmap (struct regulator_dev *rdev,int ramp_delay);/* * Helper functions intended to be used by regulator drivers prior registering
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 14/22 regulator: pca9450: Convert to use regulator_set_ramp_delay_regmap
In reply to Greg Kroah-HartmanFrom: Axel Lin <[email protected]>
[ Upstream commit 4c4fce171c4ca08cd98be7db350e6950630b046a ]
Use regulator_set_ramp_delay_regmap instead of open-coded.
Stable-dep-of: d67dada3e252 ("regulator: pca9450: Fix BUCK2 enable_mask")
--- drivers/regulator/pca9450-regulator.c | 51 +++++++++++++-------------- 1 file changed, 24 insertions(+), 27 deletions(-)
drivers/regulator/pca9450-regulator.c +24 -27
@@ -65,32 +65,9 @@ static const struct regmap_config pca9450_regmap_config = {* 10: 25mV/4usec * 11: 25mV/8usec */ -static int pca9450_dvs_set_ramp_delay (struct regulator_dev *rdev, -int ramp_delay) -{ -int id =rdev_get_id (rdev); -unsigned int ramp_value; - -switch (ramp_delay) { - case 1 ... 3125: - ramp_value =BUCK1_RAMP_3P125MV ; -break ; - case 3126 ... 6250: - ramp_value =BUCK1_RAMP_6P25MV ; -break ; - case 6251 ... 12500: - ramp_value =BUCK1_RAMP_12P5MV ; -break ; - case 12501 ... 25000: - ramp_value =BUCK1_RAMP_25MV ; -break ; -default : - ramp_value =BUCK1_RAMP_25MV ; - } - -return regmap_update_bits (rdev->regmap,PCA9450_REG_BUCK1CTRL + id *3 , -BUCK1_RAMP_MASK , ramp_value <<6 ); -} +static const unsigned int pca9450_dvs_buck_ramp_table[] = { +25000 ,12500 ,6250 ,3125 +};static const struct regulator_ops pca9450_dvs_buck_regulator_ops = { .enable = regulator_enable_regmap,
@@ -100,7 +77,7 @@ static const struct regulator_ops pca9450_dvs_buck_regulator_ops = { .set_voltage_sel = regulator_set_voltage_sel_regmap, .get_voltage_sel = regulator_get_voltage_sel_regmap, .set_voltage_time_sel = regulator_set_voltage_time_sel, - .set_ramp_delay = pca9450_dvs_set_ramp_delay, + .set_ramp_delay = regulator_set_ramp_delay_regmap, };static const struct regulator_ops pca9450_buck_regulator_ops = {
@@ -251,6 +228,10 @@ static const struct pca9450_regulator_desc pca9450a_regulators[] = { .vsel_mask = BUCK1OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK1CTRL, .enable_mask = BUCK1_ENMODE_MASK, + .ramp_reg = PCA9450_REG_BUCK1CTRL, + .ramp_mask = BUCK1_RAMP_MASK, + .ramp_delay_table = pca9450_dvs_buck_ramp_table, + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), .owner = THIS_MODULE, .of_parse_cb = pca9450_set_dvs_levels, },
@@ -276,6 +257,10 @@ static const struct pca9450_regulator_desc pca9450a_regulators[] = { .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, .enable_mask = BUCK1_ENMODE_MASK, + .ramp_reg = PCA9450_REG_BUCK2CTRL, + .ramp_mask = BUCK2_RAMP_MASK, + .ramp_delay_table = pca9450_dvs_buck_ramp_table, + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), .owner = THIS_MODULE, .of_parse_cb = pca9450_set_dvs_levels, },
@@ -301,6 +286,10 @@ static const struct pca9450_regulator_desc pca9450a_regulators[] = { .vsel_mask = BUCK3OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK3CTRL, .enable_mask = BUCK3_ENMODE_MASK, + .ramp_reg = PCA9450_REG_BUCK3CTRL, + .ramp_mask = BUCK3_RAMP_MASK, + .ramp_delay_table = pca9450_dvs_buck_ramp_table, + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), .owner = THIS_MODULE, .of_parse_cb = pca9450_set_dvs_levels, },
@@ -477,6 +466,10 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = { .vsel_mask = BUCK1OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK1CTRL, .enable_mask = BUCK1_ENMODE_MASK, + .ramp_reg = PCA9450_REG_BUCK1CTRL, + .ramp_mask = BUCK1_RAMP_MASK, + .ramp_delay_table = pca9450_dvs_buck_ramp_table, + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), .owner = THIS_MODULE, .of_parse_cb = pca9450_set_dvs_levels, },
@@ -502,6 +495,10 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = { .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, .enable_mask = BUCK1_ENMODE_MASK, + .ramp_reg = PCA9450_REG_BUCK2CTRL, + .ramp_mask = BUCK2_RAMP_MASK, + .ramp_delay_table = pca9450_dvs_buck_ramp_table, + .n_ramp_values = ARRAY_SIZE(pca9450_dvs_buck_ramp_table), .owner = THIS_MODULE, .of_parse_cb = pca9450_set_dvs_levels, },
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 15/22 regulator: pca9450: Fix BUCK2 enable_mask
In reply to Greg Kroah-HartmanFrom: Alexander Stein <[email protected]>
[ Upstream commit d67dada3e2524514b09496b9ee1df22d4507a280 ]
This fixes a copy & paste error.
No functional change intended, BUCK1_ENMODE_MASK equals BUCK2_ENMODE_MASK.
Originally-from: Robin Gong <[email protected]
--- drivers/regulator/pca9450-regulator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/regulator/pca9450-regulator.c +2 -2
@@ -256,7 +256,7 @@ static const struct pca9450_regulator_desc pca9450a_regulators[] = { .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0, .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, - .enable_mask = BUCK1_ENMODE_MASK, + .enable_mask = BUCK2_ENMODE_MASK, .ramp_reg = PCA9450_REG_BUCK2CTRL, .ramp_mask = BUCK2_RAMP_MASK, .ramp_delay_table = pca9450_dvs_buck_ramp_table,
@@ -494,7 +494,7 @@ static const struct pca9450_regulator_desc pca9450bc_regulators[] = { .vsel_reg = PCA9450_REG_BUCK2OUT_DVS0, .vsel_mask = BUCK2OUT_DVS0_MASK, .enable_reg = PCA9450_REG_BUCK2CTRL, - .enable_mask = BUCK1_ENMODE_MASK, + .enable_mask = BUCK2_ENMODE_MASK, .ramp_reg = PCA9450_REG_BUCK2CTRL, .ramp_mask = BUCK2_RAMP_MASK, .ramp_delay_table = pca9450_dvs_buck_ramp_table,
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 16/22 net/mlx5: devcom only supports 2 ports
In reply to Greg Kroah-HartmanFrom: Mark Bloch <[email protected]>
[ Upstream commit 8a6e75e5f57e9ac82268d9bfca3403598d9d0292 ]
Devcom API is intended to be used between 2 devices only add this implied assumption into the code and check when it's no true.
Stable-dep-of: 1f893f57a3bf ("net/mlx5: Devcom, serialize devcom registration")
--- .../net/ethernet/mellanox/mlx5/core/lib/devcom.c | 16 +++++++++------- .../net/ethernet/mellanox/mlx5/core/lib/devcom.h | 2 ++ 2 files changed, 11 insertions(+), 7 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +9 -7
@@ -14,7 +14,7 @@ static LIST_HEAD(devcom_list);struct mlx5_devcom_component {struct {void *data; - } device[MLX5_MAX_PORTS ]; + } device[MLX5_DEVCOM_PORTS_SUPPORTED ];mlx5_devcom_event_handler_t handler;struct rw_semaphore sem;
@@ -25,7 +25,7 @@ struct mlx5_devcom_list {struct list_head list;struct mlx5_devcom_component components[MLX5_DEVCOM_NUM_COMPONENTS ]; -struct mlx5_core_dev *devs[MLX5_MAX_PORTS ]; +struct mlx5_core_dev *devs[MLX5_DEVCOM_PORTS_SUPPORTED ]; };struct mlx5_devcom {
@@ -74,13 +74,15 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev)if (!mlx5_core_is_pf (dev))return NULL ; +if (MLX5_CAP_GEN (dev, num_lag_ports) !=MLX5_DEVCOM_PORTS_SUPPORTED ) +return NULL ; sguid0 =mlx5_query_nic_system_image_guid (dev);list_for_each_entry (iter, &devcom_list, list) {struct mlx5_core_dev *tmp_dev =NULL ; idx =-1 ; -for (i =0 ; i <MLX5_MAX_PORTS ; i++) { +for (i =0 ; i <MLX5_DEVCOM_PORTS_SUPPORTED ; i++) {if (iter->devs[i]) tmp_dev = iter->devs[i];else
@@ -135,11 +137,11 @@ void mlx5_devcom_unregister_device(struct mlx5_devcom *devcom)kfree (devcom); -for (i =0 ; i <MLX5_MAX_PORTS ; i++) +for (i =0 ; i <MLX5_DEVCOM_PORTS_SUPPORTED ; i++)if (priv->devs[i])break ; -if (i !=MLX5_MAX_PORTS ) +if (i !=MLX5_DEVCOM_PORTS_SUPPORTED )return ;list_del (&priv->list);
@@ -192,7 +194,7 @@ int mlx5_devcom_send_event(struct mlx5_devcom *devcom, comp = &devcom->priv->components[id];down_write (&comp->sem); -for (i =0 ; i <MLX5_MAX_PORTS ; i++) +for (i =0 ; i <MLX5_DEVCOM_PORTS_SUPPORTED ; i++)if (i != devcom->idx && comp->device[i].data) { err = comp->handler (event, comp->device[i].data, event_data);
@@ -240,7 +242,7 @@ void *mlx5_devcom_get_peer_data(struct mlx5_devcom *devcom,return NULL ; } -for (i =0 ; i <MLX5_MAX_PORTS ; i++) +for (i =0 ; i <MLX5_DEVCOM_PORTS_SUPPORTED ; i++)if (i != devcom->idx)break ;
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h +2 -0
@@ -6,6 +6,8 @@#include <linux/mlx5/driver.h> +#define MLX5_DEVCOM_PORTS_SUPPORTED 2 +enum mlx5_devcom_components {MLX5_DEVCOM_ESW_OFFLOADS ,
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 17/22 net/mlx5: Devcom, serialize devcom registration
In reply to Greg Kroah-HartmanFrom: Shay Drory <[email protected]>
[ Upstream commit 1f893f57a3bf9fe1f4bcb25b55aea7f7f9712fe7 ]
Quoted 2 lines
From one hand, mlx5 driver is allowing to probe PFs in parallel. From the other hand, devcom, which is a share resource between PFs, is
registered without any lock. This might resulted in memory problems.
Hence, use the global mlx5_dev_list_lock in order to serialize devcom registration.
--- .../ethernet/mellanox/mlx5/core/lib/devcom.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.c +14 -5
@@ -3,6 +3,7 @@#include <linux/mlx5/vport.h> #include "lib/devcom.h" +#include "mlx5_core.h" static LIST_HEAD (devcom_list);
@@ -77,6 +78,7 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev)if (MLX5_CAP_GEN (dev, num_lag_ports) !=MLX5_DEVCOM_PORTS_SUPPORTED )return NULL ; +mlx5_dev_list_lock (); sguid0 =mlx5_query_nic_system_image_guid (dev);list_for_each_entry (iter, &devcom_list, list) {struct mlx5_core_dev *tmp_dev =NULL ;
@@ -102,8 +104,10 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev)if (!priv) { priv =mlx5_devcom_list_alloc (); -if (!priv) -return ERR_PTR (-ENOMEM ); +if (!priv) { + devcom =ERR_PTR (-ENOMEM ); + goto out; + } idx =0 ; new_priv = true;
@@ -114,12 +118,14 @@ struct mlx5_devcom *mlx5_devcom_register_device(struct mlx5_core_dev *dev)if (!devcom) {if (new_priv)kfree (priv); -return ERR_PTR (-ENOMEM ); + devcom =ERR_PTR (-ENOMEM ); + goto out; }if (new_priv)list_add (&priv->list, &devcom_list); - +out: +mlx5_dev_list_unlock ();return devcom; }
@@ -132,6 +138,7 @@ void mlx5_devcom_unregister_device(struct mlx5_devcom *devcom)if (IS_ERR_OR_NULL (devcom))return ; +mlx5_dev_list_lock (); priv = devcom->priv; priv->devs[devcom->idx] =NULL ;
@@ -142,10 +149,12 @@ void mlx5_devcom_unregister_device(struct mlx5_devcom *devcom)break ;if (i !=MLX5_DEVCOM_PORTS_SUPPORTED ) -return ; + goto out;list_del (&priv->list);kfree (priv); +out: +mlx5_dev_list_unlock (); } void mlx5_devcom_register_component(struct mlx5_devcom *devcom,
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 18/22 net: phy: mscc: enable VSC8501/2 RGMII RX clock
In reply to Greg Kroah-HartmanFrom: David Epping <[email protected]>
[ Upstream commit 71460c9ec5c743e9ffffca3c874d66267c36345e ]
By default the VSC8501 and VSC8502 RGMII/GMII/MII RX_CLK output is disabled. To allow packet forwarding towards the MAC it needs to be enabled.
For other PHYs supported by this driver the clock output is enabled by default.
--- drivers/net/phy/mscc/mscc.h | 1 + drivers/net/phy/mscc/mscc_main.c | 54 +++++++++++++++++--------------- 2 files changed, 29 insertions(+), 26 deletions(-)
drivers/net/phy/mscc/mscc.h +1 -0
@@ -175,6 +175,7 @@ enum rgmii_clock_delay {#define VSC8502_RGMII_CNTL 20#define VSC8502_RGMII_RX_DELAY_MASK 0x0070#define VSC8502_RGMII_TX_DELAY_MASK 0x0007 +#define VSC8502_RGMII_RX_CLK_DISABLE 0x0800#define MSCC_PHY_WOL_LOWER_MAC_ADDR 21#define MSCC_PHY_WOL_MID_MAC_ADDR 22
drivers/net/phy/mscc/mscc_main.c +28 -26
84 lines not on this page · raw message
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerPATCH 19/22 bluetooth: Add cmd validity checks at the start of hci_sock_ioctl()
In reply to Greg Kroah-HartmanFrom: Ruihan Li <[email protected]>
commit 000c2fa2c144c499c881a101819cf1936a1f7cf2 upstream.
Previously, channel open messages were always sent to monitors on the first ioctl() call for unbound HCI sockets, even if the command and arguments were completely invalid. This can leave an exploitable hole with the abuse of invalid ioctl calls.
This commit hardens the ioctl processing logic by first checking if the command is valid, and immediately returning with an ENOIOCTLCMD error code if it is not. This ensures that ioctl calls with invalid commands are free of side effects, and increases the difficulty of further exploitation by forcing exploitation to find a way to pass a valid command first.
--- net/bluetooth/hci_sock.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+)
net/bluetooth/hci_sock.c +28 -0
@@ -980,6 +980,34 @@ static int hci_sock_ioctl(struct socketBT_DBG ("cmd %x arg %lx" , cmd, arg); +/* Make sure the cmd is valid before doing anything */ +switch (cmd) { +case HCIGETDEVLIST : +case HCIGETDEVINFO : +case HCIGETCONNLIST : +case HCIDEVUP : +case HCIDEVDOWN : +case HCIDEVRESET : +case HCIDEVRESTAT : +case HCISETSCAN : +case HCISETAUTH : +case HCISETENCRYPT : +case HCISETPTYPE : +case HCISETLINKPOL : +case HCISETLINKMODE : +case HCISETACLMTU : +case HCISETSCOMTU : +case HCIINQUIRY : +case HCISETRAW : +case HCIGETCONNINFO : +case HCIGETAUTHINFO : +case HCIBLOCKADDR : +case HCIUNBLOCKADDR : +break ; +default : +return -ENOIOCTLCMD ; + } +lock_sock (sk);if (hci_pi (sk)->channel !=HCI_CHANNEL_RAW ) {
Greg Kroah-Hartman
maintainerPATCH 20/22 binder: fix UAF caused by faulty buffer cleanup
In reply to Greg Kroah-HartmanFrom: Carlos Llamas <[email protected]>
commit bdc1c5fac982845a58d28690cdb56db8c88a530d upstream.
In binder_transaction_buffer_release() the 'failed_at' offset indicates the number of objects to clean up. However, this function was changed by commit 44d8047f1d87 ("binder: use standard functions to allocate fds"), to release all the objects in the buffer when 'failed_at' is zero.
This introduced an issue when a transaction buffer is released without any objects having been processed so far. In this case, 'failed_at' is indeed zero yet it is misinterpreted as releasing the entire buffer.
This leads to use-after-free errors where nodes are incorrectly freed and subsequently accessed. Such is the case in the following KASAN report:
==================================================================
BUG: KASAN: slab-use-after-free in binder_thread_read+0xc40/0x1f30 Read of size 8 at addr ffff4faf037cfc58 by task poc/474 CPU: 6 PID: 474 Comm: poc Not tainted 6.3.0-12570-g7df047b3f0aa #5 Hardware name: linux,dummy-virt (DT) Call trace: dump_backtrace+0x94/0xec show_stack+0x18/0x24 dump_stack_lvl+0x48/0x60 print_report+0xf8/0x5b8 kasan_report+0xb8/0xfc __asan_load8+0x9c/0xb8 binder_thread_read+0xc40/0x1f30 binder_ioctl+0xd9c/0x1768 __arm64_sys_ioctl+0xd4/0x118 invoke_syscall+0x60/0x188 [...] Allocated by task 474: kasan_save_stack+0x3c/0x64 kasan_set_track+0x2c/0x40 kasan_save_alloc_info+0x24/0x34 __kasan_kmalloc+0xb8/0xbc kmalloc_trace+0x48/0x5c binder_new_node+0x3c/0x3a4 binder_transaction+0x2b58/0x36f0 binder_thread_write+0x8e0/0x1b78 binder_ioctl+0x14a0/0x1768 __arm64_sys_ioctl+0xd4/0x118 invoke_syscall+0x60/0x188 [...] Freed by task 475: kasan_save_stack+0x3c/0x64 kasan_set_track+0x2c/0x40 kasan_save_free_info+0x38/0x5c __kasan_slab_free+0xe8/0x154 __kmem_cache_free+0x128/0x2bc kfree+0x58/0x70 binder_dec_node_tmpref+0x178/0x1fc binder_transaction_buffer_release+0x430/0x628 binder_transaction+0x1954/0x36f0 binder_thread_write+0x8e0/0x1b78 binder_ioctl+0x14a0/0x1768 __arm64_sys_ioctl+0xd4/0x118 invoke_syscall+0x60/0x188 [...] ==================================================================
In order to avoid these issues, let's always calculate the intended 'failed_at' offset beforehand. This is renamed and wrapped in a helper function to make it clear and convenient.
--- drivers/android/binder.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/android/binder.c +20 -6
@@ -2267,24 +2267,23 @@ static void binder_deferred_fd_close(intstatic void binder_transaction_buffer_release (struct binder_proc *proc,struct binder_thread *thread,struct binder_buffer *buffer, -binder_size_t failed_at, +binder_size_t off_end_offset,bool is_failure) {int debug_id = buffer->debug_id; -binder_size_t off_start_offset, buffer_offset, off_end_offset; +binder_size_t off_start_offset, buffer_offset;binder_debug (BINDER_DEBUG_TRANSACTION ,"%d buffer release %d, size %zd-%zd, failed at %llx\n" , proc->pid, buffer->debug_id, buffer->data_size, buffer->offsets_size, - (unsigned long long )failed_at); + (unsigned long long )off_end_offset);if (buffer->target_node)binder_dec_node (buffer->target_node,1 ,0 ); off_start_offset =ALIGN (buffer->data_size,sizeof (void *)); - off_end_offset = is_failure && failed_at ? failed_at : - off_start_offset + buffer->offsets_size; +for (buffer_offset = off_start_offset; buffer_offset < off_end_offset; buffer_offset +=sizeof (binder_size_t)) {struct binder_object_header *hdr;
@@ -2444,6 +2443,21 @@ static void binder_transaction_buffer_re } } +/* Clean up all the objects in the buffer */ +static inline void binder_release_entire_buffer (struct binder_proc *proc, +struct binder_thread *thread, +struct binder_buffer *buffer, +bool is_failure) +{ +binder_size_t off_end_offset; + + off_end_offset =ALIGN (buffer->data_size,sizeof (void *)); + off_end_offset += buffer->offsets_size; + +binder_transaction_buffer_release (proc, thread, buffer, + off_end_offset, is_failure); +} +static int binder_translate_binder (struct flat_binder_object *fp,struct binder_transaction *t,struct binder_thread *thread)
@@ -3926,7 +3940,7 @@ binder_free_buf(struct binder_proc *procbinder_node_inner_unlock (buf_node); }trace_binder_transaction_buffer_release (buffer); -binder_transaction_buffer_release (proc, thread, buffer,0 , is_failure); +binder_release_entire_buffer (proc, thread, buffer, is_failure);binder_alloc_free_buf (&proc->alloc, buffer); }
Greg Kroah-Hartman
maintainerPATCH 21/22 ipv{4,6}/raw: fix output xfrm lookup wrt protocol
In reply to Greg Kroah-HartmanFrom: Nicolas Dichtel <[email protected]>
commit 3632679d9e4f879f49949bb5b050e0de553e4739 upstream.
With a raw socket bound to IPPROTO_RAW (ie with hdrincl enabled), the protocol field of the flow structure, build by raw_sendmsg() / rawv6_sendmsg()), is set to IPPROTO_RAW. This breaks the ipsec policy lookup when some policies are defined with a protocol in the selector.
For ipv6, the sin6_port field from 'struct sockaddr_in6' could be used to specify the protocol. Just accept all values for IPPROTO_RAW socket.
For ipv4, the sin_port field of 'struct sockaddr_in' could not be used without breaking backward compatibility (the value of this field was never checked). Let's add a new kind of control message, so that the userland could specify which protocol is used.
--- include/net/ip.h | 2 ++ include/uapi/linux/in.h | 2 ++ net/ipv4/ip_sockglue.c | 12 +++++++++++- net/ipv4/raw.c | 5 ++++- net/ipv6/raw.c | 3 ++- 5 files changed, 21 insertions(+), 3 deletions(-)
include/net/ip.h +2 -0
@@ -75,6 +75,7 @@ struct ipcm_cookie {__be32 addr;int oif;struct ip_options_rcu *opt; +__u8 protocol;__u8 ttl;__s16 tos;char priority;
@@ -95,6 +96,7 @@ static inline void ipcm_init_sk(struct i ipcm->sockc.tsflags = inet->sk.sk_tsflags; ipcm->oif = inet->sk.sk_bound_dev_if; ipcm->addr = inet->inet_saddr; + ipcm->protocol = inet->inet_num; }#define IPCB (skb) ((struct inet_skb_parm*)((skb)->cb))
include/uapi/linux/in.h +2 -0
@@ -159,6 +159,8 @@ struct in_addr {#define MCAST_MSFILTER 48#define IP_MULTICAST_ALL 49#define IP_UNICAST_IF 50 +#define IP_LOCAL_PORT_RANGE 51 +#define IP_PROTOCOL 52#define MCAST_EXCLUDE 0#define MCAST_INCLUDE 1
net/ipv4/ip_sockglue.c +11 -1
@@ -317,7 +317,14 @@ int ip_cmsg_send(struct sock *sk, struct ipc->tos = val; ipc->priority =rt_tos2priority (ipc->tos);break ; - +case IP_PROTOCOL : +if (cmsg->cmsg_len !=CMSG_LEN (sizeof (int ))) +return -EINVAL ; + val = *(int *)CMSG_DATA (cmsg); +if (val <1 || val >255 ) +return -EINVAL ; + ipc->protocol = val; +break ;default :return -EINVAL ; }
@@ -1724,6 +1731,9 @@ static int do_ip_getsockopt(struct sockcase IP_MINTTL : val = inet->min_ttl;break ; +case IP_PROTOCOL : + val =inet_sk (sk)->inet_num; +break ;default :release_sock (sk);return -ENOPROTOOPT ;
net/ipv4/raw.c +4 -1
@@ -559,6 +559,9 @@ static int raw_sendmsg(struct sock *sk, }ipcm_init_sk (&ipc, inet); +/* Keep backward compat */ +if (hdrincl) + ipc.protocol =IPPROTO_RAW ;if (msg->msg_controllen) { err =ip_cmsg_send (sk, msg, &ipc, false);
@@ -626,7 +629,7 @@ static int raw_sendmsg(struct sock *sk,flowi4_init_output (&fl4, ipc.oif, ipc.sockc.mark, tos,RT_SCOPE_UNIVERSE , - hdrincl ?IPPROTO_RAW : sk->sk_protocol, + hdrincl ? ipc.protocol : sk->sk_protocol,inet_sk_flowi_flags (sk) | (hdrincl ?FLOWI_FLAG_KNOWN_NH :0 ), daddr, saddr,0 ,0 , sk->sk_uid);
net/ipv6/raw.c +2 -1
@@ -828,7 +828,8 @@ static int rawv6_sendmsg(struct sock *skif (!proto) proto = inet->inet_num; -else if (proto != inet->inet_num) +else if (proto != inet->inet_num && + inet->inet_num !=IPPROTO_RAW )return -EINVAL ;if (proto >255 )
Greg Kroah-Hartman
maintainerPATCH 22/22 netfilter: ctnetlink: Support offloaded conntrack entry deletion
In reply to Greg Kroah-HartmanFrom: Paul Blakey <[email protected]>
commit 9b7c68b3911aef84afa4cbfc31bce20f10570d51 upstream.
Currently, offloaded conntrack entries (flows) can only be deleted after they are removed from offload, which is either by timeout, tcp state change or tc ct rule deletion. This can cause issues for users wishing to manually delete or flush existing entries.
Support deletion of offloaded conntrack entries.
Example usage:
# Delete all offloaded (and non offloaded) conntrack entries
# whose source address is 1.2.3.4 $ conntrack -D -s 1.2.3.4 # Delete all entries $ conntrack -F
--- net/netfilter/nf_conntrack_netlink.c | 8 -------- 1 file changed, 8 deletions(-)
net/netfilter/nf_conntrack_netlink.c +0 -8
@@ -1493,9 +1493,6 @@ static const struct nla_policy ct_nla_postatic int ctnetlink_flush_iterate (struct nf_conn *ct,void *data) { -if (test_bit (IPS_OFFLOAD_BIT , &ct->status)) -return 0 ; -return ctnetlink_filter_match (ct, data); }
@@ -1561,11 +1558,6 @@ static int ctnetlink_del_conntrack(struc ct =nf_ct_tuplehash_to_ctrack (h); -if (test_bit (IPS_OFFLOAD_BIT , &ct->status)) { -nf_ct_put (ct); -return -EBUSY ; - } -if (cda[CTA_ID ]) {__be32 id =nla_get_be32 (cda[CTA_ID ]);
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.182-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.182-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.182-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.10:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
75 tests: 75 pass, 0 failLinux version: 5.10.182-rc1-gf2a19702506c
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v5.x/stable-review/patch-5.10.182-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 5.10.182-rc1
* git: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
* git branch: linux-5.10.y
* git commit: f2a19702506cf5aee6bf44c1a1c48520b2455d75
* git describe: v5.10.181-23-gf2a19702506c
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.10.y/build/v5.10.181-23-gf2a19702506c
## Test Regressions (compared to v5.10.181)
## Metric Regressions (compared to v5.10.181)
## Test Fixes (compared to v5.10.181)
## Metric Fixes (compared to v5.10.181)
## Test result summary
total: 100555, pass: 83695, fail: 2731, skip: 13973, xfail: 156
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 117 total, 116 passed, 1 failed
* arm64: 45 total, 43 passed, 2 failed
* i386: 35 total, 33 passed, 2 failed
* mips: 27 total, 26 passed, 1 failed
* parisc: 8 total, 8 passed, 0 failed
* powerpc: 26 total, 20 passed, 6 failed
* riscv: 12 total, 11 passed, 1 failed
* s390: 12 total, 12 passed, 0 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 38 total, 36 passed, 2 failed
## Test suites summary
* boot
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-sigaltstack
* kselftest-size
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* perf
* rcutorture
* v4l2-compliance
* vdso
--
Linaro LKFT
https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
Build results:
total: 162 pass: 162 fail: 0 Qemu test results: total: 485 pass: 485 fail: 0
Guenter
Hello Greg,
Quoted 10 lines
From: Greg Kroah-Hartman <[email protected]>
Sent: Thursday, June 1, 2023 2:21 PMThis is the start of the stable review cycle for the 5.10.182 release. There are 22 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 03 Jun 2023 13:19:19 +0000. Anything received after that time might be too late.
CIP configurations built and booted with Linux 5.10.182-rc1 (f2a19702506c):
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/pipelines/886202472
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/commits/linux-5.10.y
Kind regards, Chris