Crash when using DCC / i2c

When using the tool

ddccontrol -r 0x?? -w <VAL> phy:/dev/i2c-0

in rapid successions you get errors. When you wait 1 second between each command, the issue seems to be reduced.
Note: it might have occurred 2 i2c commands where active at the same time.

Afterwards (even when the tool is not running) you can get minor freezes of 1 sec quite often.
The kernel also spits out a lot of errors when the issues occur.

NVRM: os_schedule: Attempted to yield the CPU while in atomic or interrupt context

I’ve even had a case practically freezing my system:

Aug 04 14:04:15 [kernel]  [<ffffffff8106f555>] ? arch_trigger_all_cpu_backtrace+0x55/0x70
Aug 04 14:04:15 [kernel]  [<ffffffff810d9083>] ? rcu_check_callbacks+0x3e3/0x610
Aug 04 14:04:15 [kernel]  [<ffffffff810e3300>] ? tick_nohz_handler+0xa0/0xa0
Aug 04 14:04:15 [kernel]  [<ffffffff81091f8f>] ? update_process_times+0x3f/0x80
Aug 04 14:04:15 [kernel]  [<ffffffff810e3250>] ? tick_sched_handle.isra.13+0x30/0x40
Aug 04 14:04:15 [kernel]  [<ffffffff810e3300>] ? tick_nohz_handler+0xa0/0xa0
Aug 04 14:04:15 [kernel]  [<ffffffff810e3342>] ? tick_sched_timer+0x42/0x70
Aug 04 14:04:15 [kernel]  [<ffffffff810a6c92>] ? __run_hrtimer+0x52/0x170
Aug 04 14:04:15 [kernel]  [<ffffffff810a76a1>] ? hrtimer_interrupt+0xf1/0x220
Aug 04 14:04:15 [kernel]  [<ffffffff8106de36>] ? smp_apic_timer_interrupt+0x36/0x50
Aug 04 14:04:15 [kernel]  [<ffffffff816fcd4a>] ? apic_timer_interrupt+0x6a/0x70
Aug 04 14:04:15 [kernel]  <EOI>
Aug 04 14:04:15 [kernel]  [<ffffffffa0f31630>] ? _nv014535rm+0x30/0x30 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f27870>] ? _nv014562rm+0x7b0/0x800 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0dc767a>] ? _nv008155rm+0x35a/0x450 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0dc7578>] ? _nv008155rm+0x258/0x450 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0dc741b>] ? _nv008155rm+0xfb/0x450 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0dc73f9>] ? _nv008155rm+0xd9/0x450 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f2cd04>] ? _nv014435rm+0xc4/0x130 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0eb1466>] ? _nv013092rm+0xa6/0xb0 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0eb0eae>] ? _nv013093rm+0x24e/0x260 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa1016f05>] ? _nv014991rm+0x75/0x120 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f2cdb4>] ? _nv014416rm+0x44/0x70 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f32228>] ? _nv014614rm+0x18/0xc0 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f33fcd>] ? _nv014616rm+0x11d/0x220 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0e97afe>] ? _nv012096rm+0x1fe/0x300 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f25198>] ? _nv011268rm+0x748/0xa30 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f24910>] ? _nv011261rm+0xc0/0x100 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa0f2489c>] ? _nv011261rm+0x4c/0x100 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffffa10538f5>] ? rm_i2c_transfer+0x325/0x490 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffff810bc301>] ? pick_next_task_fair+0xb1/0x3f0
Aug 04 14:04:15 [kernel]  [<ffffffffa1063c34>] ? nv_i2c_algo_master_xfer+0xa4/0x140 [nvidia]
Aug 04 14:04:15 [kernel]  [<ffffffff814d8d63>] ? __i2c_transfer+0x63/0x1d0
Aug 04 14:04:15 [kernel]  [<ffffffff810bc535>] ? pick_next_task_fair+0x2e5/0x3f0
Aug 04 14:04:15 [kernel]  [<ffffffff814daee7>] ? i2c_transfer+0x57/0xa0
Aug 04 14:04:15 [kernel]  [<ffffffff8113d59f>] ? memdup_user+0x3f/0x90
Aug 04 14:04:15 [kernel]  [<ffffffff814dd84e>] ? i2cdev_ioctl_rdrw.isra.5+0x11e/0x250
Aug 04 14:04:15 [kernel]  [<ffffffff814ddaac>] ? i2cdev_ioctl+0x12c/0x1b0
Aug 04 14:04:15 [kernel]  [<ffffffff8104eb55>] ? syscall_trace_leave+0xa5/0x190
Aug 04 14:04:15 [kernel]  [<ffffffff811856de>] ? do_vfs_ioctl+0x7e/0x500
Aug 04 14:04:15 [kernel]  [<ffffffff810b5246>] ? vtime_account_user+0x36/0x50
Aug 04 14:04:15 [kernel]  [<ffffffff81185ba7>] ? SyS_ioctl+0x47/0xa0
Aug 04 14:04:15 [kernel]  [<ffffffff816fc1be>] ? tracesys+0x71/0xd9
Aug 04 14:04:15 [kernel]  [<ffffffff816fc221>] ? tracesys+0xd4/0xd9

