Re: Fwd: Potential data race in psmouse_interrupt

2015-07-22 Thread Dmitry Torokhov
On Wed, Jul 22, 2015 at 03:14:42PM +0200, Andrey Konovalov wrote:
> Hi!
> 
> We are working on a dynamic data race detector for Linux kernel called
> KernelThreadSanitizer (ktsan) (https://github.com/google/ktsan/wiki).
> 
> Here is a report we got while running ktsan (upstream revision
> 21bdb584af8cca7c6df3c44cba268be050a234eb).
> 
> ==
> ThreadSanitizer: data-race in psmouse_interrupt
> 
> Write of size 1 by thread T1 (K1):
>  [] psmouse_interrupt+0xd2/0x690
> drivers/input/mouse/psmouse-base.c:337
>  [] serio_interrupt+0x66/0xb0 
> drivers/input/serio/serio.c:1008
>  [] i8042_interrupt+0x240/0x4d0
> drivers/input/serio/i8042.c:541
>  [] handle_irq_event_percpu+0x62/0x2a0 
> kernel/irq/handle.c:143
>  [] handle_irq_event+0xa2/0xf0 kernel/irq/handle.c:192
>  [] handle_edge_irq+0x104/0x380 kernel/irq/chip.c:608
>  [< inlined>] handle_irq+0xf6/0x220 generic_handle_irq_desc
> include/linux/irqdesc.h:146
>  [] handle_irq+0xf6/0x220 arch/x86/kernel/irq_64.c:81
>  [] do_IRQ+0x5e/0x110 arch/x86/kernel/irq.c:223
>  [] ret_from_intr+0x0/0x1f arch/x86/entry/entry_64.S:601
>  [< inlined>] irq_exit+0x98/0xa0 invoke_softirq kernel/softirq.c:350
>  [] irq_exit+0x98/0xa0 kernel/softirq.c:391
>  [< inlined>] smp_apic_timer_interrupt+0x63/0x80 exiting_irq
> ./arch/x86/include/asm/apic.h:655
>  [] smp_apic_timer_interrupt+0x63/0x80
> arch/x86/kernel/apic/apic.c:915
>  [] apic_timer_interrupt+0x6b/0x70
> arch/x86/entry/entry_64.S:782
>  [] kvasprintf+0x5d/0x90 lib/kasprintf.c:24
>  [] kasprintf+0x4e/0x70 lib/kasprintf.c:40
>  [< inlined>] module_add_driver+0x8f/0x180 make_driver_name
> drivers/base/module.c:18
>  [] module_add_driver+0x8f/0x180 drivers/base/module.c:63
>  [] bus_add_driver+0x204/0x340 drivers/base/bus.c:713
>  [] driver_register+0xdb/0x190 drivers/base/driver.c:168
>  [] __hid_register_driver+0xb6/0x100
> drivers/hid/hid-core.c:2677
>  [] apple_driver_init+0x24/0x31 drivers/hid/hid-apple.c:574
>  [] do_one_initcall+0xb9/0x220 init/main.c:798
>  [< inlined>] kernel_init_freeable+0x2ca/0x397
> do_initcall_level init/main.c:863
>  [< inlined>] kernel_init_freeable+0x2ca/0x397 do_initcalls
> init/main.c:871
>  [< inlined>] kernel_init_freeable+0x2ca/0x397 do_basic_setup
> init/main.c:890
>  [] kernel_init_freeable+0x2ca/0x397 init/main.c:1013
>  [] kernel_init+0x16/0x140 init/main.c:941
>  [] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
> DBG: cpu = 88053fd9fe68
> DBG: cpu id = 3
> 
> Previous read of size 1 by thread T509 (K506):
>  [< inlined>] cypress_send_ext_cmd+0x193/0x500
> cypress_ps2_read_cmd_status drivers/input/mouse/cypress_ps2.c:123
>  [] cypress_send_ext_cmd+0x193/0x500
> drivers/input/mouse/cypress_ps2.c:192
>  [] cypress_detect+0x2a/0xb0
> drivers/input/mouse/cypress_ps2.c:208
>  [] psmouse_extensions+0x1f6/0x4e0
> drivers/input/mouse/psmouse-base.c:849 (discriminator 1)
>  [] psmouse_switch_protocol+0x2ad/0x330
> drivers/input/mouse/psmouse-base.c:1467
>  [] psmouse_connect+0x2e6/0x450
> drivers/input/mouse/psmouse-base.c:1554 (discriminator 4)
>  [< inlined>] serio_driver_probe+0x57/0x80
> serio_connect_driver drivers/input/serio/serio.c:65
>  [] serio_driver_probe+0x57/0x80
> drivers/input/serio/serio.c:796
>  [< inlined>] driver_probe_device+0x1da/0x460 really_probe
> drivers/base/dd.c:308
>  [] driver_probe_device+0x1da/0x460 drivers/base/dd.c:414
>  [] __driver_attach+0xc4/0xd0 drivers/base/dd.c:612
>  [] bus_for_each_dev+0x93/0xe0 drivers/base/bus.c:314
>  [] driver_attach+0x33/0x50 drivers/base/dd.c:631
>  [< inlined>] serio_handle_event+0x2d3/0x3b0
> serio_attach_driver drivers/input/serio/serio.c:826
>  [] serio_handle_event+0x2d3/0x3b0
> drivers/input/serio/serio.c:245
>  [] process_one_work+0x2a9/0x6d0 kernel/workqueue.c:2036
>  [] worker_thread+0xbf/0x710 kernel/workqueue.c:2170
>  [] kthread+0x15c/0x180 kernel/kthread.c:207
>  [] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
> DBG: cpu = 0
> 
> DBG: addr: 88019d703909
> DBG: first offset: 1, second offset: 1
> DBG: T1 clock: {T1: 17075020, T509: 142163}
> DBG: T509 clock: {T509: 142167}
> ==
> 
> It seems that accessing 'psmouse->pktcnt' in
> 'psmouse->packet[psmouse->pktcnt++] = data' in 'psmouse_interrupt()'
> is racing with 'wait_event_timeout(ps2dev->wait, (psmouse->pktcnt >=
> pktsize), msecs_to_jiffies(CYTP_CMD_TIMEOUT))' in
> 'cypress_ps2_read_cmd_status()'.
> If that's the case, it's possible that 'psmouse->pktcnt' is
> incremented, but no data is written yet, so '(psmouse->pktcnt >=
> pktsize)' will evaluate to true and the following 'memcpy' will access
> invalid data.
> 
> Could you confirm if this is a real data race?

