Что означает код возврата ядра macOS 28 (KERN_INVALID_POLICY)?

 
Также может означать:
КонстантаТипОС
ERROR_OUT_OF_PAPERОшибка WindowsWindows
ippStsAffineQuadChangedСтатус Intel IPPЛюбая
ENOSPCerrnoЛюбая
PFN_REFERENCE_COUNTКод BSODWindows
Предыдущий Следующий
KERN_POLICY_LIMIT KERN_INVALID_OBJECT

KERN_INVALID_POLICY

Политика недоступна в этом контексте

KERN_INVALID_POLICY — это результат планировщика Mach, а не указание на повреждённый указатель на данные политики. Объявление в kern_return.h описывает политику планирования, которая сейчас не включена для контекста набора процессоров. В современном коде XNU тот же результат также используется, когда потоку запрещено переходить в запрошенный режим реального времени или отключены наборы привязки.

Поэтому разновидность политики является важнейшей диагностической информацией. Запрос, допустимый в одной системе, для одного класса потоков или контекста рабочей нагрузки, может оказаться недоступным в другом без каких-либо изменений структуры.

Два конкретных контекста политики

  • THREAD_TIME_CONSTRAINT_POLICY запрашивает параметры планирования реального времени. Современная XNU отклоняет такой запрос с KERN_INVALID_POLICY, если поток входит в рабочий интервал с идентификатором нагрузки, который не разрешает работу в реальном времени.
  • THREAD_AFFINITY_POLICY помечена в заголовке XNU как экспериментальная. Она задаёт отношение привязки между потоками; совпадающие метки являются лишь подсказкой планировщику по возможности использовать общий кэш L2. Это не запрос на закрепление потока за определённым процессором, и при отключённых наборах привязки XNU возвращает KERN_INVALID_POLICY.

Отделяйте недоступность от неверных входных данных

РезультатНа что он указывает
KERN_INVALID_POLICYПолитику нельзя применить в текущем контексте планирования целевого объекта.
KERN_POLICY_LIMITЗапрошенные атрибуты превышают ограничение, хотя сама политика применима.
KERN_INVALID_ARGUMENTНарушен контракт вызова: например, недопустимы целевой объект, разновидность, количество или значение поля.
KERN_NOT_SUPPORTEDВыбранная возможность не поддерживается текущей платформой или реализацией.

Полезные данные для исследования

  • Запишите разновидность политики и всю её структуру, а не только числовое возвращаемое значение.
  • Определите, является ли целью вызывающий или другой поток, а также присоединился ли он к рабочему интервалу и имеет ли уже действующую политику QoS.
  • Для привязки уточните ожидаемый результат. Метки кэш-привязки задают рекомендательные отношения, а не переносимый механизм закрепления за процессором.
  • Перед повторным запросом режима реального времени проверьте временную модель. Данные политики задают период, время вычисления и ограничение в единицах абсолютного времени, причём ограничение не должно быть меньше времени вычисления.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.