A treewide cleanup of struct cycle_counter const annotations:
The initial idea of making them const was correct as they were seperate instances. When they got embedded into larger data structures, which are even modified by the callback this got moot. The only reason why this went unnoticed is that the required container_of() casts the const attribute forcefully away. Stop pretending that it is const. -----BEGIN PGP SIGNATURE----- iQJHBAABCgAxFiEEQp8+kY+LLUocC4bMphj1TA10mKEFAmiGkt0THHRnbHhAbGlu dXRyb25peC5kZQAKCRCmGPVMDXSYodb/D/47tAOcL6qyTxh+E5fDj4h5M2aVQYp+ oLiBY7ejroObCAiMo6v/ajaGNEXvLXEtratFBQv1o7n12rxsKnv/XNdIbAzvMwKm 3vNx9anQ0THFnWiUKCAf/mZBc/Z9uXnjBXY0TeaFLuj4DuUMqGGs/ga32UIvEwW+ VXS592NIHYoK87VA/AIOK8AGX9VesYoxUqZmfmYn5NuJwsJDSgGaQpoH2fBVhU6p B7NRnVLYtFYpeAvL0ihFuOP03HZes5hM2wmqNtoCJJF9e39Eg9DXhsaUw8AIa1fu UCxm5sfNpMR+QN2AizbI5deHZJbFwYPy/cFrZ0AiwCfZt6NATjO7bQjvu/23yPFn klby8GizV0Q7qmiLi45EdPdid5oiBm/lNy6ICP9fN/XlHZFxAsqE/OGx626P+LPs xQK1MpHNjbkCK//X49hxQX6a0BCqSEAG4GOuEEqRxTeD9SZVzIQbcQ6CKOuBqPqc hc5o5N3suzdmq5sujQD0IiL9R960WfzsSgbmdQm+njhRz+LjAx6T419MlyePiu/5 hf8pZjl/SHn1O6RpPfJ501U+tbo1auEnUjXMGcg12dx7KE4w9s7fboFQLXruuVRr UNeVXeMRxZqXSAB1HyKQMI8lZ7nHF6FZUA+xLMusCwIYi7YU0h7I3BxDzxpZV62l zJgslDp7ZqSopw== =C0ua -----END PGP SIGNATURE----- Merge tag 'timers-cleanups-2025-07-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip Pull timer cleanups from Thomas Gleixner: "A treewide cleanup of struct cycle_counter const annotations. The initial idea of making them const was correct as they were seperate instances. When they got embedded into larger data structures, which are even modified by the callback this got moot. The only reason why this went unnoticed is that the required container_of() casts the const attribute forcefully away. Stop pretending that it is const" * tag 'timers-cleanups-2025-07-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: time/timecounter: Fix the lie that struct cyclecounter is const
This commit is contained in:
commit
99e731bcb8
|
@ -193,7 +193,7 @@ static struct timecounter xilinx_tc = {
|
|||
.cc = NULL,
|
||||
};
|
||||
|
||||
static u64 xilinx_cc_read(const struct cyclecounter *cc)
|
||||
static u64 xilinx_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
return xilinx_read(NULL);
|
||||
}
|
||||
|
|
|
@ -243,7 +243,7 @@ static u64 arch_counter_read(struct clocksource *cs)
|
|||
return arch_timer_read_counter();
|
||||
}
|
||||
|
||||
static u64 arch_counter_read_cc(const struct cyclecounter *cc)
|
||||
static u64 arch_counter_read_cc(struct cyclecounter *cc)
|
||||
{
|
||||
return arch_timer_read_counter();
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
#include "rockchip_canfd.h"
|
||||
|
||||
static u64 rkcanfd_timestamp_read(const struct cyclecounter *cc)
|
||||
static u64 rkcanfd_timestamp_read(struct cyclecounter *cc)
|
||||
{
|
||||
const struct rkcanfd_priv *priv = container_of(cc, struct rkcanfd_priv, cc);
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
#include "mcp251xfd.h"
|
||||
|
||||
static u64 mcp251xfd_timestamp_raw_read(const struct cyclecounter *cc)
|
||||
static u64 mcp251xfd_timestamp_raw_read(struct cyclecounter *cc)
|
||||
{
|
||||
const struct mcp251xfd_priv *priv;
|
||||
u32 ts_raw = 0;
|
||||
|
|
|
@ -420,7 +420,7 @@ static inline int gs_usb_get_timestamp(const struct gs_usb *parent,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u64 gs_usb_timestamp_read(const struct cyclecounter *cc) __must_hold(&dev->tc_lock)
|
||||
static u64 gs_usb_timestamp_read(struct cyclecounter *cc) __must_hold(&dev->tc_lock)
|
||||
{
|
||||
struct gs_usb *parent = container_of(cc, struct gs_usb, cc);
|
||||
u32 timestamp = 0;
|
||||
|
|
|
@ -732,7 +732,7 @@ struct mv88e6xxx_avb_ops {
|
|||
};
|
||||
|
||||
struct mv88e6xxx_ptp_ops {
|
||||
u64 (*clock_read)(const struct cyclecounter *cc);
|
||||
u64 (*clock_read)(struct cyclecounter *cc);
|
||||
int (*ptp_enable)(struct ptp_clock_info *ptp,
|
||||
struct ptp_clock_request *rq, int on);
|
||||
int (*ptp_verify)(struct ptp_clock_info *ptp, unsigned int pin,
|
||||
|
|
|
@ -138,7 +138,7 @@ mv88e6xxx_cc_coeff_get(struct mv88e6xxx_chip *chip)
|
|||
}
|
||||
}
|
||||
|
||||
static u64 mv88e6352_ptp_clock_read(const struct cyclecounter *cc)
|
||||
static u64 mv88e6352_ptp_clock_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct mv88e6xxx_chip *chip = cc_to_chip(cc);
|
||||
u16 phc_time[2];
|
||||
|
@ -152,7 +152,7 @@ static u64 mv88e6352_ptp_clock_read(const struct cyclecounter *cc)
|
|||
return ((u32)phc_time[1] << 16) | phc_time[0];
|
||||
}
|
||||
|
||||
static u64 mv88e6165_ptp_clock_read(const struct cyclecounter *cc)
|
||||
static u64 mv88e6165_ptp_clock_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct mv88e6xxx_chip *chip = cc_to_chip(cc);
|
||||
u16 phc_time[2];
|
||||
|
@ -483,7 +483,7 @@ const struct mv88e6xxx_ptp_ops mv88e6390_ptp_ops = {
|
|||
(1 << HWTSTAMP_FILTER_PTP_V2_DELAY_REQ),
|
||||
};
|
||||
|
||||
static u64 mv88e6xxx_ptp_clock_read(const struct cyclecounter *cc)
|
||||
static u64 mv88e6xxx_ptp_clock_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct mv88e6xxx_chip *chip = cc_to_chip(cc);
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "xgbe.h"
|
||||
#include "xgbe-common.h"
|
||||
|
||||
static u64 xgbe_cc_read(const struct cyclecounter *cc)
|
||||
static u64 xgbe_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct xgbe_prv_data *pdata = container_of(cc,
|
||||
struct xgbe_prv_data,
|
||||
|
|
|
@ -15176,7 +15176,7 @@ void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb)
|
|||
}
|
||||
|
||||
/* Read the PHC */
|
||||
static u64 bnx2x_cyclecounter_read(const struct cyclecounter *cc)
|
||||
static u64 bnx2x_cyclecounter_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct bnx2x *bp = container_of(cc, struct bnx2x, cyclecounter);
|
||||
int port = BP_PORT(bp);
|
||||
|
|
|
@ -702,7 +702,7 @@ static void bnxt_unmap_ptp_regs(struct bnxt *bp)
|
|||
(BNXT_PTP_GRC_WIN - 1) * 4);
|
||||
}
|
||||
|
||||
static u64 bnxt_cc_read(const struct cyclecounter *cc)
|
||||
static u64 bnxt_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct bnxt_ptp_cfg *ptp = container_of(cc, struct bnxt_ptp_cfg, cc);
|
||||
u64 ns = 0;
|
||||
|
|
|
@ -209,7 +209,7 @@ static int cavium_ptp_enable(struct ptp_clock_info *ptp_info,
|
|||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static u64 cavium_ptp_cc_read(const struct cyclecounter *cc)
|
||||
static u64 cavium_ptp_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct cavium_ptp *clock =
|
||||
container_of(cc, struct cavium_ptp, cycle_counter);
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
* cyclecounter structure used to construct a ns counter from the
|
||||
* arbitrary fixed point registers
|
||||
*/
|
||||
static u64 fec_ptp_read(const struct cyclecounter *cc)
|
||||
static u64 fec_ptp_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct fec_enet_private *fep =
|
||||
container_of(cc, struct fec_enet_private, cc);
|
||||
|
|
|
@ -4436,7 +4436,7 @@ u64 e1000e_read_systim(struct e1000_adapter *adapter,
|
|||
* e1000e_cyclecounter_read - read raw cycle counter (used by time counter)
|
||||
* @cc: cyclecounter structure
|
||||
**/
|
||||
static u64 e1000e_cyclecounter_read(const struct cyclecounter *cc)
|
||||
static u64 e1000e_cyclecounter_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct e1000_adapter *adapter = container_of(cc, struct e1000_adapter,
|
||||
cc);
|
||||
|
|
|
@ -73,7 +73,7 @@ static void igb_ptp_tx_hwtstamp(struct igb_adapter *adapter);
|
|||
static void igb_ptp_sdp_init(struct igb_adapter *adapter);
|
||||
|
||||
/* SYSTIM read access for the 82576 */
|
||||
static u64 igb_ptp_read_82576(const struct cyclecounter *cc)
|
||||
static u64 igb_ptp_read_82576(struct cyclecounter *cc)
|
||||
{
|
||||
struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
|
||||
struct e1000_hw *hw = &igb->hw;
|
||||
|
@ -90,7 +90,7 @@ static u64 igb_ptp_read_82576(const struct cyclecounter *cc)
|
|||
}
|
||||
|
||||
/* SYSTIM read access for the 82580 */
|
||||
static u64 igb_ptp_read_82580(const struct cyclecounter *cc)
|
||||
static u64 igb_ptp_read_82580(struct cyclecounter *cc)
|
||||
{
|
||||
struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
|
||||
struct e1000_hw *hw = &igb->hw;
|
||||
|
|
|
@ -327,7 +327,7 @@ static void ixgbe_ptp_setup_sdp_X550(struct ixgbe_adapter *adapter)
|
|||
* result of SYSTIME is 32bits of "billions of cycles" and 32 bits of
|
||||
* "cycles", rather than seconds and nanoseconds.
|
||||
*/
|
||||
static u64 ixgbe_ptp_read_X550(const struct cyclecounter *cc)
|
||||
static u64 ixgbe_ptp_read_X550(struct cyclecounter *cc)
|
||||
{
|
||||
struct ixgbe_adapter *adapter =
|
||||
container_of(cc, struct ixgbe_adapter, hw_cc);
|
||||
|
@ -364,7 +364,7 @@ static u64 ixgbe_ptp_read_X550(const struct cyclecounter *cc)
|
|||
* cyclecounter structure used to construct a ns counter from the
|
||||
* arbitrary fixed point registers
|
||||
*/
|
||||
static u64 ixgbe_ptp_read_82599(const struct cyclecounter *cc)
|
||||
static u64 ixgbe_ptp_read_82599(struct cyclecounter *cc)
|
||||
{
|
||||
struct ixgbe_adapter *adapter =
|
||||
container_of(cc, struct ixgbe_adapter, hw_cc);
|
||||
|
|
|
@ -193,7 +193,7 @@ static int ptp_pps_on(struct otx2_ptp *ptp, int on, u64 period)
|
|||
return otx2_sync_mbox_msg(&ptp->nic->mbox);
|
||||
}
|
||||
|
||||
static u64 ptp_cc_read(const struct cyclecounter *cc)
|
||||
static u64 ptp_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct otx2_ptp *ptp = container_of(cc, struct otx2_ptp, cycle_counter);
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
/* mlx4_en_read_clock - read raw cycle counter (to be used by time counter)
|
||||
*/
|
||||
static u64 mlx4_en_read_clock(const struct cyclecounter *tc)
|
||||
static u64 mlx4_en_read_clock(struct cyclecounter *tc)
|
||||
{
|
||||
struct mlx4_en_dev *mdev =
|
||||
container_of(tc, struct mlx4_en_dev, cycles);
|
||||
|
|
|
@ -343,7 +343,7 @@ static u64 mlx5_read_time(struct mlx5_core_dev *dev,
|
|||
(u64)timer_l | (u64)timer_h1 << 32;
|
||||
}
|
||||
|
||||
static u64 read_internal_timer(const struct cyclecounter *cc)
|
||||
static u64 read_internal_timer(struct cyclecounter *cc)
|
||||
{
|
||||
struct mlx5_timer *timer = container_of(cc, struct mlx5_timer, cycles);
|
||||
struct mlx5_clock *clock = container_of(timer, struct mlx5_clock, timer);
|
||||
|
|
|
@ -131,7 +131,7 @@ static u64 __mlxsw_sp1_ptp_read_frc(struct mlxsw_sp1_ptp_clock *clock,
|
|||
return (u64) frc_l | (u64) frc_h2 << 32;
|
||||
}
|
||||
|
||||
static u64 mlxsw_sp1_ptp_read_frc(const struct cyclecounter *cc)
|
||||
static u64 mlxsw_sp1_ptp_read_frc(struct cyclecounter *cc)
|
||||
{
|
||||
struct mlxsw_sp1_ptp_clock *clock =
|
||||
container_of(cc, struct mlxsw_sp1_ptp_clock, cycles);
|
||||
|
|
|
@ -290,7 +290,7 @@ static u64 ionic_hwstamp_read(struct ionic *ionic,
|
|||
return (u64)tick_low | ((u64)tick_high << 32);
|
||||
}
|
||||
|
||||
static u64 ionic_cc_read(const struct cyclecounter *cc)
|
||||
static u64 ionic_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct ionic_phc *phc = container_of(cc, struct ionic_phc, cc);
|
||||
struct ionic *ionic = phc->lif->ionic;
|
||||
|
|
|
@ -181,7 +181,7 @@ static void qede_ptp_task(struct work_struct *work)
|
|||
}
|
||||
|
||||
/* Read the PHC. This API is invoked with ptp_lock held. */
|
||||
static u64 qede_ptp_read_cc(const struct cyclecounter *cc)
|
||||
static u64 qede_ptp_read_cc(struct cyclecounter *cc)
|
||||
{
|
||||
struct qede_dev *edev;
|
||||
struct qede_ptp *ptp;
|
||||
|
|
|
@ -181,7 +181,7 @@ void cpts_misc_interrupt(struct cpts *cpts)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(cpts_misc_interrupt);
|
||||
|
||||
static u64 cpts_systim_read(const struct cyclecounter *cc)
|
||||
static u64 cpts_systim_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct cpts *cpts = container_of(cc, struct cpts, cc);
|
||||
|
||||
|
|
|
@ -652,7 +652,7 @@ static int wx_ptp_set_timestamp_mode(struct wx *wx,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static u64 wx_ptp_read(const struct cyclecounter *hw_cc)
|
||||
static u64 wx_ptp_read(struct cyclecounter *hw_cc)
|
||||
{
|
||||
struct wx *wx = container_of(hw_cc, struct wx, hw_cc);
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ struct mock_phc {
|
|||
spinlock_t lock;
|
||||
};
|
||||
|
||||
static u64 mock_phc_cc_read(const struct cyclecounter *cc)
|
||||
static u64 mock_phc_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
return ktime_get_raw_ns();
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@ static const struct ptp_clock_info ptp_vclock_info = {
|
|||
.do_aux_work = ptp_vclock_refresh,
|
||||
};
|
||||
|
||||
static u64 ptp_vclock_read(const struct cyclecounter *cc)
|
||||
static u64 ptp_vclock_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct ptp_vclock *vclock = cc_to_vclock(cc);
|
||||
struct ptp_clock *ptp = vclock->pclock;
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
* @shift: cycle to nanosecond divisor (power of two)
|
||||
*/
|
||||
struct cyclecounter {
|
||||
u64 (*read)(const struct cyclecounter *cc);
|
||||
u64 (*read)(struct cyclecounter *cc);
|
||||
u64 mask;
|
||||
u32 mult;
|
||||
u32 shift;
|
||||
|
@ -53,7 +53,7 @@ struct cyclecounter {
|
|||
* @frac: accumulated fractional nanoseconds
|
||||
*/
|
||||
struct timecounter {
|
||||
const struct cyclecounter *cc;
|
||||
struct cyclecounter *cc;
|
||||
u64 cycle_last;
|
||||
u64 nsec;
|
||||
u64 mask;
|
||||
|
@ -100,7 +100,7 @@ static inline void timecounter_adjtime(struct timecounter *tc, s64 delta)
|
|||
* the time stamp counter by the number of elapsed nanoseconds.
|
||||
*/
|
||||
extern void timecounter_init(struct timecounter *tc,
|
||||
const struct cyclecounter *cc,
|
||||
struct cyclecounter *cc,
|
||||
u64 start_tstamp);
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include <linux/timecounter.h>
|
||||
|
||||
void timecounter_init(struct timecounter *tc,
|
||||
const struct cyclecounter *cc,
|
||||
struct cyclecounter *cc,
|
||||
u64 start_tstamp)
|
||||
{
|
||||
tc->cc = cc;
|
||||
|
|
|
@ -634,7 +634,7 @@ int snd_hdac_stream_set_params(struct hdac_stream *azx_dev,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hdac_stream_set_params);
|
||||
|
||||
static u64 azx_cc_read(const struct cyclecounter *cc)
|
||||
static u64 azx_cc_read(struct cyclecounter *cc)
|
||||
{
|
||||
struct hdac_stream *azx_dev = container_of(cc, struct hdac_stream, cc);
|
||||
|
||||
|
|
Loading…
Reference in New Issue