Yes, looks like real positive.

Thanks.

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to 

Fwd: Potential data race in psmouse_interrupt

2015-07-22 Thread Andrey Konovalov
Hi!

We are working on a dynamic data race detector for Linux kernel called
KernelThreadSanitizer (ktsan) (https://github.com/google/ktsan/wiki).

Here is a report we got while running ktsan (upstream revision
21bdb584af8cca7c6df3c44cba268be050a234eb).

==
ThreadSanitizer: data-race in psmouse_interrupt

Write of size 1 by thread T1 (K1):
 [] psmouse_interrupt+0xd2/0x690
drivers/input/mouse/psmouse-base.c:337
 [] serio_interrupt+0x66/0xb0 drivers/input/serio/serio.c:1008
 [] i8042_interrupt+0x240/0x4d0
drivers/input/serio/i8042.c:541
 [] handle_irq_event_percpu+0x62/0x2a0 kernel/irq/handle.c:143
 [] handle_irq_event+0xa2/0xf0 kernel/irq/handle.c:192
 [] handle_edge_irq+0x104/0x380 kernel/irq/chip.c:608
 [< inlined>] handle_irq+0xf6/0x220 generic_handle_irq_desc
include/linux/irqdesc.h:146
 [] handle_irq+0xf6/0x220 arch/x86/kernel/irq_64.c:81
 [] do_IRQ+0x5e/0x110 arch/x86/kernel/irq.c:223
 [] ret_from_intr+0x0/0x1f arch/x86/entry/entry_64.S:601
 [< inlined>] irq_exit+0x98/0xa0 invoke_softirq kernel/softirq.c:350
 [] irq_exit+0x98/0xa0 kernel/softirq.c:391
 [< inlined>] smp_apic_timer_interrupt+0x63/0x80 exiting_irq
./arch/x86/include/asm/apic.h:655
 [] smp_apic_timer_interrupt+0x63/0x80
arch/x86/kernel/apic/apic.c:915
 [] apic_timer_interrupt+0x6b/0x70
arch/x86/entry/entry_64.S:782
 [] kvasprintf+0x5d/0x90 lib/kasprintf.c:24
 [] kasprintf+0x4e/0x70 lib/kasprintf.c:40
 [< inlined>] module_add_driver+0x8f/0x180 make_driver_name
drivers/base/module.c:18
 [] module_add_driver+0x8f/0x180 drivers/base/module.c:63
 [] bus_add_driver+0x204/0x340 drivers/base/bus.c:713
 [] driver_register+0xdb/0x190 drivers/base/driver.c:168
 [] __hid_register_driver+0xb6/0x100
drivers/hid/hid-core.c:2677
 [] apple_driver_init+0x24/0x31 drivers/hid/hid-apple.c:574
 [] do_one_initcall+0xb9/0x220 init/main.c:798
 [< inlined>] kernel_init_freeable+0x2ca/0x397
do_initcall_level init/main.c:863
 [< inlined>] kernel_init_freeable+0x2ca/0x397 do_initcalls
init/main.c:871
 [< inlined>] kernel_init_freeable+0x2ca/0x397 do_basic_setup
init/main.c:890
 [] kernel_init_freeable+0x2ca/0x397 init/main.c:1013
 [] kernel_init+0x16/0x140 init/main.c:941
 [] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
DBG: cpu = 88053fd9fe68
DBG: cpu id = 3

Previous read of size 1 by thread T509 (K506):
 [< inlined>] cypress_send_ext_cmd+0x193/0x500
cypress_ps2_read_cmd_status drivers/input/mouse/cypress_ps2.c:123
 [] cypress_send_ext_cmd+0x193/0x500
drivers/input/mouse/cypress_ps2.c:192
 [] cypress_detect+0x2a/0xb0
drivers/input/mouse/cypress_ps2.c:208
 [] psmouse_extensions+0x1f6/0x4e0
drivers/input/mouse/psmouse-base.c:849 (discriminator 1)
 [] psmouse_switch_protocol+0x2ad/0x330
drivers/input/mouse/psmouse-base.c:1467
 [] psmouse_connect+0x2e6/0x450
drivers/input/mouse/psmouse-base.c:1554 (discriminator 4)
 [< inlined>] serio_driver_probe+0x57/0x80
serio_connect_driver drivers/input/serio/serio.c:65
 [] serio_driver_probe+0x57/0x80
drivers/input/serio/serio.c:796
 [< inlined>] driver_probe_device+0x1da/0x460 really_probe
drivers/base/dd.c:308
 [] driver_probe_device+0x1da/0x460 drivers/base/dd.c:414
 [] __driver_attach+0xc4/0xd0 drivers/base/dd.c:612
 [] bus_for_each_dev+0x93/0xe0 drivers/base/bus.c:314
 [] driver_attach+0x33/0x50 drivers/base/dd.c:631
 [< inlined>] serio_handle_event+0x2d3/0x3b0
serio_attach_driver drivers/input/serio/serio.c:826
 [] serio_handle_event+0x2d3/0x3b0
drivers/input/serio/serio.c:245
 [] process_one_work+0x2a9/0x6d0 kernel/workqueue.c:2036
 [] worker_thread+0xbf/0x710 kernel/workqueue.c:2170
 [] kthread+0x15c/0x180 kernel/kthread.c:207
 [] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
DBG: cpu = 0

DBG: addr: 88019d703909
DBG: first offset: 1, second offset: 1
DBG: T1 clock: {T1: 17075020, T509: 142163}
DBG: T509 clock: {T509: 142167}
==

It seems that accessing 'psmouse->pktcnt' in
'psmouse->packet[psmouse->pktcnt++] = data' in 'psmouse_interrupt()'
is racing with 'wait_event_timeout(ps2dev->wait, (psmouse->pktcnt >=
pktsize), msecs_to_jiffies(CYTP_CMD_TIMEOUT))' in
'cypress_ps2_read_cmd_status()'.
If that's the case, it's possible that 'psmouse->pktcnt' is
incremented, but no data is written yet, so '(psmouse->pktcnt >=
pktsize)' will evaluate to true and the following 'memcpy' will access
invalid data.

