Вы можете использовать левое соединение и добавить условие фильтра в предложении ON
select d.date,a.entry,a.exit
from DATES d
left join ATTENDANCE a on a.date = d.date
and d.name = 'Bob' and MONTH (d.date) = MONTH('2019-01-01')
, а затем использовать условие, примененное к столбцу, относящемуся к левой объединенной таблице, в качестве внутреннего соединения ... в этом случае переместить эти условия в п.
Короткий ответ: код Ядра может использовать плавающую точку, если это использование окружается kernel_fpu_begin()
/kernel_fpu_end()
. Они сохранение указателя на функцию и восстановление fpu контекста. Кроме того, они звонят preempt_disable()
/preempt_enable()
, что не означает сна, отсутствия страницы и т.д. в коде между теми функциями. Google имена функций для получения дополнительной информации.
Если я понимаю правильно, каждый раз, когда KM работает, он использует аппаратный контекст (или аппаратный поток или набор регистров - независимо от того, что Вы хотите назвать его), который был вытеснен от некоторого потока приложения.
Нет, модуль ядра может работать в пользовательском контексте также (например, когда пространство пользователя называет syscalls на устройстве обеспеченным KM). Это не имеет, однако, никакого отношения к проблеме плавающей.
Если Вы запишете свой KM в c, то компилятор правильно обеспечит, чтобы регистры общего назначения были правильно сохранены и восстановлены (как в приложении), но этого автоматически не происходит с регистрами с плавающей точкой.
Это не из-за компилятора, но из-за кода контекстного переключения ядра.
Ответ Линуса предоставляет эту довольно четкую цитату для использования в качестве ориентира:
Другими словами: правило состоит в том, что вам действительно не следует использовать FP в ядре.