Можно ли определить, в каком режиме (EL1, EL0, ...) было вызвано прерывание SError? - PullRequest
0 голосов
/ 26 ноября 2018

Как я знаю, есть отдельные векторы для обработки SError, вызванные EL0 и EL1.

Мой квест состоит в следующем:

В связи с тем, что SError является асинхронным, могу ли я полагаться на то, чтоесли процессор ввел serror_el1_vector для обработки SError, то SError был вызван именно в EL1 (не в EL0, EL2, EL3), а если процессор введен serror_el0_vector , то SError был точно вызван в EL0?Другое слово, возможно ли следующее:

  1. EL0:

1.1.неправильный доступ к некоторому регистру устройства (например, запись в регистр RO), который вызывает прерывание SError.Такой доступ не генерирует ошибку доступа сразу, но в какой-то момент позже, когда транзакция AXI действительно произошла, система памяти возвращает ошибку, которая сообщается как асинхронное прерывание.

1.2.Ошибка еще не сгенерирована, и у пользователя есть время, чтобы svc ввести EL1

EL1:

2.1.Теперь процессор в режиме EL1 перешел на шаг 1.2

2.2.SError, вызванный шагом 1.1, в конце концов сгенерирован, но теперь процессор в EL1, а не в EL0, поэтому в какой процессор будет входить векторный процессор для обработки SError: serror_el1_vector или serror_el0_vector ?Потому что изначально неправильный доступ был вызван в EL0, но теперь процессор в состоянии EL1.

Заранее спасибо!

1 Ответ

0 голосов
/ 26 ноября 2018

Могу ли я определить, из какого режима (EL1, EL0,…) было вызвано прерывание SError?

Нет, если у вас нет более строгих гарантий, чем те, которые указаны в архитектуре ARMСправочное руководство .
Проблема в том, что почти все определяется реализацией.

Для начала, похоже, нет гарантии, что SError даже вызван PE.Страница D1-2198:

Внешнее прерывание, генерируемое системой памяти, может быть выполнено асинхронно с использованием прерывания SError.Эти прерывания SError всегда ведут себя как прерывания, инициируемые фронтом.Реализация может включать другие источники прерывания SError.

Таким образом, вполне возможно, что источник SError может быть вне кристалла.
Кроме того, в многоядерной системе, кажется, ничто не мешаетвозможность ядра 1 выдавать запись, которая приводит к SError, которая впоследствии отправляется ядру 2.

Далее, давайте посмотрим, какую информацию несет SError.Страница D1-2170:

Если исключение является синхронным исключением или прерыванием SError, информация, характеризующая причину исключения, сохраняется в ESR_ELx на целевом уровне исключения.

Глядя на ESR_EL1 на стр. D12-2798:

IDS, бит [24]
Синдром РЕАЛИЗАЦИЯ ОПРЕДЕЛЕН.Возможные значения этого бита:

  • 0b0
    Биты [23: 0] поля ISS содержат поля, описанные в этой кодировке.
    ---------- Примечание ----------
    Если расширение RAS не реализовано, это означает, что биты [23: 0] поля ISS равны RES0.
    --------------------------
  • 0b1
    Биты [23: 0] поля ISS содержат информацию о синдроме IMPLEMENTATION DEFINED, которую можно использовать для предоставления дополнительныхинформация о прерывании SError.

Таким образом, PE может реализовать настраиваемую конфигурацию регистра, которая предоставляет информацию, которую вы ищете, но опять же: это определено реализацией.

Также это выходит за рамки спецификации PE, но возможно, что система памяти предоставляет способ восстановить источник ошибки SError.

Итог: реализация всего определена, поэтому обратитесь кРуководство по вашему конкретному оборудованию.

...