Could you confirm if this is a real data race?

Thanks in advance!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: Fwd: Potential data race in psmouse_interrupt

2015-07-22 Thread Dmitry Torokhov
On Wed, Jul 22, 2015 at 03:14:42PM +0200, Andrey Konovalov wrote:
 Hi!
 
 We are working on a dynamic data race detector for Linux kernel called
 KernelThreadSanitizer (ktsan) (https://github.com/google/ktsan/wiki).
 
 Here is a report we got while running ktsan (upstream revision
 21bdb584af8cca7c6df3c44cba268be050a234eb).
 
 ==
 ThreadSanitizer: data-race in psmouse_interrupt
 
 Write of size 1 by thread T1 (K1):
  [819d5272] psmouse_interrupt+0xd2/0x690
 drivers/input/mouse/psmouse-base.c:337
  [819bcd16] serio_interrupt+0x66/0xb0 
 drivers/input/serio/serio.c:1008
  [819be5f0] i8042_interrupt+0x240/0x4d0
 drivers/input/serio/i8042.c:541
  [810f03b2] handle_irq_event_percpu+0x62/0x2a0 
 kernel/irq/handle.c:143
  [810f0692] handle_irq_event+0xa2/0xf0 kernel/irq/handle.c:192
  [810f5414] handle_edge_irq+0x104/0x380 kernel/irq/chip.c:608
  [ inlined] handle_irq+0xf6/0x220 generic_handle_irq_desc
 include/linux/irqdesc.h:146
  [81009f86] handle_irq+0xf6/0x220 arch/x86/kernel/irq_64.c:81
  [810093ce] do_IRQ+0x5e/0x110 arch/x86/kernel/irq.c:223
  [81e726ab] ret_from_intr+0x0/0x1f arch/x86/entry/entry_64.S:601
  [ inlined] irq_exit+0x98/0xa0 invoke_softirq kernel/softirq.c:350
  [8108edd8] irq_exit+0x98/0xa0 kernel/softirq.c:391
  [ inlined] smp_apic_timer_interrupt+0x63/0x80 exiting_irq
 ./arch/x86/include/asm/apic.h:655
  [8105c503] smp_apic_timer_interrupt+0x63/0x80
 arch/x86/kernel/apic/apic.c:915
  [81e7299b] apic_timer_interrupt+0x6b/0x70
 arch/x86/entry/entry_64.S:782
  [8153223d] kvasprintf+0x5d/0x90 lib/kasprintf.c:24
  [815322be] kasprintf+0x4e/0x70 lib/kasprintf.c:40
  [ inlined] module_add_driver+0x8f/0x180 make_driver_name
 drivers/base/module.c:18
  [8183059f] module_add_driver+0x8f/0x180 drivers/base/module.c:63
  [81812c94] bus_add_driver+0x204/0x340 drivers/base/bus.c:713
  [81814e2b] driver_register+0xdb/0x190 drivers/base/driver.c:168
  [81a5ed16] __hid_register_driver+0xb6/0x100
 drivers/hid/hid-core.c:2677
  [825ab67d] apple_driver_init+0x24/0x31 drivers/hid/hid-apple.c:574
  [81000339] do_one_initcall+0xb9/0x220 init/main.c:798
  [ inlined] kernel_init_freeable+0x2ca/0x397
 do_initcall_level init/main.c:863
  [ inlined] kernel_init_freeable+0x2ca/0x397 do_initcalls
 init/main.c:871
  [ inlined] kernel_init_freeable+0x2ca/0x397 do_basic_setup
 init/main.c:890
  [8253d919] kernel_init_freeable+0x2ca/0x397 init/main.c:1013
  [81e5ad66] kernel_init+0x16/0x140 init/main.c:941
  [81e71f5f] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
 DBG: cpu = 88053fd9fe68
 DBG: cpu id = 3
 
 Previous read of size 1 by thread T509 (K506):
  [ inlined] cypress_send_ext_cmd+0x193/0x500
 cypress_ps2_read_cmd_status drivers/input/mouse/cypress_ps2.c:123
  [819e6b23] cypress_send_ext_cmd+0x193/0x500
 drivers/input/mouse/cypress_ps2.c:192
  [819e6f5a] cypress_detect+0x2a/0xb0
 drivers/input/mouse/cypress_ps2.c:208
  [819d5e66] psmouse_extensions+0x1f6/0x4e0
 drivers/input/mouse/psmouse-base.c:849 (discriminator 1)
  [819d63fd] psmouse_switch_protocol+0x2ad/0x330
 drivers/input/mouse/psmouse-base.c:1467
  [819d7426] psmouse_connect+0x2e6/0x450
 drivers/input/mouse/psmouse-base.c:1554 (discriminator 4)
  [ inlined] serio_driver_probe+0x57/0x80
 serio_connect_driver drivers/input/serio/serio.c:65
  [819bcf77] serio_driver_probe+0x57/0x80
 drivers/input/serio/serio.c:796
  [ inlined] driver_probe_device+0x1da/0x460 really_probe
 drivers/base/dd.c:308
  [81813b1a] driver_probe_device+0x1da/0x460 drivers/base/dd.c:414
  [81813e64] __driver_attach+0xc4/0xd0 drivers/base/dd.c:612
  [81810933] bus_for_each_dev+0x93/0xe0 drivers/base/bus.c:314
  [81813353] driver_attach+0x33/0x50 drivers/base/dd.c:631
  [ inlined] serio_handle_event+0x2d3/0x3b0
 serio_attach_driver drivers/input/serio/serio.c:826
  [819bd8e3] serio_handle_event+0x2d3/0x3b0
 drivers/input/serio/serio.c:245
  [810adcf9] process_one_work+0x2a9/0x6d0 kernel/workqueue.c:2036
  [810aeddf] worker_thread+0xbf/0x710 kernel/workqueue.c:2170
  [810b700c] kthread+0x15c/0x180 kernel/kthread.c:207
  [81e71f5f] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
 DBG: cpu = 0
 
 DBG: addr: 88019d703909
 DBG: first offset: 1, second offset: 1
 DBG: T1 clock: {T1: 17075020, T509: 142163}
 DBG: T509 clock: {T509: 142167}
 ==
 
 It seems that accessing 'psmouse-pktcnt' in
 'psmouse-packet[psmouse-pktcnt++] = data' in 'psmouse_interrupt()'
 is racing with 'wait_event_timeout(ps2dev-wait, (psmouse-pktcnt =
 pktsize), 