nvidia-bug-report.log.gz (82.7 KB)

Also the minor freezes seem to be trigger by IRQ requests, since kworker goes to 100% for a while.

I think this is the stack of a mini-freeze. but can’t be certain.

Aug 04 10:50:43 [kernel]  [<ffffffffa049a9c6>] ? _nv012096rm+0xc6/0x300 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa04e872d>] ? _nv003788rm+0x46d/0x20a0 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa04e8bae>] ? _nv003788rm+0x8ee/0x20a0 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa049ff6d>] ? _nv012182rm+0x1cd/0x5f0 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa048d6ce>] ? _nv012132rm+0x9e/0x160 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa0481219>] ? _nv011803rm+0x159/0x1b0 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa0480ecd>] ? _nv012172rm+0xe4d/0x1040 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa0480b32>] ? _nv012172rm+0xab2/0x1040 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa05af8c7>] ? _nv016835rm+0x227/0x3a0 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa05afa68>] ? _nv016838rm+0x28/0x80 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa049a454>] ? _nv001295rm+0x194/0x240 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa047f337>] ? _nv012088rm+0x47/0x70 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa0650535>] ? _nv000791rm+0x105/0x140 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffffa06551e3>] ? rm_isr_bh+0x23/0x70 [nvidia]
Aug 04 10:50:43 [kernel]  [<ffffffff8108a527>] ? tasklet_action+0xa7/0xb0
Aug 04 10:50:43 [kernel]  [<ffffffff81089d1e>] ? __do_softirq+0xee/0x2d0
Aug 04 10:50:43 [kernel]  [<ffffffff8108a11e>] ? irq_exit+0x9e/0xc0
Aug 04 10:50:43 [kernel]  [<ffffffff81043101>] ? do_IRQ+0x61/0x100
Aug 04 10:50:43 [kernel]  [<ffffffff816fb9aa>] ? common_interrupt+0x6a/0x6a
Aug 04 10:50:43 [kernel]  <EOI> 
Aug 04 10:50:43 [kernel]  [<ffffffff8104a950>] ? arch_remove_reservations+0x130/0x130
Aug 04 10:50:43 [kernel]  [<ffffffff8104a965>] ? default_idle+0x15/0xb0
Aug 04 10:50:43 [kernel]  [<ffffffff810c1b3f>] ? cpu_startup_entry+0x1df/0x380

Asked a online friend of me to try ddcontrol -p, it crashed his driver/pc not to long after that:

Kernel/Driver info:
Linux jomppa-arch 3.15.8-1-ARCH #1 SMP PREEMPT Fri Aug 1 08:51:42 CEST 2014 x86_64 GNU/Linux
version 340.24