Вы задали много вопросов, я постараюсь ответить на них по порядку:
Нет, как правило, не существует простого способа отключить все прерывания на всех процессорах вокруг раздела кода. Но вам редко нужно это делать. В большинстве случаев все, что вам нужно, это предотвратить выполнение кода на другом процессоре, а также предотвратить прерывания на текущем процессоре. Это может быть достигнуто с помощью spin_lock_irqsave ().
Чтобы изменить регистр, вам обычно не нужно выполнять какую-либо блокировку, вы можете изменить регистр атомарно. Если вы хотите изменить регистр, сделать что-то, а затем изменить регистр обратно, вам может потребоваться отключить прерывания вокруг этой последовательности.
Как правило, нет возможности увидеть регистры другого процессора в системе. Ядро делает это, чтобы попросить другой процессор сохранить свои регистры в памяти.
Следует опасаться, что на современных процессорах некоторые регистры могут быть на ядро, т.е. общий для нескольких потоков в ядре.
Наконец, я предполагаю, что вы говорите о CR0
на x86. Это не похоже на изменение какого-либо старого регистра, вам нужно действительно знать, что вы делаете: -)