{"id":549,"date":"2016-09-23T22:08:58","date_gmt":"2016-09-23T20:08:58","guid":{"rendered":"http:\/\/blog.pi3.com.pl\/?p=549"},"modified":"2016-09-23T22:08:58","modified_gmt":"2016-09-23T20:08:58","slug":"linux-kernel-ipi-problem","status":"publish","type":"post","link":"https:\/\/blog.pi3.com.pl\/?p=549","title":{"rendered":"Linux kernel IPI problem"},"content":{"rendered":"<p>Linux kernel programming is always a challenge. Especially, when you are playing with very low-level functionality (like manually sending IPI between the CPUs\/cores). Unfortunately, this specific functionality kept making troubles for me for a couple of weeks and I haven&#8217;t found ANY information on the internet regarding the issue which I hit\/met. That&#8217;s why I decided it could be useful for other people if I describe my journey with the APIs like smp_call_function_single() \/ on_each_cpu(), NMI watchdog which can kill correct task and do not inform about problematic CPU\/core etc. I&#8217;ve been discussing this issue with Alexander (Solar Designer) and he has started a discussion about that on Linux Kernel Mailing List (LKML) which you can find here:<\/p>\n<p><a href=\"http:\/\/lkml.iu.edu\/hypermail\/linux\/kernel\/1609.2\/03265.html\" target=\"_blank\">http:\/\/lkml.iu.edu\/hypermail\/linux\/kernel\/1609.2\/03265.html<\/a><\/p>\n<p>Thanks,<br \/>\nAdam<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Linux kernel programming is always a challenge. Especially, when you are playing with very low-level functionality (like manually sending IPI between the CPUs\/cores). Unfortunately, this specific functionality kept making troubles for me for a couple of weeks and I haven&#8217;t found ANY information on the internet regarding the issue which I hit\/met. That&#8217;s why I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,6],"tags":[],"class_list":["post-549","post","type-post","status-publish","format-standard","hentry","category-bughunt","category-ideas"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/posts\/549","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=549"}],"version-history":[{"count":1,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/posts\/549\/revisions"}],"predecessor-version":[{"id":550,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=\/wp\/v2\/posts\/549\/revisions\/550"}],"wp:attachment":[{"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.pi3.com.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}