include/linux/hwspinlock.h
Source file repositories/reference/linux-study-clean/include/linux/hwspinlock.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/hwspinlock.h- Extension
.h- Size
- 14660 bytes
- Lines
- 421
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/err.hlinux/sched.h
Detected Declarations
struct devicestruct device_nodestruct hwspinlockstruct hwspinlock_devicestruct hwspinlock_opsfunction failfunction hwspin_lock_freefunction __hwspin_lock_timeoutfunction __hwspin_trylockfunction __hwspin_unlockfunction of_hwspin_lock_get_idfunction of_hwspin_lock_get_id_bynamefunction devm_hwspin_lock_freefunction hwspin_trylock_irqsavefunction hwspin_trylock_irqfunction hwspin_trylock_rawfunction hwspin_trylock_in_atomicfunction hwspin_trylockfunction hwspin_lock_timeout_irqsavefunction hwspin_lock_timeout_irqfunction hwspin_lock_timeout_rawfunction hwspin_lock_timeout_in_atomicfunction hwspin_lock_timeoutfunction hwspin_unlock_irqrestorefunction hwspin_unlock_irqfunction hwspin_unlock_rawfunction hwspin_unlock_in_atomicfunction hwspin_unlock
Annotated Snippet
#ifndef __LINUX_HWSPINLOCK_H
#define __LINUX_HWSPINLOCK_H
#include <linux/err.h>
#include <linux/sched.h>
/* hwspinlock mode argument */
#define HWLOCK_IRQSTATE 0x01 /* Disable interrupts, save state */
#define HWLOCK_IRQ 0x02 /* Disable interrupts, don't save state */
#define HWLOCK_RAW 0x03
#define HWLOCK_IN_ATOMIC 0x04 /* Called while in atomic context */
struct device;
struct device_node;
struct hwspinlock;
struct hwspinlock_device;
struct hwspinlock_ops;
#ifdef CONFIG_HWSPINLOCK
int hwspin_lock_register(struct hwspinlock_device *bank, struct device *dev,
const struct hwspinlock_ops *ops, int base_id, int num_locks);
int hwspin_lock_unregister(struct hwspinlock_device *bank);
struct hwspinlock *hwspin_lock_request_specific(unsigned int id);
int hwspin_lock_free(struct hwspinlock *hwlock);
int of_hwspin_lock_get_id(struct device_node *np, int index);
int __hwspin_lock_timeout(struct hwspinlock *, unsigned int, int,
unsigned long *);
int __hwspin_trylock(struct hwspinlock *, int, unsigned long *);
void __hwspin_unlock(struct hwspinlock *, int, unsigned long *);
int of_hwspin_lock_get_id_byname(struct device_node *np, const char *name);
int hwspin_lock_bust(struct hwspinlock *hwlock, unsigned int id);
int devm_hwspin_lock_free(struct device *dev, struct hwspinlock *hwlock);
struct hwspinlock *devm_hwspin_lock_request_specific(struct device *dev,
unsigned int id);
int devm_hwspin_lock_unregister(struct device *dev,
struct hwspinlock_device *bank);
int devm_hwspin_lock_register(struct device *dev,
struct hwspinlock_device *bank,
const struct hwspinlock_ops *ops,
int base_id, int num_locks);
#else /* !CONFIG_HWSPINLOCK */
/*
* We don't want these functions to fail if CONFIG_HWSPINLOCK is not
* enabled. We prefer to silently succeed in this case, and let the
* code path get compiled away. This way, if CONFIG_HWSPINLOCK is not
* required on a given setup, users will still work.
*
* The only exception is hwspin_lock_register/hwspin_lock_unregister, with which
* we _do_ want users to fail (no point in registering hwspinlock instances if
* the framework is not available).
*
* Note: ERR_PTR(-ENODEV) will still be considered a success for NULL-checking
* users. Others, which care, can still check this with IS_ERR.
*/
static inline struct hwspinlock *hwspin_lock_request_specific(unsigned int id)
{
return ERR_PTR(-ENODEV);
}
static inline int hwspin_lock_free(struct hwspinlock *hwlock)
{
return 0;
}
static inline
int __hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int to,
int mode, unsigned long *flags)
{
return 0;
}
static inline
int __hwspin_trylock(struct hwspinlock *hwlock, int mode, unsigned long *flags)
{
return 0;
}
static inline
void __hwspin_unlock(struct hwspinlock *hwlock, int mode, unsigned long *flags)
{
}
static inline int hwspin_lock_bust(struct hwspinlock *hwlock, unsigned int id)
{
return 0;
}
Annotation
- Immediate include surface: `linux/err.h`, `linux/sched.h`.
- Detected declarations: `struct device`, `struct device_node`, `struct hwspinlock`, `struct hwspinlock_device`, `struct hwspinlock_ops`, `function fail`, `function hwspin_lock_free`, `function __hwspin_lock_timeout`, `function __hwspin_trylock`, `function __hwspin_unlock`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.