Fwd: Potential data race in psmouse_interrupt

2015-07-22 Thread Andrey Konovalov
Hi!

We are working on a dynamic data race detector for Linux kernel called
KernelThreadSanitizer (ktsan) (https://github.com/google/ktsan/wiki).

Here is a report we got while running ktsan (upstream revision
21bdb584af8cca7c6df3c44cba268be050a234eb).

==
ThreadSanitizer: data-race in psmouse_interrupt

Write of size 1 by thread T1 (K1):
 [819d5272] psmouse_interrupt+0xd2/0x690
drivers/input/mouse/psmouse-base.c:337
 [819bcd16] serio_interrupt+0x66/0xb0 drivers/input/serio/serio.c:1008
 [819be5f0] i8042_interrupt+0x240/0x4d0
drivers/input/serio/i8042.c:541
 [810f03b2] handle_irq_event_percpu+0x62/0x2a0 kernel/irq/handle.c:143
 [810f0692] handle_irq_event+0xa2/0xf0 kernel/irq/handle.c:192
 [810f5414] handle_edge_irq+0x104/0x380 kernel/irq/chip.c:608
 [ inlined] handle_irq+0xf6/0x220 generic_handle_irq_desc
include/linux/irqdesc.h:146
 [81009f86] handle_irq+0xf6/0x220 arch/x86/kernel/irq_64.c:81
 [810093ce] do_IRQ+0x5e/0x110 arch/x86/kernel/irq.c:223
 [81e726ab] ret_from_intr+0x0/0x1f arch/x86/entry/entry_64.S:601
 [ inlined] irq_exit+0x98/0xa0 invoke_softirq kernel/softirq.c:350
 [8108edd8] irq_exit+0x98/0xa0 kernel/softirq.c:391
 [ inlined] smp_apic_timer_interrupt+0x63/0x80 exiting_irq
./arch/x86/include/asm/apic.h:655
 [8105c503] smp_apic_timer_interrupt+0x63/0x80
arch/x86/kernel/apic/apic.c:915
 [81e7299b] apic_timer_interrupt+0x6b/0x70
arch/x86/entry/entry_64.S:782
 [8153223d] kvasprintf+0x5d/0x90 lib/kasprintf.c:24
 [815322be] kasprintf+0x4e/0x70 lib/kasprintf.c:40
 [ inlined] module_add_driver+0x8f/0x180 make_driver_name
drivers/base/module.c:18
 [8183059f] module_add_driver+0x8f/0x180 drivers/base/module.c:63
 [81812c94] bus_add_driver+0x204/0x340 drivers/base/bus.c:713
 [81814e2b] driver_register+0xdb/0x190 drivers/base/driver.c:168
 [81a5ed16] __hid_register_driver+0xb6/0x100
drivers/hid/hid-core.c:2677
 [825ab67d] apple_driver_init+0x24/0x31 drivers/hid/hid-apple.c:574
 [81000339] do_one_initcall+0xb9/0x220 init/main.c:798
 [ inlined] kernel_init_freeable+0x2ca/0x397
do_initcall_level init/main.c:863
 [ inlined] kernel_init_freeable+0x2ca/0x397 do_initcalls
init/main.c:871
 [ inlined] kernel_init_freeable+0x2ca/0x397 do_basic_setup
init/main.c:890
 [8253d919] kernel_init_freeable+0x2ca/0x397 init/main.c:1013
 [81e5ad66] kernel_init+0x16/0x140 init/main.c:941
 [81e71f5f] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
DBG: cpu = 88053fd9fe68
DBG: cpu id = 3

Previous read of size 1 by thread T509 (K506):
 [ inlined] cypress_send_ext_cmd+0x193/0x500
cypress_ps2_read_cmd_status drivers/input/mouse/cypress_ps2.c:123
 [819e6b23] cypress_send_ext_cmd+0x193/0x500
drivers/input/mouse/cypress_ps2.c:192
 [819e6f5a] cypress_detect+0x2a/0xb0
drivers/input/mouse/cypress_ps2.c:208
 [819d5e66] psmouse_extensions+0x1f6/0x4e0
drivers/input/mouse/psmouse-base.c:849 (discriminator 1)
 [819d63fd] psmouse_switch_protocol+0x2ad/0x330
drivers/input/mouse/psmouse-base.c:1467
 [819d7426] psmouse_connect+0x2e6/0x450
drivers/input/mouse/psmouse-base.c:1554 (discriminator 4)
 [ inlined] serio_driver_probe+0x57/0x80
serio_connect_driver drivers/input/serio/serio.c:65
 [819bcf77] serio_driver_probe+0x57/0x80
drivers/input/serio/serio.c:796
 [ inlined] driver_probe_device+0x1da/0x460 really_probe
drivers/base/dd.c:308
 [81813b1a] driver_probe_device+0x1da/0x460 drivers/base/dd.c:414
 [81813e64] __driver_attach+0xc4/0xd0 drivers/base/dd.c:612
 [81810933] bus_for_each_dev+0x93/0xe0 drivers/base/bus.c:314
 [81813353] driver_attach+0x33/0x50 drivers/base/dd.c:631
 [ inlined] serio_handle_event+0x2d3/0x3b0
serio_attach_driver drivers/input/serio/serio.c:826
 [819bd8e3] serio_handle_event+0x2d3/0x3b0
drivers/input/serio/serio.c:245
 [810adcf9] process_one_work+0x2a9/0x6d0 kernel/workqueue.c:2036
 [810aeddf] worker_thread+0xbf/0x710 kernel/workqueue.c:2170
 [810b700c] kthread+0x15c/0x180 kernel/kthread.c:207
 [81e71f5f] ret_from_fork+0x3f/0x70 arch/x86/entry/entry_64.S:526
DBG: cpu = 0

DBG: addr: 88019d703909
DBG: first offset: 1, second offset: 1
DBG: T1 clock: {T1: 17075020, T509: 142163}
DBG: T509 clock: {T509: 142167}
==

It seems that accessing 'psmouse-pktcnt' in
'psmouse-packet[psmouse-pktcnt++] = data' in 'psmouse_interrupt()'
is racing with 'wait_event_timeout(ps2dev-wait, (psmouse-pktcnt =
pktsize), msecs_to_jiffies(CYTP_CMD_TIMEOUT))' in
'cypress_ps2_read_cmd_status()'.
If that's the case, it's possible that 'psmouse-pktcnt' is
incremented, but no data is written yet, so '(psmouse-pktcnt =