Skip to content

Commit 87fbb70

Browse files
Tomas Winklerlijinxia
authored andcommitted
dm: mei: fix double fw_reset on uos reboot
Edge triggered mevent on sysfs file is triggered immediately after mevent_add(), hence this has to be ignored. The issue that is resolved that the 'first' flag was global and wasn't reset on each mevent_add(). Tracked-On: #1846 Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Acked-by: Yu Wang <yu1.wang@intel.com>
1 parent 844553e commit 87fbb70

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

devicemodel/hw/pci/virtio/virtio_mei.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ struct virtio_mei {
318318
pthread_mutex_t mutex;
319319

320320
struct mevent *reset_mevp;
321+
bool dev_state_first;
321322

322323
struct mei_virtio_cfg *config;
323324

@@ -1979,7 +1980,6 @@ vmei_stop(struct virtio_mei *vmei)
19791980
static void
19801981
vmei_reset_callback(int fd, enum ev_type type, void *param)
19811982
{
1982-
static bool first_time = true;
19831983
struct virtio_mei *vmei = param;
19841984
char buf[MEI_DEV_STATE_LEN] = {0};
19851985
int sz;
@@ -1989,8 +1989,12 @@ vmei_reset_callback(int fd, enum ev_type type, void *param)
19891989

19901990
lseek(fd, 0, SEEK_SET);
19911991
sz = read(fd, buf, 12);
1992-
if (first_time) {
1993-
first_time = false;
1992+
/*
1993+
* edge mevent is hit immediately after add
1994+
* as the file is not empty, this has to be ignored
1995+
*/
1996+
if (vmei->dev_state_first) {
1997+
vmei->dev_state_first = false;
19941998
return;
19951999
}
19962000

@@ -2017,6 +2021,7 @@ static int vmei_add_reset_event(struct virtio_mei *vmei)
20172021
if (dev_state_fd < 0)
20182022
return -errno;
20192023

2024+
vmei->dev_state_first = true;
20202025
vmei->reset_mevp = mevent_add(dev_state_fd, EVF_READ_ET,
20212026
vmei_reset_callback, vmei);
20222027
if (!vmei->reset_mevp) {

0 commit comments

Comments
 (0)