Skip to content

Commit 69b4d39

Browse files
Camera Software IntegrationGerrit - the friendly Code Review server
authored andcommitted
Merge "msm: camera: common: add kernel-compatible hard IRQ check helper" into camera-kernel.qclinux.0.0
2 parents 860ac44 + 510165f commit 69b4d39

9 files changed

Lines changed: 39 additions & 14 deletions

File tree

camera/drivers/cam_core/cam_hw_intf.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ static inline unsigned long cam_hw_util_hw_lock_irqsave(struct cam_hw_info *hw_i
127127
{
128128
unsigned long flags = 0;
129129

130-
if (!in_irq())
130+
if (!cam_in_hardirq())
131131
spin_lock_irqsave(&hw_info->hw_lock, flags);
132132

133133
return flags;
@@ -136,7 +136,7 @@ static inline unsigned long cam_hw_util_hw_lock_irqsave(struct cam_hw_info *hw_i
136136
static inline void cam_hw_util_hw_unlock_irqrestore(struct cam_hw_info *hw_info,
137137
unsigned long flags)
138138
{
139-
if (!in_irq())
139+
if (!cam_in_hardirq())
140140
spin_unlock_irqrestore(&hw_info->hw_lock, flags);
141141
}
142142

camera/drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ static inline unsigned long cam_irq_controller_lock_irqsave(
183183
{
184184
unsigned long flags = 0;
185185

186-
if (!in_irq())
186+
if (!cam_in_hardirq())
187187
spin_lock_irqsave(&controller->lock, flags);
188188

189189
return flags;
@@ -192,7 +192,7 @@ static inline unsigned long cam_irq_controller_lock_irqsave(
192192
static inline void cam_irq_controller_unlock_irqrestore(
193193
struct cam_irq_controller *controller, unsigned long flags)
194194
{
195-
if (!in_irq())
195+
if (!cam_in_hardirq())
196196
spin_unlock_irqrestore(&controller->lock, flags);
197197
}
198198

@@ -299,7 +299,7 @@ static inline void cam_irq_controller_clear_irq(
299299
/* Don't clear in IRQ context since global clear will be issued after
300300
* top half processing
301301
*/
302-
if (in_irq())
302+
if (cam_in_hardirq())
303303
return;
304304

305305
for (i = 0; i < controller->num_registers; i++) {

camera/drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_csid_hw/cam_tfe_csid_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3222,7 +3222,7 @@ static int cam_tfe_csid_sof_irq_debug(
32223222
csid_hw->sof_irq_triggered = false;
32233223
}
32243224

3225-
if (!in_irq())
3225+
if (!cam_in_hardirq())
32263226
CAM_INFO(CAM_ISP, "SOF freeze: CSID:%d SOF irq %s",
32273227
csid_hw->hw_intf->hw_idx,
32283228
sof_irq_enable ? "enabled" : "disabled");

camera/drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_hw/cam_tfe_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ int cam_tfe_irq_config(void *tfe_core_data,
241241
soc_info = (struct cam_hw_soc_info *)top_priv->common_data.soc_info;
242242
mem_base = soc_info->reg_map[TFE_CORE_BASE_IDX].mem_base;
243243

244-
need_lock = !in_irq();
244+
need_lock = !cam_in_hardirq();
245245
if (need_lock)
246246
spin_lock_irqsave(&core_info->spin_lock, flags);
247247

camera_kt/drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "cam_io_util.h"
1212
#include "cam_irq_controller.h"
1313
#include "cam_debug_util.h"
14+
#include "cam_common_util.h"
1415

1516
/**
1617
* struct cam_irq_evt_handler:
@@ -322,7 +323,7 @@ int cam_irq_controller_subscribe_irq(void *irq_controller,
322323
if (controller->hdl_idx > 0x3FFFFFFF)
323324
controller->hdl_idx = 1;
324325

325-
need_lock = !in_irq();
326+
need_lock = !cam_in_hardirq();
326327
if (need_lock)
327328
spin_lock_irqsave(&controller->lock, flags);
328329
for (i = 0; i < controller->num_registers; i++) {
@@ -374,7 +375,7 @@ int cam_irq_controller_enable_irq(void *irq_controller, uint32_t handle)
374375
if (!controller)
375376
return rc;
376377

377-
need_lock = !in_irq();
378+
need_lock = !cam_in_hardirq();
378379
if (need_lock)
379380
spin_lock_irqsave(&controller->lock, flags);
380381

@@ -430,7 +431,7 @@ int cam_irq_controller_disable_irq(void *irq_controller, uint32_t handle)
430431
if (!controller)
431432
return rc;
432433

433-
need_lock = !in_irq();
434+
need_lock = !cam_in_hardirq();
434435
if (need_lock)
435436
spin_lock_irqsave(&controller->lock, flags);
436437

@@ -499,7 +500,7 @@ int cam_irq_controller_unsubscribe_irq(void *irq_controller,
499500
int rc = -EINVAL;
500501
bool need_lock;
501502

502-
need_lock = !in_irq();
503+
need_lock = !cam_in_hardirq();
503504
if (need_lock)
504505
spin_lock_irqsave(&controller->lock, flags);
505506

camera_kt/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "cam_cpas_api.h"
2323
#include "cam_subdev.h"
2424
#include "cam_tasklet_util.h"
25+
#include "cam_common_util.h"
2526

2627
/* Timeout value in msec */
2728
#define IFE_CSID_TIMEOUT 1000
@@ -4364,7 +4365,7 @@ static int cam_ife_csid_sof_irq_debug(
43644365
csid_hw->sof_irq_triggered = false;
43654366
}
43664367

4367-
if (!in_irq())
4368+
if (!cam_in_hardirq())
43684369
CAM_INFO(CAM_ISP, "SOF freeze: CSID SOF irq %s, CSID HW:%d",
43694370
(sof_irq_enable) ? "enabled" : "disabled",
43704371
csid_hw->hw_intf->hw_idx);

camera_kt/drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_csid_hw/cam_tfe_csid_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2585,7 +2585,7 @@ static int cam_tfe_csid_sof_irq_debug(
25852585
csid_hw->sof_irq_triggered = false;
25862586
}
25872587

2588-
if (!in_irq())
2588+
if (!cam_in_hardirq())
25892589
CAM_INFO(CAM_ISP, "SOF freeze: CSID:%d SOF irq %s",
25902590
csid_hw->hw_intf->hw_idx,
25912591
sof_irq_enable ? "enabled" : "disabled");

camera_kt/drivers/cam_isp/isp_hw_mgr/isp_hw/tfe_hw/cam_tfe_core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ int cam_tfe_irq_config(void *tfe_core_data,
207207
soc_info = (struct cam_hw_soc_info *)top_priv->common_data.soc_info;
208208
mem_base = soc_info->reg_map[TFE_CORE_BASE_IDX].mem_base;
209209

210-
need_lock = !in_irq();
210+
need_lock = !cam_in_hardirq();
211211
if (need_lock)
212212
spin_lock_irqsave(&core_info->spin_lock, flags);
213213

common/cam_common_util.h

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <linux/types.h>
1111
#include <linux/kernel.h>
1212
#include <linux/vmalloc.h>
13+
#include <linux/version.h>
1314

1415
#include "cam_hw_mgr_intf.h"
1516

@@ -86,6 +87,28 @@
8687
rem_jiffies; \
8788
})
8889

90+
91+
/*
92+
* Linux ≥ 6.19 removed in_irq(); the intended replacement is in_hardirq().
93+
* Linux ≤ 6.18 still has in_irq().
94+
*
95+
* cam_in_hardirq():
96+
* - returns true in hard IRQ context only (matching the old in_irq() semantics).
97+
*/
98+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 19, 0)
99+
#include <linux/irq.h> /* in_hardirq() */
100+
static inline bool cam_in_hardirq(void)
101+
{
102+
return in_hardirq();
103+
}
104+
#else
105+
#include <linux/interrupt.h> /* in_irq() */
106+
static inline bool cam_in_hardirq(void)
107+
{
108+
return in_irq();
109+
}
110+
#endif
111+
89112
typedef unsigned long (*cam_common_mini_dump_cb) (void *dst,
90113
unsigned long len, void *priv_data);
91114

0 commit comments

Comments
 (0)