add mutex io

must be atomic, otherwise unintended consequences
This commit is contained in:
SergeyMy
2023-11-23 20:55:14 +05:00
committed by GitHub
parent 06b88a04ac
commit 95d5c7b318

View File

@@ -319,6 +319,7 @@ struct nct6687_data
const struct attribute_group *groups[6];
struct mutex update_lock; /* used to protect sensor updates */
struct mutex EC_io_lock; /* used to protect EC io */
bool valid; /* true if following fields are valid */
unsigned long last_updated; /* In jiffies */
@@ -502,11 +503,11 @@ static u16 nct6687_read(struct nct6687_data *data, u16 address)
u8 page = (u8)(address >> 8);
u8 index = (u8)(address & 0xFF);
int res;
mutex_lock(&data->EC_io_lock);
outb_p(EC_SPACE_PAGE_SELECT, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET);
outb_p(page, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET);
outb_p(index, data->addr + EC_SPACE_INDEX_REGISTER_OFFSET);
mutex_unlock(&data->EC_io_lock);
res = inb_p(data->addr + EC_SPACE_DATA_REGISTER_OFFSET);
return res;
@@ -521,11 +522,12 @@ static void nct6687_write(struct nct6687_data *data, u16 address, u16 value)
{
u8 page = (u8)(address >> 8);
u8 index = (u8)(address & 0xFF);
mutex_lock(&data->EC_io_lock);
outb_p(EC_SPACE_PAGE_SELECT, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET);
outb_p(page, data->addr + EC_SPACE_PAGE_REGISTER_OFFSET);
outb_p(index, data->addr + EC_SPACE_INDEX_REGISTER_OFFSET);
outb_p(value, data->addr + EC_SPACE_DATA_REGISTER_OFFSET);
mutex_unlock(&data->EC_io_lock);
}
static void nct6687_update_temperatures(struct nct6687_data *data)
@@ -991,7 +993,7 @@ static int nct6687_probe(struct platform_device *pdev)
pr_debug("nct6687_probe addr=0x%04X, sioreg=0x%04X\n", data->addr, data->sioreg);
mutex_init(&data->update_lock);
mutex_init(&data->EC_io_lock);
platform_set_drvdata(pdev, data);
nct6687_init_device(data);