Secure timer callback moved to bottom half execution

这个提交包含在:
nxpandroid
2017-09-26 17:56:25 +05:30
父节点 a95ba8972a
当前提交 acdce17254

查看文件

@@ -60,6 +60,7 @@
#include <linux/rcupdate.h>
#include <linux/sched.h>
#include <linux/signal.h>
#include <linux/workqueue.h>
/* HiKey Compilation fix */
#define HiKey_620_COMPILATION_FIX 1
#ifndef HiKey_620_COMPILATION_FIX
@@ -69,7 +70,7 @@
#include <linux/timer.h>
#include "pn553.h"
#define NEXUS5x 0
#define NEXUS5x 1
#define HWINFO 0
#if NEXUS5x
#undef ISO_RST
@@ -104,6 +105,8 @@ struct pn544_dev {
long nfc_service_pid; /*used to signal the nfc the nfc service */
chip_pwr_scheme_t chip_pwr_scheme;
unsigned int secure_timer_cnt;
struct workqueue_struct *pSecureTimerCbWq;
struct work_struct wq_task;
};
/* HiKey Compilation fix */
#ifndef HiKey_620_COMPILATION_FIX
@@ -125,6 +128,8 @@ static long secure_timer_operation(struct pn544_dev *pn544_dev, unsigned long ar
#if HWINFO
static void check_hw_info(void);
#endif
#define SECURE_TIMER_WORK_QUEUE "SecTimerCbWq"
static void pn544_disable_irq(struct pn544_dev *pn544_dev)
{
unsigned long flags;
@@ -926,7 +931,7 @@ long pn544_dev_ioctl(struct file *filp, unsigned int cmd,
}
EXPORT_SYMBOL(pn544_dev_ioctl);
static void secure_timer_callback( unsigned long data )
static void secure_timer_workqueue(struct work_struct *Wq)
{
p61_access_state_t current_state = P61_STATE_INVALID;
printk( KERN_INFO "secure_timer_callback: called (%lu).\n", jiffies);
@@ -950,6 +955,16 @@ static void secure_timer_callback( unsigned long data )
pn544_dev->secure_timer_cnt = 0;
/* Locking the critical section: ESE_PWR_OFF to allow eSE to shutdown peacefully :: END */
release_ese_lock(P61_STATE_WIRED);
return;
}
static void secure_timer_callback( unsigned long data )
{
/* Flush and push the timer callback event to the bottom half(work queue)
to be executed later, at a safer time */
flush_workqueue(pn544_dev->pSecureTimerCbWq);
queue_work(pn544_dev->pSecureTimerCbWq, &pn544_dev->wq_task);
return;
}
static long start_seccure_timer(unsigned long timer_value)
@@ -1256,7 +1271,8 @@ static int pn544_probe(struct i2c_client *client,
sema_init(&ese_access_sema, 1);
mutex_init(&pn544_dev->p61_state_mutex);
spin_lock_init(&pn544_dev->irq_enabled_lock);
pn544_dev->pSecureTimerCbWq = create_workqueue(SECURE_TIMER_WORK_QUEUE);
INIT_WORK(&pn544_dev->wq_task, secure_timer_workqueue);
pn544_dev->pn544_device.minor = MISC_DYNAMIC_MINOR;
pn544_dev->pn544_device.name = "pn553";
pn544_dev->pn544_device.fops = &pn544_dev_fops;
@@ -1331,6 +1347,7 @@ static int pn544_remove(struct i2c_client *client)
gpio_free(pn544_dev->irq_gpio);
gpio_free(pn544_dev->ven_gpio);
gpio_free(pn544_dev->ese_pwr_gpio);
destroy_workqueue(pn544_dev->pSecureTimerCbWq);
#ifdef ISO_RST
gpio_free(pn544_dev->iso_rst_gpio);
#endif