В архитектурах SMP кэшируемые значения не обновляются для всех ядер, поэтому поток в другом ядре может использовать устаревшее значение.
Другая проблема, с которой вы можете столкнуться, - это одновременный доступ между потоками, что означает, что Поток 1 прочитал x, прежде чем Поток 2 смог записать x, но Поток 2 продолжил и сказал x = 10, но Поток 1 все еще использует старое значение, когда x был неинициализирован.
Способ решения второй проблемы (которая представляется более вероятной) состоит в использовании блокировки для контроля доступа к этой переменной, чтобы только 1 поток мог изменять / читать ее одновременно, чтобы избежать проблем с устаревшими значениями.
(Не аппаратный модуль ядра, поэтому не используйте volatile; P) используйте предложенные ниже значения smp_wb и smp_rb.
РЕДАКТИРОВАТЬ: Похоже, мое первое предложение было правильным. Так что для решения этой проблемы вы можете использовать smp_wb для x перед выполнением kmalloc и присваивания. Затем барьер для чтения на х, прежде чем пытаться напечатать значение х. Это фактически говорит ЦП о прочтении нового значения, поскольку оно может быть некорректным или могло быть переупорядочено при доступе. Возможно, вы сможете просто использовать барьер для чтения в другом потоке, но для безопасности используйте барьеры, где осуществляется доступ.