2015-02-17 3 views
2

В Kernel \ включить \ Linux \ compiler.h__context__ атрибут в ядре Linux

#define __acquire(x) __context__(x,1) 
#define __release(x) __context__(x,-1) 

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

+0

[редкий] контекст «проверка» (http://lwn.net/Articles/109066/) –

+0

спасибо за помощь, он помогает мне заключить некоторые для моей платформы. –

ответ

0

Как от http://linux.die.net/man/1/sparse:

-Wcontext предупреждающий о возможных ошибках в синхронизации или других контекстах разделителей. Sparse поддерживает несколько способов назначения функций или операторов, которые ограничивают контексты, такие как синхронизации. Функции с расширенным атрибутом атрибут ((context (выражение, in_context, out_context)) требуют, чтобы контекстное выражение (например, блокировка) имело значение при вызове вызываемого значения in_context (постоянное неотрицательное целое число) и возвращалось с помощью значение out_context (константа неотрицательное целое число). Для API, определенные с помощью макросов , используйте форму заявление контекст (выражение, in_value, out_value) в теле макрокоманды.

с -Wcontext Sparse будет предупреждать, когда он видит, что функция меняет контекст без указания этого атрибута контекста, либо на , уменьшая контекст ниже нуля (например, освобождая блокировку без , приобретая ее) или возвращаясь с измененным контекстом (например, приобретает блокировку без ее освобождения). Sparse также предупреждает о блоках кода, которые могут потенциально выполняться в разных контекстах.

Разрешения по умолчанию разрешены по умолчанию. Чтобы отключить их, используйте -Wno-context.

Смежные вопросы