Merge branch 'merge' of git://git.secretlab.ca/git/linux-2.6 into merge
This commit is contained in:
@@ -29,6 +29,8 @@
|
||||
#ifndef __LINUX_ATA_H__
|
||||
#define __LINUX_ATA_H__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
@@ -91,6 +93,7 @@ enum {
|
||||
ATA_ID_CFA_POWER = 160,
|
||||
ATA_ID_CFA_KEY_MGMT = 162,
|
||||
ATA_ID_CFA_MODES = 163,
|
||||
ATA_ID_DATA_SET_MGMT = 169,
|
||||
ATA_ID_ROT_SPEED = 217,
|
||||
ATA_ID_PIO4 = (1 << 1),
|
||||
|
||||
@@ -248,6 +251,7 @@ enum {
|
||||
ATA_CMD_SMART = 0xB0,
|
||||
ATA_CMD_MEDIA_LOCK = 0xDE,
|
||||
ATA_CMD_MEDIA_UNLOCK = 0xDF,
|
||||
ATA_CMD_DSM = 0x06,
|
||||
/* marked obsolete in the ATA/ATAPI-7 spec */
|
||||
ATA_CMD_RESTORE = 0x10,
|
||||
|
||||
@@ -321,6 +325,9 @@ enum {
|
||||
ATA_SMART_READ_VALUES = 0xD0,
|
||||
ATA_SMART_READ_THRESHOLDS = 0xD1,
|
||||
|
||||
/* feature values for Data Set Management */
|
||||
ATA_DSM_TRIM = 0x01,
|
||||
|
||||
/* password used in LBA Mid / LBA High for executing SMART commands */
|
||||
ATA_SMART_LBAM_PASS = 0x4F,
|
||||
ATA_SMART_LBAH_PASS = 0xC2,
|
||||
@@ -723,6 +730,14 @@ static inline int ata_id_has_unload(const u16 *id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int ata_id_has_trim(const u16 *id)
|
||||
{
|
||||
if (ata_id_major_version(id) >= 7 &&
|
||||
(id[ATA_ID_DATA_SET_MGMT] & 1))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int ata_id_current_chs_valid(const u16 *id)
|
||||
{
|
||||
/* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
|
||||
@@ -863,6 +878,32 @@ static inline void ata_id_to_hd_driveid(u16 *id)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Write up to 'max' LBA Range Entries to the buffer that will cover the
|
||||
* extent from sector to sector + count. This is used for TRIM and for
|
||||
* ADD LBA(S) TO NV CACHE PINNED SET.
|
||||
*/
|
||||
static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned max,
|
||||
u64 sector, unsigned long count)
|
||||
{
|
||||
__le64 *buffer = _buffer;
|
||||
unsigned i = 0;
|
||||
|
||||
while (i < max) {
|
||||
u64 entry = sector |
|
||||
((u64)(count > 0xffff ? 0xffff : count) << 48);
|
||||
buffer[i++] = __cpu_to_le64(entry);
|
||||
if (count <= 0xffff)
|
||||
break;
|
||||
count -= 0xffff;
|
||||
sector += 0xffff;
|
||||
}
|
||||
|
||||
max = ALIGN(i * 8, 512);
|
||||
memset(buffer + i, 0, max - i * 8);
|
||||
return max;
|
||||
}
|
||||
|
||||
static inline int is_multi_taskfile(struct ata_taskfile *tf)
|
||||
{
|
||||
return (tf->command == ATA_CMD_READ_MULTI) ||
|
||||
|
||||
@@ -24,8 +24,8 @@ struct dentry;
|
||||
*/
|
||||
enum bdi_state {
|
||||
BDI_pdflush, /* A pdflush thread is working this device */
|
||||
BDI_write_congested, /* The write queue is getting full */
|
||||
BDI_read_congested, /* The read queue is getting full */
|
||||
BDI_async_congested, /* The async (write) queue is getting full */
|
||||
BDI_sync_congested, /* The sync queue is getting full */
|
||||
BDI_unused, /* Available bits start here */
|
||||
};
|
||||
|
||||
@@ -215,18 +215,18 @@ static inline int bdi_congested(struct backing_dev_info *bdi, int bdi_bits)
|
||||
|
||||
static inline int bdi_read_congested(struct backing_dev_info *bdi)
|
||||
{
|
||||
return bdi_congested(bdi, 1 << BDI_read_congested);
|
||||
return bdi_congested(bdi, 1 << BDI_sync_congested);
|
||||
}
|
||||
|
||||
static inline int bdi_write_congested(struct backing_dev_info *bdi)
|
||||
{
|
||||
return bdi_congested(bdi, 1 << BDI_write_congested);
|
||||
return bdi_congested(bdi, 1 << BDI_async_congested);
|
||||
}
|
||||
|
||||
static inline int bdi_rw_congested(struct backing_dev_info *bdi)
|
||||
{
|
||||
return bdi_congested(bdi, (1 << BDI_read_congested)|
|
||||
(1 << BDI_write_congested));
|
||||
return bdi_congested(bdi, (1 << BDI_sync_congested) |
|
||||
(1 << BDI_async_congested));
|
||||
}
|
||||
|
||||
void clear_bdi_congested(struct backing_dev_info *bdi, int rw);
|
||||
|
||||
+11
-8
@@ -145,20 +145,21 @@ struct bio {
|
||||
* bit 2 -- barrier
|
||||
* Insert a serialization point in the IO queue, forcing previously
|
||||
* submitted IO to be completed before this one is issued.
|
||||
* bit 3 -- synchronous I/O hint: the block layer will unplug immediately
|
||||
* Note that this does NOT indicate that the IO itself is sync, just
|
||||
* that the block layer will not postpone issue of this IO by plugging.
|
||||
* bit 4 -- metadata request
|
||||
* bit 3 -- synchronous I/O hint.
|
||||
* bit 4 -- Unplug the device immediately after submitting this bio.
|
||||
* bit 5 -- metadata request
|
||||
* Used for tracing to differentiate metadata and data IO. May also
|
||||
* get some preferential treatment in the IO scheduler
|
||||
* bit 5 -- discard sectors
|
||||
* bit 6 -- discard sectors
|
||||
* Informs the lower level device that this range of sectors is no longer
|
||||
* used by the file system and may thus be freed by the device. Used
|
||||
* for flash based storage.
|
||||
* bit 6 -- fail fast device errors
|
||||
* bit 7 -- fail fast transport errors
|
||||
* bit 8 -- fail fast driver errors
|
||||
* bit 7 -- fail fast device errors
|
||||
* bit 8 -- fail fast transport errors
|
||||
* bit 9 -- fail fast driver errors
|
||||
* Don't want driver retries for any fast fail whatever the reason.
|
||||
* bit 10 -- Tell the IO scheduler not to wait for more requests after this
|
||||
one has been submitted, even if it is a SYNC request.
|
||||
*/
|
||||
#define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */
|
||||
#define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */
|
||||
@@ -170,6 +171,7 @@ struct bio {
|
||||
#define BIO_RW_FAILFAST_DEV 7
|
||||
#define BIO_RW_FAILFAST_TRANSPORT 8
|
||||
#define BIO_RW_FAILFAST_DRIVER 9
|
||||
#define BIO_RW_NOIDLE 10
|
||||
|
||||
#define bio_rw_flagged(bio, flag) ((bio)->bi_rw & (1 << (flag)))
|
||||
|
||||
@@ -188,6 +190,7 @@ struct bio {
|
||||
#define bio_rw_ahead(bio) bio_rw_flagged(bio, BIO_RW_AHEAD)
|
||||
#define bio_rw_meta(bio) bio_rw_flagged(bio, BIO_RW_META)
|
||||
#define bio_discard(bio) bio_rw_flagged(bio, BIO_RW_DISCARD)
|
||||
#define bio_noidle(bio) bio_rw_flagged(bio, BIO_RW_NOIDLE)
|
||||
|
||||
/*
|
||||
* upper 16 bits of bi_rw define the io priority of this bio
|
||||
|
||||
+38
-19
@@ -38,6 +38,10 @@ struct request;
|
||||
typedef void (rq_end_io_fn)(struct request *, int);
|
||||
|
||||
struct request_list {
|
||||
/*
|
||||
* count[], starved[], and wait[] are indexed by
|
||||
* BLK_RW_SYNC/BLK_RW_ASYNC
|
||||
*/
|
||||
int count[2];
|
||||
int starved[2];
|
||||
int elvpriv;
|
||||
@@ -66,6 +70,11 @@ enum rq_cmd_type_bits {
|
||||
REQ_TYPE_ATA_PC,
|
||||
};
|
||||
|
||||
enum {
|
||||
BLK_RW_ASYNC = 0,
|
||||
BLK_RW_SYNC = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* For request of type REQ_TYPE_LINUX_BLOCK, rq->cmd[0] is the opcode being
|
||||
* sent down (similar to how REQ_TYPE_BLOCK_PC means that ->cmd[] holds a
|
||||
@@ -103,12 +112,12 @@ enum rq_flag_bits {
|
||||
__REQ_QUIET, /* don't worry about errors */
|
||||
__REQ_PREEMPT, /* set for "ide_preempt" requests */
|
||||
__REQ_ORDERED_COLOR, /* is before or after barrier */
|
||||
__REQ_RW_SYNC, /* request is sync (O_DIRECT) */
|
||||
__REQ_RW_SYNC, /* request is sync (sync write or read) */
|
||||
__REQ_ALLOCED, /* request came from our alloc pool */
|
||||
__REQ_RW_META, /* metadata io request */
|
||||
__REQ_COPY_USER, /* contains copies of user pages */
|
||||
__REQ_INTEGRITY, /* integrity metadata has been remapped */
|
||||
__REQ_UNPLUG, /* unplug queue on submission */
|
||||
__REQ_NOIDLE, /* Don't anticipate more IO after this one */
|
||||
__REQ_NR_BITS, /* stops here */
|
||||
};
|
||||
|
||||
@@ -135,7 +144,7 @@ enum rq_flag_bits {
|
||||
#define REQ_RW_META (1 << __REQ_RW_META)
|
||||
#define REQ_COPY_USER (1 << __REQ_COPY_USER)
|
||||
#define REQ_INTEGRITY (1 << __REQ_INTEGRITY)
|
||||
#define REQ_UNPLUG (1 << __REQ_UNPLUG)
|
||||
#define REQ_NOIDLE (1 << __REQ_NOIDLE)
|
||||
|
||||
#define BLK_MAX_CDB 16
|
||||
|
||||
@@ -438,8 +447,8 @@ struct request_queue
|
||||
#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */
|
||||
#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
|
||||
#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */
|
||||
#define QUEUE_FLAG_READFULL 3 /* read queue has been filled */
|
||||
#define QUEUE_FLAG_WRITEFULL 4 /* write queue has been filled */
|
||||
#define QUEUE_FLAG_SYNCFULL 3 /* read queue has been filled */
|
||||
#define QUEUE_FLAG_ASYNCFULL 4 /* write queue has been filled */
|
||||
#define QUEUE_FLAG_DEAD 5 /* queue being torn down */
|
||||
#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */
|
||||
#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */
|
||||
@@ -611,32 +620,42 @@ enum {
|
||||
#define rq_data_dir(rq) ((rq)->cmd_flags & 1)
|
||||
|
||||
/*
|
||||
* We regard a request as sync, if it's a READ or a SYNC write.
|
||||
* We regard a request as sync, if either a read or a sync write
|
||||
*/
|
||||
#define rq_is_sync(rq) (rq_data_dir((rq)) == READ || (rq)->cmd_flags & REQ_RW_SYNC)
|
||||
static inline bool rw_is_sync(unsigned int rw_flags)
|
||||
{
|
||||
return !(rw_flags & REQ_RW) || (rw_flags & REQ_RW_SYNC);
|
||||
}
|
||||
|
||||
static inline bool rq_is_sync(struct request *rq)
|
||||
{
|
||||
return rw_is_sync(rq->cmd_flags);
|
||||
}
|
||||
|
||||
#define rq_is_meta(rq) ((rq)->cmd_flags & REQ_RW_META)
|
||||
#define rq_noidle(rq) ((rq)->cmd_flags & REQ_NOIDLE)
|
||||
|
||||
static inline int blk_queue_full(struct request_queue *q, int rw)
|
||||
static inline int blk_queue_full(struct request_queue *q, int sync)
|
||||
{
|
||||
if (rw == READ)
|
||||
return test_bit(QUEUE_FLAG_READFULL, &q->queue_flags);
|
||||
return test_bit(QUEUE_FLAG_WRITEFULL, &q->queue_flags);
|
||||
if (sync)
|
||||
return test_bit(QUEUE_FLAG_SYNCFULL, &q->queue_flags);
|
||||
return test_bit(QUEUE_FLAG_ASYNCFULL, &q->queue_flags);
|
||||
}
|
||||
|
||||
static inline void blk_set_queue_full(struct request_queue *q, int rw)
|
||||
static inline void blk_set_queue_full(struct request_queue *q, int sync)
|
||||
{
|
||||
if (rw == READ)
|
||||
queue_flag_set(QUEUE_FLAG_READFULL, q);
|
||||
if (sync)
|
||||
queue_flag_set(QUEUE_FLAG_SYNCFULL, q);
|
||||
else
|
||||
queue_flag_set(QUEUE_FLAG_WRITEFULL, q);
|
||||
queue_flag_set(QUEUE_FLAG_ASYNCFULL, q);
|
||||
}
|
||||
|
||||
static inline void blk_clear_queue_full(struct request_queue *q, int rw)
|
||||
static inline void blk_clear_queue_full(struct request_queue *q, int sync)
|
||||
{
|
||||
if (rw == READ)
|
||||
queue_flag_clear(QUEUE_FLAG_READFULL, q);
|
||||
if (sync)
|
||||
queue_flag_clear(QUEUE_FLAG_SYNCFULL, q);
|
||||
else
|
||||
queue_flag_clear(QUEUE_FLAG_WRITEFULL, q);
|
||||
queue_flag_clear(QUEUE_FLAG_ASYNCFULL, q);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -377,7 +377,21 @@ struct cpu_vfs_cap_data {
|
||||
#define CAP_FOR_EACH_U32(__capi) \
|
||||
for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi)
|
||||
|
||||
/*
|
||||
* CAP_FS_MASK and CAP_NFSD_MASKS:
|
||||
*
|
||||
* The fs mask is all the privileges that fsuid==0 historically meant.
|
||||
* At one time in the past, that included CAP_MKNOD and CAP_LINUX_IMMUTABLE.
|
||||
*
|
||||
* It has never meant setting security.* and trusted.* xattrs.
|
||||
*
|
||||
* We could also define fsmask as follows:
|
||||
* 1. CAP_FS_MASK is the privilege to bypass all fs-related DAC permissions
|
||||
* 2. The security.* and trusted.* xattrs are fs-related MAC permissions
|
||||
*/
|
||||
|
||||
# define CAP_FS_MASK_B0 (CAP_TO_MASK(CAP_CHOWN) \
|
||||
| CAP_TO_MASK(CAP_MKNOD) \
|
||||
| CAP_TO_MASK(CAP_DAC_OVERRIDE) \
|
||||
| CAP_TO_MASK(CAP_DAC_READ_SEARCH) \
|
||||
| CAP_TO_MASK(CAP_FOWNER) \
|
||||
@@ -392,11 +406,12 @@ struct cpu_vfs_cap_data {
|
||||
# define CAP_EMPTY_SET ((kernel_cap_t){{ 0, 0 }})
|
||||
# define CAP_FULL_SET ((kernel_cap_t){{ ~0, ~0 }})
|
||||
# define CAP_INIT_EFF_SET ((kernel_cap_t){{ ~CAP_TO_MASK(CAP_SETPCAP), ~0 }})
|
||||
# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0, CAP_FS_MASK_B1 } })
|
||||
# define CAP_FS_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \
|
||||
| CAP_TO_MASK(CAP_LINUX_IMMUTABLE), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
# define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0 \
|
||||
| CAP_TO_MASK(CAP_SYS_RESOURCE) \
|
||||
| CAP_TO_MASK(CAP_MKNOD), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
| CAP_TO_MASK(CAP_SYS_RESOURCE), \
|
||||
CAP_FS_MASK_B1 } })
|
||||
|
||||
#endif /* _KERNEL_CAPABILITY_U32S != 2 */
|
||||
|
||||
|
||||
@@ -76,7 +76,8 @@ struct ftrace_branch_data {
|
||||
* Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code
|
||||
* to disable branch tracing on a per file basis.
|
||||
*/
|
||||
#if defined(CONFIG_TRACE_BRANCH_PROFILING) && !defined(DISABLE_BRANCH_PROFILING)
|
||||
#if defined(CONFIG_TRACE_BRANCH_PROFILING) \
|
||||
&& !defined(DISABLE_BRANCH_PROFILING) && !defined(__CHECKER__)
|
||||
void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
|
||||
#define likely_notrace(x) __builtin_expect(!!(x), 1)
|
||||
@@ -114,7 +115,9 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
|
||||
* "Define 'is'", Bill Clinton
|
||||
* "Define 'if'", Steven Rostedt
|
||||
*/
|
||||
#define if(cond) if (__builtin_constant_p((cond)) ? !!(cond) : \
|
||||
#define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
|
||||
#define __trace_if(cond) \
|
||||
if (__builtin_constant_p((cond)) ? !!(cond) : \
|
||||
({ \
|
||||
int ______r; \
|
||||
static struct ftrace_branch_data \
|
||||
|
||||
@@ -2,12 +2,20 @@
|
||||
#define __LINUX_DEBUG_LOCKING_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
struct task_struct;
|
||||
|
||||
extern int debug_locks;
|
||||
extern int debug_locks_silent;
|
||||
|
||||
|
||||
static inline int __debug_locks_off(void)
|
||||
{
|
||||
return xchg(&debug_locks, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Generic 'turn off all lock debugging' function:
|
||||
*/
|
||||
|
||||
@@ -116,7 +116,6 @@ void dm_put_device(struct dm_target *ti, struct dm_dev *d);
|
||||
/*
|
||||
* Target features
|
||||
*/
|
||||
#define DM_TARGET_SUPPORTS_BARRIERS 0x00000001
|
||||
|
||||
struct target_type {
|
||||
uint64_t features;
|
||||
|
||||
@@ -115,7 +115,7 @@ static inline u64 dma_get_mask(struct device *dev)
|
||||
{
|
||||
if (dev && dev->dma_mask && *dev->dma_mask)
|
||||
return *dev->dma_mask;
|
||||
return DMA_32BIT_MASK;
|
||||
return DMA_BIT_MASK(32);
|
||||
}
|
||||
|
||||
extern u64 dma_get_required_mask(struct device *dev);
|
||||
|
||||
@@ -34,6 +34,7 @@ struct dmar_drhd_unit {
|
||||
u64 reg_base_addr; /* register base address*/
|
||||
struct pci_dev **devices; /* target device array */
|
||||
int devices_cnt; /* target device count */
|
||||
u16 segment; /* PCI domain */
|
||||
u8 ignored:1; /* ignore drhd */
|
||||
u8 include_all:1;
|
||||
struct intel_iommu *iommu;
|
||||
@@ -44,6 +45,14 @@ extern struct list_head dmar_drhd_units;
|
||||
#define for_each_drhd_unit(drhd) \
|
||||
list_for_each_entry(drhd, &dmar_drhd_units, list)
|
||||
|
||||
#define for_each_active_iommu(i, drhd) \
|
||||
list_for_each_entry(drhd, &dmar_drhd_units, list) \
|
||||
if (i=drhd->iommu, drhd->ignored) {} else
|
||||
|
||||
#define for_each_iommu(i, drhd) \
|
||||
list_for_each_entry(drhd, &dmar_drhd_units, list) \
|
||||
if (i=drhd->iommu, 0) {} else
|
||||
|
||||
extern int dmar_table_init(void);
|
||||
extern int dmar_dev_scope_init(void);
|
||||
|
||||
@@ -100,6 +109,8 @@ struct irte {
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
extern int intr_remapping_enabled;
|
||||
extern int enable_intr_remapping(int);
|
||||
extern void disable_intr_remapping(void);
|
||||
extern int reenable_intr_remapping(int);
|
||||
|
||||
extern int get_irte(int irq, struct irte *entry);
|
||||
extern int modify_irte(int irq, struct irte *irte_modified);
|
||||
|
||||
@@ -116,6 +116,7 @@ extern void elv_abort_queue(struct request_queue *);
|
||||
extern void elv_completed_request(struct request_queue *, struct request *);
|
||||
extern int elv_set_request(struct request_queue *, struct request *, gfp_t);
|
||||
extern void elv_put_request(struct request_queue *, struct request *);
|
||||
extern void elv_drain_elevator(struct request_queue *);
|
||||
|
||||
/*
|
||||
* io scheduler registration
|
||||
|
||||
+6
-2
@@ -173,8 +173,12 @@ struct fb_fix_screeninfo {
|
||||
/* Interpretation of offset for color fields: All offsets are from the right,
|
||||
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
|
||||
* can use the offset as right argument to <<). A pixel afterwards is a bit
|
||||
* stream and is written to video memory as that unmodified. This implies
|
||||
* big-endian byte order if bits_per_pixel is greater than 8.
|
||||
* stream and is written to video memory as that unmodified.
|
||||
*
|
||||
* For pseudocolor: offset and length should be the same for all color
|
||||
* components. Offset specifies the position of the least significant bit
|
||||
* of the pallette index in a pixel value. Length indicates the number
|
||||
* of available palette entries (i.e. # of entries = 1 << length).
|
||||
*/
|
||||
struct fb_bitfield {
|
||||
__u32 offset; /* beginning of bitfield */
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
#ifndef __LINUX_FDTABLE_H
|
||||
#define __LINUX_FDTABLE_H
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/posix_types.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* The default fd array needs to be at least BITS_PER_LONG,
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
#ifndef _LINUX_FIEMAP_H
|
||||
#define _LINUX_FIEMAP_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct fiemap_extent {
|
||||
__u64 fe_logical; /* logical offset in bytes for the start of
|
||||
* the extent from the beginning of the file */
|
||||
|
||||
+10
-36
@@ -95,8 +95,12 @@ struct inodes_stat_t {
|
||||
#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */
|
||||
#define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
|
||||
#define READ_META (READ | (1 << BIO_RW_META))
|
||||
#define WRITE_SYNC (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
|
||||
#define SWRITE_SYNC (SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
|
||||
#define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
|
||||
#define WRITE_SYNC (WRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
|
||||
#define WRITE_ODIRECT (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG))
|
||||
#define SWRITE_SYNC_PLUG \
|
||||
(SWRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE))
|
||||
#define SWRITE_SYNC (SWRITE_SYNC_PLUG | (1 << BIO_RW_UNPLUG))
|
||||
#define WRITE_BARRIER (WRITE | (1 << BIO_RW_BARRIER))
|
||||
#define DISCARD_NOBARRIER (1 << BIO_RW_DISCARD)
|
||||
#define DISCARD_BARRIER ((1 << BIO_RW_DISCARD) | (1 << BIO_RW_BARRIER))
|
||||
@@ -1695,6 +1699,9 @@ struct file_system_type {
|
||||
struct lock_class_key i_alloc_sem_key;
|
||||
};
|
||||
|
||||
extern int get_sb_ns(struct file_system_type *fs_type, int flags, void *data,
|
||||
int (*fill_super)(struct super_block *, void *, int),
|
||||
struct vfsmount *mnt);
|
||||
extern int get_sb_bdev(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data,
|
||||
int (*fill_super)(struct super_block *, void *, int),
|
||||
@@ -2337,19 +2344,7 @@ ssize_t simple_transaction_read(struct file *file, char __user *buf,
|
||||
size_t size, loff_t *pos);
|
||||
int simple_transaction_release(struct inode *inode, struct file *file);
|
||||
|
||||
static inline void simple_transaction_set(struct file *file, size_t n)
|
||||
{
|
||||
struct simple_transaction_argresp *ar = file->private_data;
|
||||
|
||||
BUG_ON(n > SIMPLE_TRANSACTION_LIMIT);
|
||||
|
||||
/*
|
||||
* The barrier ensures that ar->size will really remain zero until
|
||||
* ar->data is ready for reading.
|
||||
*/
|
||||
smp_mb();
|
||||
ar->size = n;
|
||||
}
|
||||
void simple_transaction_set(struct file *file, size_t n);
|
||||
|
||||
/*
|
||||
* simple attribute files
|
||||
@@ -2396,27 +2391,6 @@ ssize_t simple_attr_read(struct file *file, char __user *buf,
|
||||
ssize_t simple_attr_write(struct file *file, const char __user *buf,
|
||||
size_t len, loff_t *ppos);
|
||||
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
static inline char *alloc_secdata(void)
|
||||
{
|
||||
return (char *)get_zeroed_page(GFP_KERNEL);
|
||||
}
|
||||
|
||||
static inline void free_secdata(void *secdata)
|
||||
{
|
||||
free_page((unsigned long)secdata);
|
||||
}
|
||||
#else
|
||||
static inline char *alloc_secdata(void)
|
||||
{
|
||||
return (char *)1;
|
||||
}
|
||||
|
||||
static inline void free_secdata(void *secdata)
|
||||
{ }
|
||||
#endif /* CONFIG_SECURITY */
|
||||
|
||||
struct ctl_table;
|
||||
int proc_nr_files(struct ctl_table *table, int write, struct file *filp,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
|
||||
@@ -79,6 +79,10 @@ struct fsl_spi_platform_data {
|
||||
u16 max_chipselect;
|
||||
void (*cs_control)(struct spi_device *spi, bool on);
|
||||
u32 sysclk;
|
||||
|
||||
/* Legacy hooks, used by mpc52xx_psc_spi driver. */
|
||||
void (*activate_cs)(u8 cs, u8 polarity);
|
||||
void (*deactivate_cs)(u8 cs, u8 polarity);
|
||||
};
|
||||
|
||||
struct mpc8xx_pcmcia_ops {
|
||||
|
||||
+6
-31
@@ -356,6 +356,9 @@ struct ftrace_graph_ret {
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
|
||||
/* for init task */
|
||||
#define INIT_FTRACE_GRAPH .ret_stack = NULL,
|
||||
|
||||
/*
|
||||
* Stack of return addresses for functions
|
||||
* of a thread.
|
||||
@@ -430,10 +433,11 @@ static inline void unpause_graph_tracing(void)
|
||||
{
|
||||
atomic_dec(¤t->tracing_graph_pause);
|
||||
}
|
||||
#else
|
||||
#else /* !CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
#define __notrace_funcgraph
|
||||
#define __irq_entry
|
||||
#define INIT_FTRACE_GRAPH
|
||||
|
||||
static inline void ftrace_graph_init_task(struct task_struct *t) { }
|
||||
static inline void ftrace_graph_exit_task(struct task_struct *t) { }
|
||||
@@ -445,7 +449,7 @@ static inline int task_curr_ret_stack(struct task_struct *tsk)
|
||||
|
||||
static inline void pause_graph_tracing(void) { }
|
||||
static inline void unpause_graph_tracing(void) { }
|
||||
#endif
|
||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
#include <linux/sched.h>
|
||||
@@ -507,33 +511,4 @@ static inline void trace_hw_branch_oops(void) {}
|
||||
|
||||
#endif /* CONFIG_HW_BRANCH_TRACER */
|
||||
|
||||
/*
|
||||
* A syscall entry in the ftrace syscalls array.
|
||||
*
|
||||
* @name: name of the syscall
|
||||
* @nb_args: number of parameters it takes
|
||||
* @types: list of types as strings
|
||||
* @args: list of args as strings (args[i] matches types[i])
|
||||
*/
|
||||
struct syscall_metadata {
|
||||
const char *name;
|
||||
int nb_args;
|
||||
const char **types;
|
||||
const char **args;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
extern void arch_init_ftrace_syscalls(void);
|
||||
extern struct syscall_metadata *syscall_nr_to_meta(int nr);
|
||||
extern void start_ftrace_syscalls(void);
|
||||
extern void stop_ftrace_syscalls(void);
|
||||
extern void ftrace_syscall_enter(struct pt_regs *regs);
|
||||
extern void ftrace_syscall_exit(struct pt_regs *regs);
|
||||
#else
|
||||
static inline void start_ftrace_syscalls(void) { }
|
||||
static inline void stop_ftrace_syscalls(void) { }
|
||||
static inline void ftrace_syscall_enter(struct pt_regs *regs) { }
|
||||
static inline void ftrace_syscall_exit(struct pt_regs *regs) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_FTRACE_H */
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) || defined(CONFIG_GENERIC_HARDIRQS)
|
||||
extern void synchronize_irq(unsigned int irq);
|
||||
#else
|
||||
# define synchronize_irq(irq) barrier()
|
||||
|
||||
@@ -336,6 +336,11 @@ extern int hrtimer_start(struct hrtimer *timer, ktime_t tim,
|
||||
const enum hrtimer_mode mode);
|
||||
extern int hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
|
||||
unsigned long range_ns, const enum hrtimer_mode mode);
|
||||
extern int
|
||||
__hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
|
||||
unsigned long delta_ns,
|
||||
const enum hrtimer_mode mode, int wakeup);
|
||||
|
||||
extern int hrtimer_cancel(struct hrtimer *timer);
|
||||
extern int hrtimer_try_to_cancel(struct hrtimer *timer);
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* Copyright (C) 2003 Ladislav Michl <ladis@linux-mips.org>
|
||||
*/
|
||||
|
||||
#ifndef I2C_ALGO_SGI_H
|
||||
#define I2C_ALGO_SGI_H 1
|
||||
|
||||
#include <linux/i2c.h>
|
||||
|
||||
struct i2c_algo_sgi_data {
|
||||
void *data; /* private data for lowlevel routines */
|
||||
unsigned (*getctrl)(void *data);
|
||||
void (*setctrl)(void *data, unsigned val);
|
||||
unsigned (*rdata)(void *data);
|
||||
void (*wdata)(void *data, unsigned val);
|
||||
|
||||
int xfer_timeout;
|
||||
int ack_timeout;
|
||||
};
|
||||
|
||||
int i2c_sgi_add_bus(struct i2c_adapter *);
|
||||
|
||||
#endif /* I2C_ALGO_SGI_H */
|
||||
+1
-37
@@ -33,47 +33,10 @@
|
||||
|
||||
#define I2C_DRIVERID_MSP3400 1
|
||||
#define I2C_DRIVERID_TUNER 2
|
||||
#define I2C_DRIVERID_TEA6420 5 /* audio matrix switch */
|
||||
#define I2C_DRIVERID_TEA6415C 6 /* video matrix switch */
|
||||
#define I2C_DRIVERID_TDA9840 7 /* stereo sound processor */
|
||||
#define I2C_DRIVERID_SAA7111A 8 /* video input processor */
|
||||
#define I2C_DRIVERID_SAA7185B 13 /* video encoder */
|
||||
#define I2C_DRIVERID_SAA7110 22 /* video decoder */
|
||||
#define I2C_DRIVERID_SAA5249 24 /* SAA5249 and compatibles */
|
||||
#define I2C_DRIVERID_TDA7432 27 /* Stereo sound processor */
|
||||
#define I2C_DRIVERID_TVAUDIO 29 /* Generic TV sound driver */
|
||||
#define I2C_DRIVERID_TDA9875 32 /* TV sound decoder chip */
|
||||
#define I2C_DRIVERID_BT819 40 /* video decoder */
|
||||
#define I2C_DRIVERID_BT856 41 /* video encoder */
|
||||
#define I2C_DRIVERID_VPX3220 42 /* video decoder+vbi/vtxt */
|
||||
#define I2C_DRIVERID_ADV7175 48 /* ADV 7175/7176 video encoder */
|
||||
#define I2C_DRIVERID_SAA7114 49 /* video decoder */
|
||||
#define I2C_DRIVERID_ADV7170 54 /* video encoder */
|
||||
#define I2C_DRIVERID_SAA7191 57 /* video decoder */
|
||||
#define I2C_DRIVERID_INDYCAM 58 /* SGI IndyCam */
|
||||
#define I2C_DRIVERID_OVCAMCHIP 61 /* OmniVision CMOS image sens. */
|
||||
#define I2C_DRIVERID_SAA6752HS 67 /* MPEG2 encoder */
|
||||
#define I2C_DRIVERID_TVEEPROM 68 /* TV EEPROM */
|
||||
#define I2C_DRIVERID_WM8775 69 /* wm8775 audio processor */
|
||||
#define I2C_DRIVERID_CS53L32A 70 /* cs53l32a audio processor */
|
||||
#define I2C_DRIVERID_CX25840 71 /* cx2584x video encoder */
|
||||
#define I2C_DRIVERID_SAA7127 72 /* saa7127 video encoder */
|
||||
#define I2C_DRIVERID_SAA711X 73 /* saa711x video encoders */
|
||||
#define I2C_DRIVERID_INFRARED 75 /* I2C InfraRed on Video boards */
|
||||
#define I2C_DRIVERID_TVP5150 76 /* TVP5150 video decoder */
|
||||
#define I2C_DRIVERID_WM8739 77 /* wm8739 audio processor */
|
||||
#define I2C_DRIVERID_UPD64083 78 /* upd64083 video processor */
|
||||
#define I2C_DRIVERID_UPD64031A 79 /* upd64031a video processor */
|
||||
#define I2C_DRIVERID_SAA717X 80 /* saa717x video encoder */
|
||||
#define I2C_DRIVERID_BT866 85 /* Conexant bt866 video encoder */
|
||||
#define I2C_DRIVERID_KS0127 86 /* Samsung ks0127 video decoder */
|
||||
#define I2C_DRIVERID_TLV320AIC23B 87 /* TI TLV320AIC23B audio codec */
|
||||
#define I2C_DRIVERID_VP27SMPX 93 /* Panasonic VP27s tuner internal MPX */
|
||||
#define I2C_DRIVERID_M52790 95 /* Mitsubishi M52790SP/FP AV switch */
|
||||
#define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */
|
||||
#define I2C_DRIVERID_AU8522 97 /* Auvitek au8522 */
|
||||
|
||||
#define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */
|
||||
|
||||
/*
|
||||
* ---- Adapter types ----------------------------------------------------
|
||||
@@ -88,6 +51,7 @@
|
||||
#define I2C_HW_B_CX2341X 0x010020 /* Conexant CX2341X MPEG encoder cards */
|
||||
#define I2C_HW_B_CX23885 0x010022 /* conexant 23885 based tv cards (bus1) */
|
||||
#define I2C_HW_B_AU0828 0x010023 /* auvitek au0828 usb bridge */
|
||||
#define I2C_HW_B_CX231XX 0x010024 /* Conexant CX231XX USB based cards */
|
||||
#define I2C_HW_B_HDPVR 0x010025 /* Hauppauge HD PVR */
|
||||
|
||||
/* --- SGI adapters */
|
||||
|
||||
+3
-3
@@ -274,7 +274,7 @@ struct i2c_board_info {
|
||||
* are provided using conventional syntax.
|
||||
*/
|
||||
#define I2C_BOARD_INFO(dev_type, dev_addr) \
|
||||
.type = (dev_type), .addr = (dev_addr)
|
||||
.type = dev_type, .addr = (dev_addr)
|
||||
|
||||
|
||||
/* Add-on boards should register/unregister their devices; e.g. a board
|
||||
@@ -353,8 +353,8 @@ struct i2c_adapter {
|
||||
void *algo_data;
|
||||
|
||||
/* --- administration stuff. */
|
||||
int (*client_register)(struct i2c_client *);
|
||||
int (*client_unregister)(struct i2c_client *);
|
||||
int (*client_register)(struct i2c_client *) __deprecated;
|
||||
int (*client_unregister)(struct i2c_client *) __deprecated;
|
||||
|
||||
/* data fields that are valid for all devices */
|
||||
u8 level; /* nesting level for lockdep */
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef __LINUX_I2C_S6000_H
|
||||
#define __LINUX_I2C_S6000_H
|
||||
|
||||
struct s6_i2c_platform_data {
|
||||
const char *clock; /* the clock to use */
|
||||
int bus_num; /* the bus number to register */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+57
-94
@@ -239,66 +239,39 @@ typedef enum {
|
||||
ide_started, /* a drive operation was started, handler was set */
|
||||
} ide_startstop_t;
|
||||
|
||||
enum {
|
||||
IDE_VALID_ERROR = (1 << 1),
|
||||
IDE_VALID_FEATURE = IDE_VALID_ERROR,
|
||||
IDE_VALID_NSECT = (1 << 2),
|
||||
IDE_VALID_LBAL = (1 << 3),
|
||||
IDE_VALID_LBAM = (1 << 4),
|
||||
IDE_VALID_LBAH = (1 << 5),
|
||||
IDE_VALID_DEVICE = (1 << 6),
|
||||
IDE_VALID_LBA = IDE_VALID_LBAL |
|
||||
IDE_VALID_LBAM |
|
||||
IDE_VALID_LBAH,
|
||||
IDE_VALID_OUT_TF = IDE_VALID_FEATURE |
|
||||
IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
IDE_VALID_IN_TF = IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
IDE_VALID_OUT_HOB = IDE_VALID_OUT_TF,
|
||||
IDE_VALID_IN_HOB = IDE_VALID_ERROR |
|
||||
IDE_VALID_NSECT |
|
||||
IDE_VALID_LBA,
|
||||
};
|
||||
|
||||
enum {
|
||||
IDE_TFLAG_LBA48 = (1 << 0),
|
||||
IDE_TFLAG_OUT_HOB_FEATURE = (1 << 1),
|
||||
IDE_TFLAG_OUT_HOB_NSECT = (1 << 2),
|
||||
IDE_TFLAG_OUT_HOB_LBAL = (1 << 3),
|
||||
IDE_TFLAG_OUT_HOB_LBAM = (1 << 4),
|
||||
IDE_TFLAG_OUT_HOB_LBAH = (1 << 5),
|
||||
IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE |
|
||||
IDE_TFLAG_OUT_HOB_NSECT |
|
||||
IDE_TFLAG_OUT_HOB_LBAL |
|
||||
IDE_TFLAG_OUT_HOB_LBAM |
|
||||
IDE_TFLAG_OUT_HOB_LBAH,
|
||||
IDE_TFLAG_OUT_FEATURE = (1 << 6),
|
||||
IDE_TFLAG_OUT_NSECT = (1 << 7),
|
||||
IDE_TFLAG_OUT_LBAL = (1 << 8),
|
||||
IDE_TFLAG_OUT_LBAM = (1 << 9),
|
||||
IDE_TFLAG_OUT_LBAH = (1 << 10),
|
||||
IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE |
|
||||
IDE_TFLAG_OUT_NSECT |
|
||||
IDE_TFLAG_OUT_LBAL |
|
||||
IDE_TFLAG_OUT_LBAM |
|
||||
IDE_TFLAG_OUT_LBAH,
|
||||
IDE_TFLAG_OUT_DEVICE = (1 << 11),
|
||||
IDE_TFLAG_WRITE = (1 << 12),
|
||||
IDE_TFLAG_CUSTOM_HANDLER = (1 << 13),
|
||||
IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 14),
|
||||
IDE_TFLAG_IN_HOB_ERROR = (1 << 15),
|
||||
IDE_TFLAG_IN_HOB_NSECT = (1 << 16),
|
||||
IDE_TFLAG_IN_HOB_LBAL = (1 << 17),
|
||||
IDE_TFLAG_IN_HOB_LBAM = (1 << 18),
|
||||
IDE_TFLAG_IN_HOB_LBAH = (1 << 19),
|
||||
IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL |
|
||||
IDE_TFLAG_IN_HOB_LBAM |
|
||||
IDE_TFLAG_IN_HOB_LBAH,
|
||||
IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_ERROR |
|
||||
IDE_TFLAG_IN_HOB_NSECT |
|
||||
IDE_TFLAG_IN_HOB_LBA,
|
||||
IDE_TFLAG_IN_ERROR = (1 << 20),
|
||||
IDE_TFLAG_IN_NSECT = (1 << 21),
|
||||
IDE_TFLAG_IN_LBAL = (1 << 22),
|
||||
IDE_TFLAG_IN_LBAM = (1 << 23),
|
||||
IDE_TFLAG_IN_LBAH = (1 << 24),
|
||||
IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL |
|
||||
IDE_TFLAG_IN_LBAM |
|
||||
IDE_TFLAG_IN_LBAH,
|
||||
IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT |
|
||||
IDE_TFLAG_IN_LBA,
|
||||
IDE_TFLAG_IN_DEVICE = (1 << 25),
|
||||
IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB |
|
||||
IDE_TFLAG_IN_HOB,
|
||||
IDE_TFLAG_TF = IDE_TFLAG_OUT_TF |
|
||||
IDE_TFLAG_IN_TF,
|
||||
IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE |
|
||||
IDE_TFLAG_IN_DEVICE,
|
||||
IDE_TFLAG_WRITE = (1 << 1),
|
||||
IDE_TFLAG_CUSTOM_HANDLER = (1 << 2),
|
||||
IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 3),
|
||||
/* force 16-bit I/O operations */
|
||||
IDE_TFLAG_IO_16BIT = (1 << 26),
|
||||
IDE_TFLAG_IO_16BIT = (1 << 4),
|
||||
/* struct ide_cmd was allocated using kmalloc() */
|
||||
IDE_TFLAG_DYN = (1 << 27),
|
||||
IDE_TFLAG_FS = (1 << 28),
|
||||
IDE_TFLAG_MULTI_PIO = (1 << 29),
|
||||
IDE_TFLAG_DYN = (1 << 5),
|
||||
IDE_TFLAG_FS = (1 << 6),
|
||||
IDE_TFLAG_MULTI_PIO = (1 << 7),
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -309,45 +282,34 @@ enum {
|
||||
};
|
||||
|
||||
struct ide_taskfile {
|
||||
u8 hob_data; /* 0: high data byte (for TASKFILE IOCTL) */
|
||||
/* 1-5: additional data to support LBA48 */
|
||||
union {
|
||||
u8 hob_error; /* read: error */
|
||||
u8 hob_feature; /* write: feature */
|
||||
u8 data; /* 0: data byte (for TASKFILE ioctl) */
|
||||
union { /* 1: */
|
||||
u8 error; /* read: error */
|
||||
u8 feature; /* write: feature */
|
||||
};
|
||||
|
||||
u8 hob_nsect;
|
||||
u8 hob_lbal;
|
||||
u8 hob_lbam;
|
||||
u8 hob_lbah;
|
||||
|
||||
u8 data; /* 6: low data byte (for TASKFILE IOCTL) */
|
||||
|
||||
union { /* 7: */
|
||||
u8 error; /* read: error */
|
||||
u8 feature; /* write: feature */
|
||||
};
|
||||
|
||||
u8 nsect; /* 8: number of sectors */
|
||||
u8 lbal; /* 9: LBA low */
|
||||
u8 lbam; /* 10: LBA mid */
|
||||
u8 lbah; /* 11: LBA high */
|
||||
|
||||
u8 device; /* 12: device select */
|
||||
|
||||
union { /* 13: */
|
||||
u8 status; /* read: status */
|
||||
u8 nsect; /* 2: number of sectors */
|
||||
u8 lbal; /* 3: LBA low */
|
||||
u8 lbam; /* 4: LBA mid */
|
||||
u8 lbah; /* 5: LBA high */
|
||||
u8 device; /* 6: device select */
|
||||
union { /* 7: */
|
||||
u8 status; /* read: status */
|
||||
u8 command; /* write: command */
|
||||
};
|
||||
};
|
||||
|
||||
struct ide_cmd {
|
||||
union {
|
||||
struct ide_taskfile tf;
|
||||
u8 tf_array[14];
|
||||
};
|
||||
struct ide_taskfile tf;
|
||||
struct ide_taskfile hob;
|
||||
struct {
|
||||
struct {
|
||||
u8 tf;
|
||||
u8 hob;
|
||||
} out, in;
|
||||
} valid;
|
||||
|
||||
u8 tf_flags;
|
||||
u8 ftf_flags; /* for TASKFILE ioctl */
|
||||
u32 tf_flags;
|
||||
int protocol;
|
||||
|
||||
int sg_nents; /* number of sg entries */
|
||||
@@ -662,8 +624,8 @@ struct ide_tp_ops {
|
||||
void (*write_devctl)(struct hwif_s *, u8);
|
||||
|
||||
void (*dev_select)(ide_drive_t *);
|
||||
void (*tf_load)(ide_drive_t *, struct ide_cmd *);
|
||||
void (*tf_read)(ide_drive_t *, struct ide_cmd *);
|
||||
void (*tf_load)(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
void (*tf_read)(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
|
||||
void (*input_data)(ide_drive_t *, struct ide_cmd *,
|
||||
void *, unsigned int);
|
||||
@@ -1162,7 +1124,8 @@ extern int ide_devset_execute(ide_drive_t *drive,
|
||||
void ide_complete_cmd(ide_drive_t *, struct ide_cmd *, u8, u8);
|
||||
int ide_complete_rq(ide_drive_t *, int, unsigned int);
|
||||
|
||||
void ide_tf_dump(const char *, struct ide_taskfile *);
|
||||
void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd);
|
||||
void ide_tf_dump(const char *, struct ide_cmd *);
|
||||
|
||||
void ide_exec_command(ide_hwif_t *, u8);
|
||||
u8 ide_read_status(ide_hwif_t *);
|
||||
@@ -1170,8 +1133,8 @@ u8 ide_read_altstatus(ide_hwif_t *);
|
||||
void ide_write_devctl(ide_hwif_t *, u8);
|
||||
|
||||
void ide_dev_select(ide_drive_t *);
|
||||
void ide_tf_load(ide_drive_t *, struct ide_cmd *);
|
||||
void ide_tf_read(ide_drive_t *, struct ide_cmd *);
|
||||
void ide_tf_load(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
void ide_tf_read(ide_drive_t *, struct ide_taskfile *, u8);
|
||||
|
||||
void ide_input_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int);
|
||||
void ide_output_data(ide_drive_t *, struct ide_cmd *, void *, unsigned int);
|
||||
@@ -1529,7 +1492,7 @@ static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data)
|
||||
|
||||
extern void ide_toggle_bounce(ide_drive_t *drive, int on);
|
||||
|
||||
u64 ide_get_lba_addr(struct ide_taskfile *, int);
|
||||
u64 ide_get_lba_addr(struct ide_cmd *, int);
|
||||
u8 ide_dump_status(ide_drive_t *, const char *, u8);
|
||||
|
||||
struct ide_timing {
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <linux/irqflags.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/ipc.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
#include <linux/user_namespace.h>
|
||||
@@ -14,19 +15,6 @@
|
||||
extern struct files_struct init_files;
|
||||
extern struct fs_struct init_fs;
|
||||
|
||||
#define INIT_KIOCTX(name, which_mm) \
|
||||
{ \
|
||||
.users = ATOMIC_INIT(1), \
|
||||
.dead = 0, \
|
||||
.mm = &which_mm, \
|
||||
.user_id = 0, \
|
||||
.next = NULL, \
|
||||
.wait = __WAIT_QUEUE_HEAD_INITIALIZER(name.wait), \
|
||||
.ctx_lock = __SPIN_LOCK_UNLOCKED(name.ctx_lock), \
|
||||
.reqs_active = 0U, \
|
||||
.max_reqs = ~0U, \
|
||||
}
|
||||
|
||||
#define INIT_MM(name) \
|
||||
{ \
|
||||
.mm_rb = RB_ROOT, \
|
||||
@@ -185,6 +173,7 @@ extern struct cred init_cred;
|
||||
INIT_IDS \
|
||||
INIT_TRACE_IRQFLAGS \
|
||||
INIT_LOCKDEP \
|
||||
INIT_FTRACE_GRAPH \
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -164,6 +164,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
||||
#define DMA_GCMD_QIE (((u32)1) << 26)
|
||||
#define DMA_GCMD_SIRTP (((u32)1) << 24)
|
||||
#define DMA_GCMD_IRE (((u32) 1) << 25)
|
||||
#define DMA_GCMD_CFI (((u32) 1) << 23)
|
||||
|
||||
/* GSTS_REG */
|
||||
#define DMA_GSTS_TES (((u32)1) << 31)
|
||||
@@ -174,6 +175,7 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
||||
#define DMA_GSTS_QIES (((u32)1) << 26)
|
||||
#define DMA_GSTS_IRTPS (((u32)1) << 24)
|
||||
#define DMA_GSTS_IRES (((u32)1) << 25)
|
||||
#define DMA_GSTS_CFIS (((u32)1) << 23)
|
||||
|
||||
/* CCMD_REG */
|
||||
#define DMA_CCMD_ICC (((u64)1) << 63)
|
||||
@@ -284,6 +286,14 @@ struct iommu_flush {
|
||||
unsigned int size_order, u64 type, int non_present_entry_flush);
|
||||
};
|
||||
|
||||
enum {
|
||||
SR_DMAR_FECTL_REG,
|
||||
SR_DMAR_FEDATA_REG,
|
||||
SR_DMAR_FEADDR_REG,
|
||||
SR_DMAR_FEUADDR_REG,
|
||||
MAX_SR_DMAR_REGS
|
||||
};
|
||||
|
||||
struct intel_iommu {
|
||||
void __iomem *reg; /* Pointer to hardware regs, virtual addr */
|
||||
u64 cap;
|
||||
@@ -304,6 +314,8 @@ struct intel_iommu {
|
||||
struct iommu_flush flush;
|
||||
#endif
|
||||
struct q_inval *qi; /* Queued invalidation info */
|
||||
u32 *iommu_state; /* Store iommu states between suspend and resume.*/
|
||||
|
||||
#ifdef CONFIG_INTR_REMAP
|
||||
struct ir_table *ir_table; /* Interrupt remapping info */
|
||||
#endif
|
||||
@@ -322,6 +334,7 @@ extern int alloc_iommu(struct dmar_drhd_unit *drhd);
|
||||
extern void free_iommu(struct intel_iommu *iommu);
|
||||
extern int dmar_enable_qi(struct intel_iommu *iommu);
|
||||
extern void dmar_disable_qi(struct intel_iommu *iommu);
|
||||
extern int dmar_reenable_qi(struct intel_iommu *iommu);
|
||||
extern void qi_global_iec(struct intel_iommu *iommu);
|
||||
|
||||
extern int qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid,
|
||||
|
||||
@@ -59,6 +59,18 @@
|
||||
#define IRQF_NOBALANCING 0x00000800
|
||||
#define IRQF_IRQPOLL 0x00001000
|
||||
|
||||
/*
|
||||
* Bits used by threaded handlers:
|
||||
* IRQTF_RUNTHREAD - signals that the interrupt handler thread should run
|
||||
* IRQTF_DIED - handler thread died
|
||||
* IRQTF_WARNED - warning "IRQ_WAKE_THREAD w/o thread_fn" has been printed
|
||||
*/
|
||||
enum {
|
||||
IRQTF_RUNTHREAD,
|
||||
IRQTF_DIED,
|
||||
IRQTF_WARNED,
|
||||
};
|
||||
|
||||
typedef irqreturn_t (*irq_handler_t)(int, void *);
|
||||
|
||||
/**
|
||||
@@ -71,6 +83,9 @@ typedef irqreturn_t (*irq_handler_t)(int, void *);
|
||||
* @next: pointer to the next irqaction for shared interrupts
|
||||
* @irq: interrupt number
|
||||
* @dir: pointer to the proc/irq/NN/name entry
|
||||
* @thread_fn: interupt handler function for threaded interrupts
|
||||
* @thread: thread pointer for threaded interrupts
|
||||
* @thread_flags: flags related to @thread
|
||||
*/
|
||||
struct irqaction {
|
||||
irq_handler_t handler;
|
||||
@@ -81,18 +96,68 @@ struct irqaction {
|
||||
struct irqaction *next;
|
||||
int irq;
|
||||
struct proc_dir_entry *dir;
|
||||
irq_handler_t thread_fn;
|
||||
struct task_struct *thread;
|
||||
unsigned long thread_flags;
|
||||
};
|
||||
|
||||
extern irqreturn_t no_action(int cpl, void *dev_id);
|
||||
extern int __must_check request_irq(unsigned int, irq_handler_t handler,
|
||||
unsigned long, const char *, void *);
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
extern int __must_check
|
||||
request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
||||
irq_handler_t thread_fn,
|
||||
unsigned long flags, const char *name, void *dev);
|
||||
|
||||
static inline int __must_check
|
||||
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
|
||||
const char *name, void *dev)
|
||||
{
|
||||
return request_threaded_irq(irq, handler, NULL, flags, name, dev);
|
||||
}
|
||||
|
||||
extern void exit_irq_thread(void);
|
||||
#else
|
||||
|
||||
extern int __must_check
|
||||
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
|
||||
const char *name, void *dev);
|
||||
|
||||
/*
|
||||
* Special function to avoid ifdeffery in kernel/irq/devres.c which
|
||||
* gets magically built by GENERIC_HARDIRQS=n architectures (sparc,
|
||||
* m68k). I really love these $@%#!* obvious Makefile references:
|
||||
* ../../../kernel/irq/devres.o
|
||||
*/
|
||||
static inline int __must_check
|
||||
request_threaded_irq(unsigned int irq, irq_handler_t handler,
|
||||
irq_handler_t thread_fn,
|
||||
unsigned long flags, const char *name, void *dev)
|
||||
{
|
||||
return request_irq(irq, handler, flags, name, dev);
|
||||
}
|
||||
|
||||
static inline void exit_irq_thread(void) { }
|
||||
#endif
|
||||
|
||||
extern void free_irq(unsigned int, void *);
|
||||
|
||||
struct device;
|
||||
|
||||
extern int __must_check devm_request_irq(struct device *dev, unsigned int irq,
|
||||
irq_handler_t handler, unsigned long irqflags,
|
||||
const char *devname, void *dev_id);
|
||||
extern int __must_check
|
||||
devm_request_threaded_irq(struct device *dev, unsigned int irq,
|
||||
irq_handler_t handler, irq_handler_t thread_fn,
|
||||
unsigned long irqflags, const char *devname,
|
||||
void *dev_id);
|
||||
|
||||
static inline int __must_check
|
||||
devm_request_irq(struct device *dev, unsigned int irq, irq_handler_t handler,
|
||||
unsigned long irqflags, const char *devname, void *dev_id)
|
||||
{
|
||||
return devm_request_threaded_irq(dev, irq, handler, NULL, irqflags,
|
||||
devname, dev_id);
|
||||
}
|
||||
|
||||
extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id);
|
||||
|
||||
/*
|
||||
@@ -299,6 +364,7 @@ extern void softirq_init(void);
|
||||
#define __raise_softirq_irqoff(nr) do { or_softirq_pending(1UL << (nr)); } while (0)
|
||||
extern void raise_softirq_irqoff(unsigned int nr);
|
||||
extern void raise_softirq(unsigned int nr);
|
||||
extern void wakeup_softirqd(void);
|
||||
|
||||
/* This is the worklist that queues up per-cpu softirq work.
|
||||
*
|
||||
|
||||
@@ -25,7 +25,7 @@ struct ipc_ids {
|
||||
};
|
||||
|
||||
struct ipc_namespace {
|
||||
struct kref kref;
|
||||
atomic_t count;
|
||||
struct ipc_ids ids[3];
|
||||
|
||||
int sem_ctls[4];
|
||||
@@ -44,25 +44,57 @@ struct ipc_namespace {
|
||||
int shm_tot;
|
||||
|
||||
struct notifier_block ipcns_nb;
|
||||
|
||||
/* The kern_mount of the mqueuefs sb. We take a ref on it */
|
||||
struct vfsmount *mq_mnt;
|
||||
|
||||
/* # queues in this ns, protected by mq_lock */
|
||||
unsigned int mq_queues_count;
|
||||
|
||||
/* next fields are set through sysctl */
|
||||
unsigned int mq_queues_max; /* initialized to DFLT_QUEUESMAX */
|
||||
unsigned int mq_msg_max; /* initialized to DFLT_MSGMAX */
|
||||
unsigned int mq_msgsize_max; /* initialized to DFLT_MSGSIZEMAX */
|
||||
|
||||
};
|
||||
|
||||
extern struct ipc_namespace init_ipc_ns;
|
||||
extern atomic_t nr_ipc_ns;
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
extern spinlock_t mq_lock;
|
||||
#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
|
||||
#define INIT_IPC_NS(ns) .ns = &init_ipc_ns,
|
||||
#else
|
||||
#define INIT_IPC_NS(ns)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
extern int register_ipcns_notifier(struct ipc_namespace *);
|
||||
extern int cond_register_ipcns_notifier(struct ipc_namespace *);
|
||||
extern void unregister_ipcns_notifier(struct ipc_namespace *);
|
||||
extern int ipcns_notify(unsigned long);
|
||||
|
||||
#else /* CONFIG_SYSVIPC */
|
||||
#define INIT_IPC_NS(ns)
|
||||
static inline int register_ipcns_notifier(struct ipc_namespace *ns)
|
||||
{ return 0; }
|
||||
static inline int cond_register_ipcns_notifier(struct ipc_namespace *ns)
|
||||
{ return 0; }
|
||||
static inline void unregister_ipcns_notifier(struct ipc_namespace *ns) { }
|
||||
static inline int ipcns_notify(unsigned long l) { return 0; }
|
||||
#endif /* CONFIG_SYSVIPC */
|
||||
|
||||
#if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS)
|
||||
extern void free_ipc_ns(struct kref *kref);
|
||||
#ifdef CONFIG_POSIX_MQUEUE
|
||||
extern int mq_init_ns(struct ipc_namespace *ns);
|
||||
/* default values */
|
||||
#define DFLT_QUEUESMAX 256 /* max number of message queues */
|
||||
#define DFLT_MSGMAX 10 /* max number of messages in each queue */
|
||||
#define HARD_MSGMAX (131072/sizeof(void *))
|
||||
#define DFLT_MSGSIZEMAX 8192 /* max message size */
|
||||
#else
|
||||
static inline int mq_init_ns(struct ipc_namespace *ns) { return 0; }
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IPC_NS)
|
||||
extern void free_ipc_ns(struct ipc_namespace *ns);
|
||||
extern struct ipc_namespace *copy_ipcs(unsigned long flags,
|
||||
struct ipc_namespace *ns);
|
||||
extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
|
||||
@@ -72,14 +104,11 @@ extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
|
||||
static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
if (ns)
|
||||
kref_get(&ns->kref);
|
||||
atomic_inc(&ns->count);
|
||||
return ns;
|
||||
}
|
||||
|
||||
static inline void put_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
kref_put(&ns->kref, free_ipc_ns);
|
||||
}
|
||||
extern void put_ipc_ns(struct ipc_namespace *ns);
|
||||
#else
|
||||
static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
|
||||
struct ipc_namespace *ns)
|
||||
@@ -99,4 +128,18 @@ static inline void put_ipc_ns(struct ipc_namespace *ns)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_POSIX_MQUEUE_SYSCTL
|
||||
|
||||
struct ctl_table_header;
|
||||
extern struct ctl_table_header *mq_register_sysctl_table(void);
|
||||
|
||||
#else /* CONFIG_POSIX_MQUEUE_SYSCTL */
|
||||
|
||||
static inline struct ctl_table_header *mq_register_sysctl_table(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_POSIX_MQUEUE_SYSCTL */
|
||||
#endif
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <linux/irqnr.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/topology.h>
|
||||
#include <linux/wait.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/ptrace.h>
|
||||
@@ -158,6 +159,8 @@ struct irq_2_iommu;
|
||||
* @affinity: IRQ affinity on SMP
|
||||
* @cpu: cpu index useful for balancing
|
||||
* @pending_mask: pending rebalanced interrupts
|
||||
* @threads_active: number of irqaction threads currently running
|
||||
* @wait_for_threads: wait queue for sync_irq to wait for threaded handlers
|
||||
* @dir: /proc/irq/ procfs entry
|
||||
* @name: flow handler name for /proc/interrupts output
|
||||
*/
|
||||
@@ -189,6 +192,8 @@ struct irq_desc {
|
||||
cpumask_var_t pending_mask;
|
||||
#endif
|
||||
#endif
|
||||
atomic_t threads_active;
|
||||
wait_queue_head_t wait_for_threads;
|
||||
#ifdef CONFIG_PROC_FS
|
||||
struct proc_dir_entry *dir;
|
||||
#endif
|
||||
@@ -482,6 +487,16 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc,
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void free_desc_masks(struct irq_desc *old_desc,
|
||||
struct irq_desc *new_desc)
|
||||
{
|
||||
free_cpumask_var(old_desc->affinity);
|
||||
|
||||
#ifdef CONFIG_GENERIC_PENDING_IRQ
|
||||
free_cpumask_var(old_desc->pending_mask);
|
||||
#endif
|
||||
}
|
||||
|
||||
#else /* !CONFIG_SMP */
|
||||
|
||||
static inline bool init_alloc_desc_masks(struct irq_desc *desc, int cpu,
|
||||
@@ -495,6 +510,10 @@ static inline void init_copy_desc_masks(struct irq_desc *old_desc,
|
||||
{
|
||||
}
|
||||
|
||||
static inline void free_desc_masks(struct irq_desc *old_desc,
|
||||
struct irq_desc *new_desc)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#endif /* _LINUX_IRQ_H */
|
||||
|
||||
@@ -5,10 +5,12 @@
|
||||
* enum irqreturn
|
||||
* @IRQ_NONE interrupt was not from this device
|
||||
* @IRQ_HANDLED interrupt was handled by this device
|
||||
* @IRQ_WAKE_THREAD handler requests to wake the handler thread
|
||||
*/
|
||||
enum irqreturn {
|
||||
IRQ_NONE,
|
||||
IRQ_HANDLED,
|
||||
IRQ_WAKE_THREAD,
|
||||
};
|
||||
|
||||
typedef enum irqreturn irqreturn_t;
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <linux/rbtree.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/sysctl.h>
|
||||
#include <linux/rwsem.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
@@ -34,7 +34,7 @@ extern int __request_module(bool wait, const char *name, ...) \
|
||||
#define request_module(mod...) __request_module(true, mod)
|
||||
#define request_module_nowait(mod...) __request_module(false, mod)
|
||||
#define try_then_request_module(x, mod...) \
|
||||
((x) ?: (__request_module(false, mod), (x)))
|
||||
((x) ?: (__request_module(true, mod), (x)))
|
||||
#else
|
||||
static inline int request_module(const char *name, ...) { return -ENOSYS; }
|
||||
static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; }
|
||||
|
||||
+47
-5
@@ -94,12 +94,16 @@ struct kprobe {
|
||||
/* Called after addr is executed, unless... */
|
||||
kprobe_post_handler_t post_handler;
|
||||
|
||||
/* ... called if executing addr causes a fault (eg. page fault).
|
||||
* Return 1 if it handled fault, otherwise kernel will see it. */
|
||||
/*
|
||||
* ... called if executing addr causes a fault (eg. page fault).
|
||||
* Return 1 if it handled fault, otherwise kernel will see it.
|
||||
*/
|
||||
kprobe_fault_handler_t fault_handler;
|
||||
|
||||
/* ... called if breakpoint trap occurs in probe handler.
|
||||
* Return 1 if it handled break, otherwise kernel will see it. */
|
||||
/*
|
||||
* ... called if breakpoint trap occurs in probe handler.
|
||||
* Return 1 if it handled break, otherwise kernel will see it.
|
||||
*/
|
||||
kprobe_break_handler_t break_handler;
|
||||
|
||||
/* Saved opcode (which has been replaced with breakpoint) */
|
||||
@@ -108,18 +112,28 @@ struct kprobe {
|
||||
/* copy of the original instruction */
|
||||
struct arch_specific_insn ainsn;
|
||||
|
||||
/* Indicates various status flags. Protected by kprobe_mutex. */
|
||||
/*
|
||||
* Indicates various status flags.
|
||||
* Protected by kprobe_mutex after this kprobe is registered.
|
||||
*/
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
/* Kprobe status flags */
|
||||
#define KPROBE_FLAG_GONE 1 /* breakpoint has already gone */
|
||||
#define KPROBE_FLAG_DISABLED 2 /* probe is temporarily disabled */
|
||||
|
||||
/* Has this kprobe gone ? */
|
||||
static inline int kprobe_gone(struct kprobe *p)
|
||||
{
|
||||
return p->flags & KPROBE_FLAG_GONE;
|
||||
}
|
||||
|
||||
/* Is this kprobe disabled ? */
|
||||
static inline int kprobe_disabled(struct kprobe *p)
|
||||
{
|
||||
return p->flags & (KPROBE_FLAG_DISABLED | KPROBE_FLAG_GONE);
|
||||
}
|
||||
/*
|
||||
* Special probe type that uses setjmp-longjmp type tricks to resume
|
||||
* execution at a specified entry with a matching prototype corresponding
|
||||
@@ -279,6 +293,9 @@ void unregister_kretprobes(struct kretprobe **rps, int num);
|
||||
void kprobe_flush_task(struct task_struct *tk);
|
||||
void recycle_rp_inst(struct kretprobe_instance *ri, struct hlist_head *head);
|
||||
|
||||
int disable_kprobe(struct kprobe *kp);
|
||||
int enable_kprobe(struct kprobe *kp);
|
||||
|
||||
#else /* !CONFIG_KPROBES: */
|
||||
|
||||
static inline int kprobes_built_in(void)
|
||||
@@ -345,5 +362,30 @@ static inline void unregister_kretprobes(struct kretprobe **rps, int num)
|
||||
static inline void kprobe_flush_task(struct task_struct *tk)
|
||||
{
|
||||
}
|
||||
static inline int disable_kprobe(struct kprobe *kp)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
static inline int enable_kprobe(struct kprobe *kp)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif /* CONFIG_KPROBES */
|
||||
static inline int disable_kretprobe(struct kretprobe *rp)
|
||||
{
|
||||
return disable_kprobe(&rp->kp);
|
||||
}
|
||||
static inline int enable_kretprobe(struct kretprobe *rp)
|
||||
{
|
||||
return enable_kprobe(&rp->kp);
|
||||
}
|
||||
static inline int disable_jprobe(struct jprobe *jp)
|
||||
{
|
||||
return disable_kprobe(&jp->kp);
|
||||
}
|
||||
static inline int enable_jprobe(struct jprobe *jp)
|
||||
{
|
||||
return enable_kprobe(&jp->kp);
|
||||
}
|
||||
|
||||
#endif /* _LINUX_KPROBES_H */
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* leds-bd2802.h - RGB LED Driver
|
||||
*
|
||||
* Copyright (C) 2009 Samsung Electronics
|
||||
* Kim Kyuwon <q1.kim@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* Datasheet: http://www.rohm.com/products/databook/driver/pdf/bd2802gu-e.pdf
|
||||
*
|
||||
*/
|
||||
#ifndef _LEDS_BD2802_H_
|
||||
#define _LEDS_BD2802_H_
|
||||
|
||||
struct bd2802_led_platform_data{
|
||||
int reset_gpio;
|
||||
u8 rgb_time;
|
||||
};
|
||||
|
||||
#define RGB_TIME(slopedown, slopeup, waveform) \
|
||||
((slopedown) << 6 | (slopeup) << 4 | (waveform))
|
||||
|
||||
#endif /* _LEDS_BD2802_H_ */
|
||||
|
||||
@@ -30,6 +30,7 @@ enum led_brightness {
|
||||
struct led_classdev {
|
||||
const char *name;
|
||||
int brightness;
|
||||
int max_brightness;
|
||||
int flags;
|
||||
|
||||
/* Lower 16 bits reflect status */
|
||||
@@ -140,7 +141,8 @@ struct gpio_led {
|
||||
const char *name;
|
||||
const char *default_trigger;
|
||||
unsigned gpio;
|
||||
u8 active_low;
|
||||
u8 active_low : 1;
|
||||
u8 retain_state_suspended : 1;
|
||||
};
|
||||
|
||||
struct gpio_led_platform_data {
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* PWM LED driver data - see drivers/leds/leds-pwm.c
|
||||
*/
|
||||
#ifndef __LINUX_LEDS_PWM_H
|
||||
#define __LINUX_LEDS_PWM_H
|
||||
|
||||
struct led_pwm {
|
||||
const char *name;
|
||||
const char *default_trigger;
|
||||
unsigned pwm_id;
|
||||
u8 active_low;
|
||||
unsigned max_brightness;
|
||||
unsigned pwm_period_ns;
|
||||
};
|
||||
|
||||
struct led_pwm_platform_data {
|
||||
int num_leds;
|
||||
struct led_pwm *leds;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -25,13 +25,13 @@ struct svc_rqst;
|
||||
#define NLM_MAXCOOKIELEN 32
|
||||
#define NLM_MAXSTRLEN 1024
|
||||
|
||||
#define nlm_granted __constant_htonl(NLM_LCK_GRANTED)
|
||||
#define nlm_lck_denied __constant_htonl(NLM_LCK_DENIED)
|
||||
#define nlm_lck_denied_nolocks __constant_htonl(NLM_LCK_DENIED_NOLOCKS)
|
||||
#define nlm_lck_blocked __constant_htonl(NLM_LCK_BLOCKED)
|
||||
#define nlm_lck_denied_grace_period __constant_htonl(NLM_LCK_DENIED_GRACE_PERIOD)
|
||||
#define nlm_granted cpu_to_be32(NLM_LCK_GRANTED)
|
||||
#define nlm_lck_denied cpu_to_be32(NLM_LCK_DENIED)
|
||||
#define nlm_lck_denied_nolocks cpu_to_be32(NLM_LCK_DENIED_NOLOCKS)
|
||||
#define nlm_lck_blocked cpu_to_be32(NLM_LCK_BLOCKED)
|
||||
#define nlm_lck_denied_grace_period cpu_to_be32(NLM_LCK_DENIED_GRACE_PERIOD)
|
||||
|
||||
#define nlm_drop_reply __constant_htonl(30000)
|
||||
#define nlm_drop_reply cpu_to_be32(30000)
|
||||
|
||||
/* Lock info passed via NLM */
|
||||
struct nlm_lock {
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
#include <linux/lockd/xdr.h>
|
||||
|
||||
/* error codes new to NLMv4 */
|
||||
#define nlm4_deadlock __constant_htonl(NLM_DEADLCK)
|
||||
#define nlm4_rofs __constant_htonl(NLM_ROFS)
|
||||
#define nlm4_stale_fh __constant_htonl(NLM_STALE_FH)
|
||||
#define nlm4_fbig __constant_htonl(NLM_FBIG)
|
||||
#define nlm4_failed __constant_htonl(NLM_FAILED)
|
||||
#define nlm4_deadlock cpu_to_be32(NLM_DEADLCK)
|
||||
#define nlm4_rofs cpu_to_be32(NLM_ROFS)
|
||||
#define nlm4_stale_fh cpu_to_be32(NLM_STALE_FH)
|
||||
#define nlm4_fbig cpu_to_be32(NLM_FBIG)
|
||||
#define nlm4_failed cpu_to_be32(NLM_FAILED)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ struct pcf50633_platform_data {
|
||||
char **batteries;
|
||||
int num_batteries;
|
||||
|
||||
int charging_restart_interval;
|
||||
|
||||
/* Callbacks */
|
||||
void (*probe_done)(struct pcf50633 *);
|
||||
void (*mbc_event_callback)(struct pcf50633 *, int);
|
||||
|
||||
@@ -128,7 +128,6 @@ enum pcf50633_reg_mbcs3 {
|
||||
int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
|
||||
|
||||
int pcf50633_mbc_get_status(struct pcf50633 *);
|
||||
void pcf50633_mbc_set_status(struct pcf50633 *, int what, int status);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* include/linux/mg_disk.c
|
||||
*
|
||||
* Support for the mGine m[g]flash IO mode.
|
||||
* Based on legacy hd.c
|
||||
*
|
||||
* (c) 2008 mGine Co.,LTD
|
||||
* (c) 2008 unsik Kim <donari75@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __MG_DISK_H__
|
||||
#define __MG_DISK_H__
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/ata.h>
|
||||
|
||||
/* name for block device */
|
||||
#define MG_DISK_NAME "mgd"
|
||||
/* name for platform device */
|
||||
#define MG_DEV_NAME "mg_disk"
|
||||
|
||||
#define MG_DISK_MAJ 0
|
||||
#define MG_DISK_MAX_PART 16
|
||||
#define MG_SECTOR_SIZE 512
|
||||
#define MG_MAX_SECTS 256
|
||||
|
||||
/* Register offsets */
|
||||
#define MG_BUFF_OFFSET 0x8000
|
||||
#define MG_STORAGE_BUFFER_SIZE 0x200
|
||||
#define MG_REG_OFFSET 0xC000
|
||||
#define MG_REG_FEATURE (MG_REG_OFFSET + 2) /* write case */
|
||||
#define MG_REG_ERROR (MG_REG_OFFSET + 2) /* read case */
|
||||
#define MG_REG_SECT_CNT (MG_REG_OFFSET + 4)
|
||||
#define MG_REG_SECT_NUM (MG_REG_OFFSET + 6)
|
||||
#define MG_REG_CYL_LOW (MG_REG_OFFSET + 8)
|
||||
#define MG_REG_CYL_HIGH (MG_REG_OFFSET + 0xA)
|
||||
#define MG_REG_DRV_HEAD (MG_REG_OFFSET + 0xC)
|
||||
#define MG_REG_COMMAND (MG_REG_OFFSET + 0xE) /* write case */
|
||||
#define MG_REG_STATUS (MG_REG_OFFSET + 0xE) /* read case */
|
||||
#define MG_REG_DRV_CTRL (MG_REG_OFFSET + 0x10)
|
||||
#define MG_REG_BURST_CTRL (MG_REG_OFFSET + 0x12)
|
||||
|
||||
/* "Drive Select/Head Register" bit values */
|
||||
#define MG_REG_HEAD_MUST_BE_ON 0xA0 /* These 2 bits are always on */
|
||||
#define MG_REG_HEAD_DRIVE_MASTER (0x00 | MG_REG_HEAD_MUST_BE_ON)
|
||||
#define MG_REG_HEAD_DRIVE_SLAVE (0x10 | MG_REG_HEAD_MUST_BE_ON)
|
||||
#define MG_REG_HEAD_LBA_MODE (0x40 | MG_REG_HEAD_MUST_BE_ON)
|
||||
|
||||
|
||||
/* "Device Control Register" bit values */
|
||||
#define MG_REG_CTRL_INTR_ENABLE 0x0
|
||||
#define MG_REG_CTRL_INTR_DISABLE (0x1<<1)
|
||||
#define MG_REG_CTRL_RESET (0x1<<2)
|
||||
#define MG_REG_CTRL_INTR_POLA_ACTIVE_HIGH 0x0
|
||||
#define MG_REG_CTRL_INTR_POLA_ACTIVE_LOW (0x1<<4)
|
||||
#define MG_REG_CTRL_DPD_POLA_ACTIVE_LOW 0x0
|
||||
#define MG_REG_CTRL_DPD_POLA_ACTIVE_HIGH (0x1<<5)
|
||||
#define MG_REG_CTRL_DPD_DISABLE 0x0
|
||||
#define MG_REG_CTRL_DPD_ENABLE (0x1<<6)
|
||||
|
||||
/* Status register bit */
|
||||
/* error bit in status register */
|
||||
#define MG_REG_STATUS_BIT_ERROR 0x01
|
||||
/* corrected error in status register */
|
||||
#define MG_REG_STATUS_BIT_CORRECTED_ERROR 0x04
|
||||
/* data request bit in status register */
|
||||
#define MG_REG_STATUS_BIT_DATA_REQ 0x08
|
||||
/* DSC - Drive Seek Complete */
|
||||
#define MG_REG_STATUS_BIT_SEEK_DONE 0x10
|
||||
/* DWF - Drive Write Fault */
|
||||
#define MG_REG_STATUS_BIT_WRITE_FAULT 0x20
|
||||
#define MG_REG_STATUS_BIT_READY 0x40
|
||||
#define MG_REG_STATUS_BIT_BUSY 0x80
|
||||
|
||||
/* handy status */
|
||||
#define MG_STAT_READY (MG_REG_STATUS_BIT_READY | MG_REG_STATUS_BIT_SEEK_DONE)
|
||||
#define MG_READY_OK(s) (((s) & (MG_STAT_READY | \
|
||||
(MG_REG_STATUS_BIT_BUSY | \
|
||||
MG_REG_STATUS_BIT_WRITE_FAULT | \
|
||||
MG_REG_STATUS_BIT_ERROR))) == MG_STAT_READY)
|
||||
|
||||
/* Error register */
|
||||
#define MG_REG_ERR_AMNF 0x01
|
||||
#define MG_REG_ERR_ABRT 0x04
|
||||
#define MG_REG_ERR_IDNF 0x10
|
||||
#define MG_REG_ERR_UNC 0x40
|
||||
#define MG_REG_ERR_BBK 0x80
|
||||
|
||||
/* error code for others */
|
||||
#define MG_ERR_NONE 0
|
||||
#define MG_ERR_TIMEOUT 0x100
|
||||
#define MG_ERR_INIT_STAT 0x101
|
||||
#define MG_ERR_TRANSLATION 0x102
|
||||
#define MG_ERR_CTRL_RST 0x103
|
||||
#define MG_ERR_INV_STAT 0x104
|
||||
#define MG_ERR_RSTOUT 0x105
|
||||
|
||||
#define MG_MAX_ERRORS 6 /* Max read/write errors */
|
||||
|
||||
/* command */
|
||||
#define MG_CMD_RD 0x20
|
||||
#define MG_CMD_WR 0x30
|
||||
#define MG_CMD_SLEEP 0x99
|
||||
#define MG_CMD_WAKEUP 0xC3
|
||||
#define MG_CMD_ID 0xEC
|
||||
#define MG_CMD_WR_CONF 0x3C
|
||||
#define MG_CMD_RD_CONF 0x40
|
||||
|
||||
/* operation mode */
|
||||
#define MG_OP_CASCADE (1 << 0)
|
||||
#define MG_OP_CASCADE_SYNC_RD (1 << 1)
|
||||
#define MG_OP_CASCADE_SYNC_WR (1 << 2)
|
||||
#define MG_OP_INTERLEAVE (1 << 3)
|
||||
|
||||
/* synchronous */
|
||||
#define MG_BURST_LAT_4 (3 << 4)
|
||||
#define MG_BURST_LAT_5 (4 << 4)
|
||||
#define MG_BURST_LAT_6 (5 << 4)
|
||||
#define MG_BURST_LAT_7 (6 << 4)
|
||||
#define MG_BURST_LAT_8 (7 << 4)
|
||||
#define MG_BURST_LEN_4 (1 << 1)
|
||||
#define MG_BURST_LEN_8 (2 << 1)
|
||||
#define MG_BURST_LEN_16 (3 << 1)
|
||||
#define MG_BURST_LEN_32 (4 << 1)
|
||||
#define MG_BURST_LEN_CONT (0 << 1)
|
||||
|
||||
/* timeout value (unit: ms) */
|
||||
#define MG_TMAX_CONF_TO_CMD 1
|
||||
#define MG_TMAX_WAIT_RD_DRQ 10
|
||||
#define MG_TMAX_WAIT_WR_DRQ 500
|
||||
#define MG_TMAX_RST_TO_BUSY 10
|
||||
#define MG_TMAX_HDRST_TO_RDY 500
|
||||
#define MG_TMAX_SWRST_TO_RDY 500
|
||||
#define MG_TMAX_RSTOUT 3000
|
||||
|
||||
/* device attribution */
|
||||
/* use mflash as boot device */
|
||||
#define MG_BOOT_DEV (1 << 0)
|
||||
/* use mflash as storage device */
|
||||
#define MG_STORAGE_DEV (1 << 1)
|
||||
/* same as MG_STORAGE_DEV, but bootloader already done reset sequence */
|
||||
#define MG_STORAGE_DEV_SKIP_RST (1 << 2)
|
||||
|
||||
#define MG_DEV_MASK (MG_BOOT_DEV | MG_STORAGE_DEV | MG_STORAGE_DEV_SKIP_RST)
|
||||
|
||||
/* names of GPIO resource */
|
||||
#define MG_RST_PIN "mg_rst"
|
||||
/* except MG_BOOT_DEV, reset-out pin should be assigned */
|
||||
#define MG_RSTOUT_PIN "mg_rstout"
|
||||
|
||||
/* private driver data */
|
||||
struct mg_drv_data {
|
||||
/* disk resource */
|
||||
u32 use_polling;
|
||||
|
||||
/* device attribution */
|
||||
u32 dev_attr;
|
||||
|
||||
/* internally used */
|
||||
struct mg_host *host;
|
||||
};
|
||||
|
||||
/* main structure for mflash driver */
|
||||
struct mg_host {
|
||||
struct device *dev;
|
||||
|
||||
struct request_queue *breq;
|
||||
spinlock_t lock;
|
||||
struct gendisk *gd;
|
||||
|
||||
struct timer_list timer;
|
||||
void (*mg_do_intr) (struct mg_host *);
|
||||
|
||||
u16 id[ATA_ID_WORDS];
|
||||
|
||||
u16 cyls;
|
||||
u16 heads;
|
||||
u16 sectors;
|
||||
u32 n_sectors;
|
||||
u32 nres_sectors;
|
||||
|
||||
void __iomem *dev_base;
|
||||
unsigned int irq;
|
||||
unsigned int rst;
|
||||
unsigned int rstout;
|
||||
|
||||
u32 major;
|
||||
u32 error;
|
||||
};
|
||||
|
||||
/*
|
||||
* Debugging macro and defines
|
||||
*/
|
||||
#undef DO_MG_DEBUG
|
||||
#ifdef DO_MG_DEBUG
|
||||
# define MG_DBG(fmt, args...) \
|
||||
printk(KERN_DEBUG "%s:%d "fmt, __func__, __LINE__, ##args)
|
||||
#else /* CONFIG_MG_DEBUG */
|
||||
# define MG_DBG(fmt, args...) do { } while (0)
|
||||
#endif /* CONFIG_MG_DEBUG */
|
||||
|
||||
#endif
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include <linux/mtd/compatmac.h>
|
||||
#include <mtd/mtd-abi.h>
|
||||
@@ -162,6 +163,20 @@ struct mtd_info {
|
||||
/* We probably shouldn't allow XIP if the unpoint isn't a NULL */
|
||||
void (*unpoint) (struct mtd_info *mtd, loff_t from, size_t len);
|
||||
|
||||
/* Allow NOMMU mmap() to directly map the device (if not NULL)
|
||||
* - return the address to which the offset maps
|
||||
* - return -ENOSYS to indicate refusal to do the mapping
|
||||
*/
|
||||
unsigned long (*get_unmapped_area) (struct mtd_info *mtd,
|
||||
unsigned long len,
|
||||
unsigned long offset,
|
||||
unsigned long flags);
|
||||
|
||||
/* Backing device capabilities for this device
|
||||
* - provides mmap capabilities
|
||||
*/
|
||||
struct backing_dev_info *backing_dev_info;
|
||||
|
||||
|
||||
int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
|
||||
int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
|
||||
@@ -223,6 +238,7 @@ struct mtd_info {
|
||||
void *priv;
|
||||
|
||||
struct module *owner;
|
||||
struct device dev;
|
||||
int usecount;
|
||||
|
||||
/* If the driver is something smart, like UBI, it may need to maintain
|
||||
@@ -233,6 +249,11 @@ struct mtd_info {
|
||||
void (*put_device) (struct mtd_info *mtd);
|
||||
};
|
||||
|
||||
static inline struct mtd_info *dev_to_mtd(struct device *dev)
|
||||
{
|
||||
return dev ? container_of(dev, struct mtd_info, dev) : NULL;
|
||||
}
|
||||
|
||||
static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
|
||||
{
|
||||
if (mtd->erasesize_shift)
|
||||
|
||||
@@ -43,8 +43,8 @@ extern void nand_wait_ready(struct mtd_info *mtd);
|
||||
* is supported now. If you add a chip with bigger oobsize/page
|
||||
* adjust this accordingly.
|
||||
*/
|
||||
#define NAND_MAX_OOBSIZE 64
|
||||
#define NAND_MAX_PAGESIZE 2048
|
||||
#define NAND_MAX_OOBSIZE 128
|
||||
#define NAND_MAX_PAGESIZE 4096
|
||||
|
||||
/*
|
||||
* Constants for hardware specific CLE/ALE/NCE function
|
||||
|
||||
@@ -76,4 +76,16 @@ int __devinit of_mtd_parse_partitions(struct device *dev,
|
||||
struct device_node *node,
|
||||
struct mtd_partition **pparts);
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static inline int mtd_has_partitions(void) { return 1; }
|
||||
#else
|
||||
static inline int mtd_has_partitions(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MTD_CMDLINE_PARTS
|
||||
static inline int mtd_has_cmdlinepart(void) { return 1; }
|
||||
#else
|
||||
static inline int mtd_has_cmdlinepart(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
NFSERR_FILE_OPEN = 10046, /* v4 */
|
||||
NFSERR_ADMIN_REVOKED = 10047, /* v4 */
|
||||
NFSERR_CB_PATH_DOWN = 10048, /* v4 */
|
||||
NFSERR_REPLAY_ME = 10049 /* v4 */
|
||||
};
|
||||
|
||||
/* NFSv2 file types - beware, these are not the same in NFSv3 */
|
||||
|
||||
+136
-2
@@ -21,6 +21,7 @@
|
||||
#define NFS4_FHSIZE 128
|
||||
#define NFS4_MAXPATHLEN PATH_MAX
|
||||
#define NFS4_MAXNAMLEN NAME_MAX
|
||||
#define NFS4_MAX_SESSIONID_LEN 16
|
||||
|
||||
#define NFS4_ACCESS_READ 0x0001
|
||||
#define NFS4_ACCESS_LOOKUP 0x0002
|
||||
@@ -38,6 +39,7 @@
|
||||
#define NFS4_OPEN_RESULT_CONFIRM 0x0002
|
||||
#define NFS4_OPEN_RESULT_LOCKTYPE_POSIX 0x0004
|
||||
|
||||
#define NFS4_SHARE_ACCESS_MASK 0x000F
|
||||
#define NFS4_SHARE_ACCESS_READ 0x0001
|
||||
#define NFS4_SHARE_ACCESS_WRITE 0x0002
|
||||
#define NFS4_SHARE_ACCESS_BOTH 0x0003
|
||||
@@ -45,6 +47,19 @@
|
||||
#define NFS4_SHARE_DENY_WRITE 0x0002
|
||||
#define NFS4_SHARE_DENY_BOTH 0x0003
|
||||
|
||||
/* nfs41 */
|
||||
#define NFS4_SHARE_WANT_MASK 0xFF00
|
||||
#define NFS4_SHARE_WANT_NO_PREFERENCE 0x0000
|
||||
#define NFS4_SHARE_WANT_READ_DELEG 0x0100
|
||||
#define NFS4_SHARE_WANT_WRITE_DELEG 0x0200
|
||||
#define NFS4_SHARE_WANT_ANY_DELEG 0x0300
|
||||
#define NFS4_SHARE_WANT_NO_DELEG 0x0400
|
||||
#define NFS4_SHARE_WANT_CANCEL 0x0500
|
||||
|
||||
#define NFS4_SHARE_WHEN_MASK 0xF0000
|
||||
#define NFS4_SHARE_SIGNAL_DELEG_WHEN_RESRC_AVAIL 0x10000
|
||||
#define NFS4_SHARE_PUSH_DELEG_WHEN_UNCONTENDED 0x20000
|
||||
|
||||
#define NFS4_SET_TO_SERVER_TIME 0
|
||||
#define NFS4_SET_TO_CLIENT_TIME 1
|
||||
|
||||
@@ -88,6 +103,31 @@
|
||||
#define NFS4_ACE_GENERIC_EXECUTE 0x001200A0
|
||||
#define NFS4_ACE_MASK_ALL 0x001F01FF
|
||||
|
||||
#define EXCHGID4_FLAG_SUPP_MOVED_REFER 0x00000001
|
||||
#define EXCHGID4_FLAG_SUPP_MOVED_MIGR 0x00000002
|
||||
#define EXCHGID4_FLAG_USE_NON_PNFS 0x00010000
|
||||
#define EXCHGID4_FLAG_USE_PNFS_MDS 0x00020000
|
||||
#define EXCHGID4_FLAG_USE_PNFS_DS 0x00040000
|
||||
#define EXCHGID4_FLAG_UPD_CONFIRMED_REC_A 0x40000000
|
||||
#define EXCHGID4_FLAG_CONFIRMED_R 0x80000000
|
||||
/*
|
||||
* Since the validity of these bits depends on whether
|
||||
* they're set in the argument or response, have separate
|
||||
* invalid flag masks for arg (_A) and resp (_R).
|
||||
*/
|
||||
#define EXCHGID4_FLAG_MASK_A 0x40070003
|
||||
#define EXCHGID4_FLAG_MASK_R 0x80070003
|
||||
|
||||
#define SEQ4_STATUS_CB_PATH_DOWN 0x00000001
|
||||
#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002
|
||||
#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRED 0x00000004
|
||||
#define SEQ4_STATUS_EXPIRED_ALL_STATE_REVOKED 0x00000008
|
||||
#define SEQ4_STATUS_EXPIRED_SOME_STATE_REVOKED 0x00000010
|
||||
#define SEQ4_STATUS_ADMIN_STATE_REVOKED 0x00000020
|
||||
#define SEQ4_STATUS_RECALLABLE_STATE_REVOKED 0x00000040
|
||||
#define SEQ4_STATUS_LEASE_MOVED 0x00000080
|
||||
#define SEQ4_STATUS_RESTART_RECLAIM_NEEDED 0x00000100
|
||||
|
||||
#define NFS4_MAX_UINT64 (~(u64)0)
|
||||
|
||||
enum nfs4_acl_whotype {
|
||||
@@ -154,6 +194,28 @@ enum nfs_opnum4 {
|
||||
OP_VERIFY = 37,
|
||||
OP_WRITE = 38,
|
||||
OP_RELEASE_LOCKOWNER = 39,
|
||||
|
||||
/* nfs41 */
|
||||
OP_BACKCHANNEL_CTL = 40,
|
||||
OP_BIND_CONN_TO_SESSION = 41,
|
||||
OP_EXCHANGE_ID = 42,
|
||||
OP_CREATE_SESSION = 43,
|
||||
OP_DESTROY_SESSION = 44,
|
||||
OP_FREE_STATEID = 45,
|
||||
OP_GET_DIR_DELEGATION = 46,
|
||||
OP_GETDEVICEINFO = 47,
|
||||
OP_GETDEVICELIST = 48,
|
||||
OP_LAYOUTCOMMIT = 49,
|
||||
OP_LAYOUTGET = 50,
|
||||
OP_LAYOUTRETURN = 51,
|
||||
OP_SECINFO_NO_NAME = 52,
|
||||
OP_SEQUENCE = 53,
|
||||
OP_SET_SSV = 54,
|
||||
OP_TEST_STATEID = 55,
|
||||
OP_WANT_DELEGATION = 56,
|
||||
OP_DESTROY_CLIENTID = 57,
|
||||
OP_RECLAIM_COMPLETE = 58,
|
||||
|
||||
OP_ILLEGAL = 10044,
|
||||
};
|
||||
|
||||
@@ -230,7 +292,48 @@ enum nfsstat4 {
|
||||
NFS4ERR_DEADLOCK = 10045,
|
||||
NFS4ERR_FILE_OPEN = 10046,
|
||||
NFS4ERR_ADMIN_REVOKED = 10047,
|
||||
NFS4ERR_CB_PATH_DOWN = 10048
|
||||
NFS4ERR_CB_PATH_DOWN = 10048,
|
||||
|
||||
/* nfs41 */
|
||||
NFS4ERR_BADIOMODE = 10049,
|
||||
NFS4ERR_BADLAYOUT = 10050,
|
||||
NFS4ERR_BAD_SESSION_DIGEST = 10051,
|
||||
NFS4ERR_BADSESSION = 10052,
|
||||
NFS4ERR_BADSLOT = 10053,
|
||||
NFS4ERR_COMPLETE_ALREADY = 10054,
|
||||
NFS4ERR_CONN_NOT_BOUND_TO_SESSION = 10055,
|
||||
NFS4ERR_DELEG_ALREADY_WANTED = 10056,
|
||||
NFS4ERR_BACK_CHAN_BUSY = 10057, /* backchan reqs outstanding */
|
||||
NFS4ERR_LAYOUTTRYLATER = 10058,
|
||||
NFS4ERR_LAYOUTUNAVAILABLE = 10059,
|
||||
NFS4ERR_NOMATCHING_LAYOUT = 10060,
|
||||
NFS4ERR_RECALLCONFLICT = 10061,
|
||||
NFS4ERR_UNKNOWN_LAYOUTTYPE = 10062,
|
||||
NFS4ERR_SEQ_MISORDERED = 10063, /* unexpected seq.id in req */
|
||||
NFS4ERR_SEQUENCE_POS = 10064, /* [CB_]SEQ. op not 1st op */
|
||||
NFS4ERR_REQ_TOO_BIG = 10065, /* request too big */
|
||||
NFS4ERR_REP_TOO_BIG = 10066, /* reply too big */
|
||||
NFS4ERR_REP_TOO_BIG_TO_CACHE = 10067, /* rep. not all cached */
|
||||
NFS4ERR_RETRY_UNCACHED_REP = 10068, /* retry & rep. uncached */
|
||||
NFS4ERR_UNSAFE_COMPOUND = 10069, /* retry/recovery too hard */
|
||||
NFS4ERR_TOO_MANY_OPS = 10070, /* too many ops in [CB_]COMP */
|
||||
NFS4ERR_OP_NOT_IN_SESSION = 10071, /* op needs [CB_]SEQ. op */
|
||||
NFS4ERR_HASH_ALG_UNSUPP = 10072, /* hash alg. not supp. */
|
||||
/* Error 10073 is unused. */
|
||||
NFS4ERR_CLIENTID_BUSY = 10074, /* clientid has state */
|
||||
NFS4ERR_PNFS_IO_HOLE = 10075, /* IO to _SPARSE file hole */
|
||||
NFS4ERR_SEQ_FALSE_RETRY = 10076, /* retry not origional */
|
||||
NFS4ERR_BAD_HIGH_SLOT = 10077, /* sequence arg bad */
|
||||
NFS4ERR_DEADSESSION = 10078, /* persistent session dead */
|
||||
NFS4ERR_ENCR_ALG_UNSUPP = 10079, /* SSV alg mismatch */
|
||||
NFS4ERR_PNFS_NO_LAYOUT = 10080, /* direct I/O with no layout */
|
||||
NFS4ERR_NOT_ONLY_OP = 10081, /* bad compound */
|
||||
NFS4ERR_WRONG_CRED = 10082, /* permissions:state change */
|
||||
NFS4ERR_WRONG_TYPE = 10083, /* current operation mismatch */
|
||||
NFS4ERR_DIRDELEG_UNAVAIL = 10084, /* no directory delegation */
|
||||
NFS4ERR_REJECT_DELEG = 10085, /* on callback */
|
||||
NFS4ERR_RETURNCONFLICT = 10086, /* outstanding layoutreturn */
|
||||
NFS4ERR_DELEG_REVOKED = 10087, /* deleg./layout revoked */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -265,7 +368,13 @@ enum opentype4 {
|
||||
enum createmode4 {
|
||||
NFS4_CREATE_UNCHECKED = 0,
|
||||
NFS4_CREATE_GUARDED = 1,
|
||||
NFS4_CREATE_EXCLUSIVE = 2
|
||||
NFS4_CREATE_EXCLUSIVE = 2,
|
||||
/*
|
||||
* New to NFSv4.1. If session is persistent,
|
||||
* GUARDED4 MUST be used. Otherwise, use
|
||||
* EXCLUSIVE4_1 instead of EXCLUSIVE4.
|
||||
*/
|
||||
NFS4_CREATE_EXCLUSIVE4_1 = 3
|
||||
};
|
||||
|
||||
enum limit_by4 {
|
||||
@@ -301,6 +410,8 @@ enum lock_type4 {
|
||||
#define FATTR4_WORD0_UNIQUE_HANDLES (1UL << 9)
|
||||
#define FATTR4_WORD0_LEASE_TIME (1UL << 10)
|
||||
#define FATTR4_WORD0_RDATTR_ERROR (1UL << 11)
|
||||
/* Mandatory in NFSv4.1 */
|
||||
#define FATTR4_WORD2_SUPPATTR_EXCLCREAT (1UL << 11)
|
||||
|
||||
/* Recommended Attributes */
|
||||
#define FATTR4_WORD0_ACL (1UL << 12)
|
||||
@@ -391,6 +502,29 @@ enum {
|
||||
NFSPROC4_CLNT_GETACL,
|
||||
NFSPROC4_CLNT_SETACL,
|
||||
NFSPROC4_CLNT_FS_LOCATIONS,
|
||||
|
||||
/* nfs41 */
|
||||
NFSPROC4_CLNT_EXCHANGE_ID,
|
||||
NFSPROC4_CLNT_CREATE_SESSION,
|
||||
NFSPROC4_CLNT_DESTROY_SESSION,
|
||||
NFSPROC4_CLNT_SEQUENCE,
|
||||
NFSPROC4_CLNT_GET_LEASE_TIME,
|
||||
};
|
||||
|
||||
/* nfs41 types */
|
||||
struct nfs4_sessionid {
|
||||
unsigned char data[NFS4_MAX_SESSIONID_LEN];
|
||||
};
|
||||
|
||||
/* Create Session Flags */
|
||||
#define SESSION4_PERSIST 0x001
|
||||
#define SESSION4_BACK_CHAN 0x002
|
||||
#define SESSION4_RDMA 0x004
|
||||
|
||||
enum state_protect_how4 {
|
||||
SP4_NONE = 0,
|
||||
SP4_MACH_CRED = 1,
|
||||
SP4_SSV = 2
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -76,4 +76,12 @@ void nfsd_reply_cache_shutdown(void);
|
||||
int nfsd_cache_lookup(struct svc_rqst *, int);
|
||||
void nfsd_cache_update(struct svc_rqst *, int, __be32 *);
|
||||
|
||||
#ifdef CONFIG_NFSD_V4
|
||||
void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
|
||||
#else /* CONFIG_NFSD_V4 */
|
||||
static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_NFSD_V4 */
|
||||
|
||||
#endif /* NFSCACHE_H */
|
||||
|
||||
+155
-70
@@ -23,7 +23,7 @@
|
||||
/*
|
||||
* nfsd version
|
||||
*/
|
||||
#define NFSD_SUPPORTED_MINOR_VERSION 0
|
||||
#define NFSD_SUPPORTED_MINOR_VERSION 1
|
||||
|
||||
/*
|
||||
* Flags for nfsd_permission
|
||||
@@ -53,6 +53,7 @@ typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
|
||||
extern struct svc_program nfsd_program;
|
||||
extern struct svc_version nfsd_version2, nfsd_version3,
|
||||
nfsd_version4;
|
||||
extern u32 nfsd_supported_minorversion;
|
||||
extern struct mutex nfsd_mutex;
|
||||
extern struct svc_serv *nfsd_serv;
|
||||
|
||||
@@ -105,7 +106,7 @@ void nfsd_close(struct file *);
|
||||
__be32 nfsd_read(struct svc_rqst *, struct svc_fh *, struct file *,
|
||||
loff_t, struct kvec *, int, unsigned long *);
|
||||
__be32 nfsd_write(struct svc_rqst *, struct svc_fh *,struct file *,
|
||||
loff_t, struct kvec *,int, unsigned long, int *);
|
||||
loff_t, struct kvec *,int, unsigned long *, int *);
|
||||
__be32 nfsd_readlink(struct svc_rqst *, struct svc_fh *,
|
||||
char *, int *);
|
||||
__be32 nfsd_symlink(struct svc_rqst *, struct svc_fh *,
|
||||
@@ -149,6 +150,7 @@ int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
|
||||
|
||||
enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
|
||||
int nfsd_vers(int vers, enum vers_op change);
|
||||
int nfsd_minorversion(u32 minorversion, enum vers_op change);
|
||||
void nfsd_reset_versions(void);
|
||||
int nfsd_create_serv(void);
|
||||
|
||||
@@ -186,78 +188,119 @@ void nfsd_lockd_shutdown(void);
|
||||
/*
|
||||
* These macros provide pre-xdr'ed values for faster operation.
|
||||
*/
|
||||
#define nfs_ok __constant_htonl(NFS_OK)
|
||||
#define nfserr_perm __constant_htonl(NFSERR_PERM)
|
||||
#define nfserr_noent __constant_htonl(NFSERR_NOENT)
|
||||
#define nfserr_io __constant_htonl(NFSERR_IO)
|
||||
#define nfserr_nxio __constant_htonl(NFSERR_NXIO)
|
||||
#define nfserr_eagain __constant_htonl(NFSERR_EAGAIN)
|
||||
#define nfserr_acces __constant_htonl(NFSERR_ACCES)
|
||||
#define nfserr_exist __constant_htonl(NFSERR_EXIST)
|
||||
#define nfserr_xdev __constant_htonl(NFSERR_XDEV)
|
||||
#define nfserr_nodev __constant_htonl(NFSERR_NODEV)
|
||||
#define nfserr_notdir __constant_htonl(NFSERR_NOTDIR)
|
||||
#define nfserr_isdir __constant_htonl(NFSERR_ISDIR)
|
||||
#define nfserr_inval __constant_htonl(NFSERR_INVAL)
|
||||
#define nfserr_fbig __constant_htonl(NFSERR_FBIG)
|
||||
#define nfserr_nospc __constant_htonl(NFSERR_NOSPC)
|
||||
#define nfserr_rofs __constant_htonl(NFSERR_ROFS)
|
||||
#define nfserr_mlink __constant_htonl(NFSERR_MLINK)
|
||||
#define nfserr_opnotsupp __constant_htonl(NFSERR_OPNOTSUPP)
|
||||
#define nfserr_nametoolong __constant_htonl(NFSERR_NAMETOOLONG)
|
||||
#define nfserr_notempty __constant_htonl(NFSERR_NOTEMPTY)
|
||||
#define nfserr_dquot __constant_htonl(NFSERR_DQUOT)
|
||||
#define nfserr_stale __constant_htonl(NFSERR_STALE)
|
||||
#define nfserr_remote __constant_htonl(NFSERR_REMOTE)
|
||||
#define nfserr_wflush __constant_htonl(NFSERR_WFLUSH)
|
||||
#define nfserr_badhandle __constant_htonl(NFSERR_BADHANDLE)
|
||||
#define nfserr_notsync __constant_htonl(NFSERR_NOT_SYNC)
|
||||
#define nfserr_badcookie __constant_htonl(NFSERR_BAD_COOKIE)
|
||||
#define nfserr_notsupp __constant_htonl(NFSERR_NOTSUPP)
|
||||
#define nfserr_toosmall __constant_htonl(NFSERR_TOOSMALL)
|
||||
#define nfserr_serverfault __constant_htonl(NFSERR_SERVERFAULT)
|
||||
#define nfserr_badtype __constant_htonl(NFSERR_BADTYPE)
|
||||
#define nfserr_jukebox __constant_htonl(NFSERR_JUKEBOX)
|
||||
#define nfserr_denied __constant_htonl(NFSERR_DENIED)
|
||||
#define nfserr_deadlock __constant_htonl(NFSERR_DEADLOCK)
|
||||
#define nfserr_expired __constant_htonl(NFSERR_EXPIRED)
|
||||
#define nfserr_bad_cookie __constant_htonl(NFSERR_BAD_COOKIE)
|
||||
#define nfserr_same __constant_htonl(NFSERR_SAME)
|
||||
#define nfserr_clid_inuse __constant_htonl(NFSERR_CLID_INUSE)
|
||||
#define nfserr_stale_clientid __constant_htonl(NFSERR_STALE_CLIENTID)
|
||||
#define nfserr_resource __constant_htonl(NFSERR_RESOURCE)
|
||||
#define nfserr_moved __constant_htonl(NFSERR_MOVED)
|
||||
#define nfserr_nofilehandle __constant_htonl(NFSERR_NOFILEHANDLE)
|
||||
#define nfserr_minor_vers_mismatch __constant_htonl(NFSERR_MINOR_VERS_MISMATCH)
|
||||
#define nfserr_share_denied __constant_htonl(NFSERR_SHARE_DENIED)
|
||||
#define nfserr_stale_stateid __constant_htonl(NFSERR_STALE_STATEID)
|
||||
#define nfserr_old_stateid __constant_htonl(NFSERR_OLD_STATEID)
|
||||
#define nfserr_bad_stateid __constant_htonl(NFSERR_BAD_STATEID)
|
||||
#define nfserr_bad_seqid __constant_htonl(NFSERR_BAD_SEQID)
|
||||
#define nfserr_symlink __constant_htonl(NFSERR_SYMLINK)
|
||||
#define nfserr_not_same __constant_htonl(NFSERR_NOT_SAME)
|
||||
#define nfserr_restorefh __constant_htonl(NFSERR_RESTOREFH)
|
||||
#define nfserr_attrnotsupp __constant_htonl(NFSERR_ATTRNOTSUPP)
|
||||
#define nfserr_bad_xdr __constant_htonl(NFSERR_BAD_XDR)
|
||||
#define nfserr_openmode __constant_htonl(NFSERR_OPENMODE)
|
||||
#define nfserr_locks_held __constant_htonl(NFSERR_LOCKS_HELD)
|
||||
#define nfserr_op_illegal __constant_htonl(NFSERR_OP_ILLEGAL)
|
||||
#define nfserr_grace __constant_htonl(NFSERR_GRACE)
|
||||
#define nfserr_no_grace __constant_htonl(NFSERR_NO_GRACE)
|
||||
#define nfserr_reclaim_bad __constant_htonl(NFSERR_RECLAIM_BAD)
|
||||
#define nfserr_badname __constant_htonl(NFSERR_BADNAME)
|
||||
#define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN)
|
||||
#define nfserr_locked __constant_htonl(NFSERR_LOCKED)
|
||||
#define nfserr_wrongsec __constant_htonl(NFSERR_WRONGSEC)
|
||||
#define nfserr_replay_me __constant_htonl(NFSERR_REPLAY_ME)
|
||||
#define nfs_ok cpu_to_be32(NFS_OK)
|
||||
#define nfserr_perm cpu_to_be32(NFSERR_PERM)
|
||||
#define nfserr_noent cpu_to_be32(NFSERR_NOENT)
|
||||
#define nfserr_io cpu_to_be32(NFSERR_IO)
|
||||
#define nfserr_nxio cpu_to_be32(NFSERR_NXIO)
|
||||
#define nfserr_eagain cpu_to_be32(NFSERR_EAGAIN)
|
||||
#define nfserr_acces cpu_to_be32(NFSERR_ACCES)
|
||||
#define nfserr_exist cpu_to_be32(NFSERR_EXIST)
|
||||
#define nfserr_xdev cpu_to_be32(NFSERR_XDEV)
|
||||
#define nfserr_nodev cpu_to_be32(NFSERR_NODEV)
|
||||
#define nfserr_notdir cpu_to_be32(NFSERR_NOTDIR)
|
||||
#define nfserr_isdir cpu_to_be32(NFSERR_ISDIR)
|
||||
#define nfserr_inval cpu_to_be32(NFSERR_INVAL)
|
||||
#define nfserr_fbig cpu_to_be32(NFSERR_FBIG)
|
||||
#define nfserr_nospc cpu_to_be32(NFSERR_NOSPC)
|
||||
#define nfserr_rofs cpu_to_be32(NFSERR_ROFS)
|
||||
#define nfserr_mlink cpu_to_be32(NFSERR_MLINK)
|
||||
#define nfserr_opnotsupp cpu_to_be32(NFSERR_OPNOTSUPP)
|
||||
#define nfserr_nametoolong cpu_to_be32(NFSERR_NAMETOOLONG)
|
||||
#define nfserr_notempty cpu_to_be32(NFSERR_NOTEMPTY)
|
||||
#define nfserr_dquot cpu_to_be32(NFSERR_DQUOT)
|
||||
#define nfserr_stale cpu_to_be32(NFSERR_STALE)
|
||||
#define nfserr_remote cpu_to_be32(NFSERR_REMOTE)
|
||||
#define nfserr_wflush cpu_to_be32(NFSERR_WFLUSH)
|
||||
#define nfserr_badhandle cpu_to_be32(NFSERR_BADHANDLE)
|
||||
#define nfserr_notsync cpu_to_be32(NFSERR_NOT_SYNC)
|
||||
#define nfserr_badcookie cpu_to_be32(NFSERR_BAD_COOKIE)
|
||||
#define nfserr_notsupp cpu_to_be32(NFSERR_NOTSUPP)
|
||||
#define nfserr_toosmall cpu_to_be32(NFSERR_TOOSMALL)
|
||||
#define nfserr_serverfault cpu_to_be32(NFSERR_SERVERFAULT)
|
||||
#define nfserr_badtype cpu_to_be32(NFSERR_BADTYPE)
|
||||
#define nfserr_jukebox cpu_to_be32(NFSERR_JUKEBOX)
|
||||
#define nfserr_denied cpu_to_be32(NFSERR_DENIED)
|
||||
#define nfserr_deadlock cpu_to_be32(NFSERR_DEADLOCK)
|
||||
#define nfserr_expired cpu_to_be32(NFSERR_EXPIRED)
|
||||
#define nfserr_bad_cookie cpu_to_be32(NFSERR_BAD_COOKIE)
|
||||
#define nfserr_same cpu_to_be32(NFSERR_SAME)
|
||||
#define nfserr_clid_inuse cpu_to_be32(NFSERR_CLID_INUSE)
|
||||
#define nfserr_stale_clientid cpu_to_be32(NFSERR_STALE_CLIENTID)
|
||||
#define nfserr_resource cpu_to_be32(NFSERR_RESOURCE)
|
||||
#define nfserr_moved cpu_to_be32(NFSERR_MOVED)
|
||||
#define nfserr_nofilehandle cpu_to_be32(NFSERR_NOFILEHANDLE)
|
||||
#define nfserr_minor_vers_mismatch cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
|
||||
#define nfserr_share_denied cpu_to_be32(NFSERR_SHARE_DENIED)
|
||||
#define nfserr_stale_stateid cpu_to_be32(NFSERR_STALE_STATEID)
|
||||
#define nfserr_old_stateid cpu_to_be32(NFSERR_OLD_STATEID)
|
||||
#define nfserr_bad_stateid cpu_to_be32(NFSERR_BAD_STATEID)
|
||||
#define nfserr_bad_seqid cpu_to_be32(NFSERR_BAD_SEQID)
|
||||
#define nfserr_symlink cpu_to_be32(NFSERR_SYMLINK)
|
||||
#define nfserr_not_same cpu_to_be32(NFSERR_NOT_SAME)
|
||||
#define nfserr_restorefh cpu_to_be32(NFSERR_RESTOREFH)
|
||||
#define nfserr_attrnotsupp cpu_to_be32(NFSERR_ATTRNOTSUPP)
|
||||
#define nfserr_bad_xdr cpu_to_be32(NFSERR_BAD_XDR)
|
||||
#define nfserr_openmode cpu_to_be32(NFSERR_OPENMODE)
|
||||
#define nfserr_locks_held cpu_to_be32(NFSERR_LOCKS_HELD)
|
||||
#define nfserr_op_illegal cpu_to_be32(NFSERR_OP_ILLEGAL)
|
||||
#define nfserr_grace cpu_to_be32(NFSERR_GRACE)
|
||||
#define nfserr_no_grace cpu_to_be32(NFSERR_NO_GRACE)
|
||||
#define nfserr_reclaim_bad cpu_to_be32(NFSERR_RECLAIM_BAD)
|
||||
#define nfserr_badname cpu_to_be32(NFSERR_BADNAME)
|
||||
#define nfserr_cb_path_down cpu_to_be32(NFSERR_CB_PATH_DOWN)
|
||||
#define nfserr_locked cpu_to_be32(NFSERR_LOCKED)
|
||||
#define nfserr_wrongsec cpu_to_be32(NFSERR_WRONGSEC)
|
||||
#define nfserr_badiomode cpu_to_be32(NFS4ERR_BADIOMODE)
|
||||
#define nfserr_badlayout cpu_to_be32(NFS4ERR_BADLAYOUT)
|
||||
#define nfserr_bad_session_digest cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
|
||||
#define nfserr_badsession cpu_to_be32(NFS4ERR_BADSESSION)
|
||||
#define nfserr_badslot cpu_to_be32(NFS4ERR_BADSLOT)
|
||||
#define nfserr_complete_already cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
|
||||
#define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
|
||||
#define nfserr_deleg_already_wanted cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
|
||||
#define nfserr_back_chan_busy cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
|
||||
#define nfserr_layouttrylater cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
|
||||
#define nfserr_layoutunavailable cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
|
||||
#define nfserr_nomatching_layout cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
|
||||
#define nfserr_recallconflict cpu_to_be32(NFS4ERR_RECALLCONFLICT)
|
||||
#define nfserr_unknown_layouttype cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
|
||||
#define nfserr_seq_misordered cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
|
||||
#define nfserr_sequence_pos cpu_to_be32(NFS4ERR_SEQUENCE_POS)
|
||||
#define nfserr_req_too_big cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
|
||||
#define nfserr_rep_too_big cpu_to_be32(NFS4ERR_REP_TOO_BIG)
|
||||
#define nfserr_rep_too_big_to_cache cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
|
||||
#define nfserr_retry_uncached_rep cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
|
||||
#define nfserr_unsafe_compound cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
|
||||
#define nfserr_too_many_ops cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
|
||||
#define nfserr_op_not_in_session cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
|
||||
#define nfserr_hash_alg_unsupp cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
|
||||
#define nfserr_clientid_busy cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
|
||||
#define nfserr_pnfs_io_hole cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
|
||||
#define nfserr_seq_false_retry cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
|
||||
#define nfserr_bad_high_slot cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
|
||||
#define nfserr_deadsession cpu_to_be32(NFS4ERR_DEADSESSION)
|
||||
#define nfserr_encr_alg_unsupp cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
|
||||
#define nfserr_pnfs_no_layout cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
|
||||
#define nfserr_not_only_op cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
|
||||
#define nfserr_wrong_cred cpu_to_be32(NFS4ERR_WRONG_CRED)
|
||||
#define nfserr_wrong_type cpu_to_be32(NFS4ERR_WRONG_TYPE)
|
||||
#define nfserr_dirdeleg_unavail cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
|
||||
#define nfserr_reject_deleg cpu_to_be32(NFS4ERR_REJECT_DELEG)
|
||||
#define nfserr_returnconflict cpu_to_be32(NFS4ERR_RETURNCONFLICT)
|
||||
#define nfserr_deleg_revoked cpu_to_be32(NFS4ERR_DELEG_REVOKED)
|
||||
|
||||
/* error codes for internal use */
|
||||
/* if a request fails due to kmalloc failure, it gets dropped.
|
||||
* Client should resend eventually
|
||||
*/
|
||||
#define nfserr_dropit __constant_htonl(30000)
|
||||
#define nfserr_dropit cpu_to_be32(30000)
|
||||
/* end-of-file indicator in readdir */
|
||||
#define nfserr_eof __constant_htonl(30001)
|
||||
#define nfserr_eof cpu_to_be32(30001)
|
||||
/* replay detected */
|
||||
#define nfserr_replay_me cpu_to_be32(11001)
|
||||
/* nfs41 replay detected */
|
||||
#define nfserr_replay_cache cpu_to_be32(11002)
|
||||
|
||||
/* Check for dir entries '.' and '..' */
|
||||
#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
|
||||
@@ -300,7 +343,7 @@ extern struct timeval nfssvc_boot;
|
||||
* TIME_BACKUP (unlikely to be supported any time soon)
|
||||
* TIME_CREATE (unlikely to be supported any time soon)
|
||||
*/
|
||||
#define NFSD_SUPPORTED_ATTRS_WORD0 \
|
||||
#define NFSD4_SUPPORTED_ATTRS_WORD0 \
|
||||
(FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_TYPE | FATTR4_WORD0_FH_EXPIRE_TYPE \
|
||||
| FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE | FATTR4_WORD0_LINK_SUPPORT \
|
||||
| FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR | FATTR4_WORD0_FSID \
|
||||
@@ -312,7 +355,7 @@ extern struct timeval nfssvc_boot;
|
||||
| FATTR4_WORD0_MAXFILESIZE | FATTR4_WORD0_MAXLINK | FATTR4_WORD0_MAXNAME \
|
||||
| FATTR4_WORD0_MAXREAD | FATTR4_WORD0_MAXWRITE | FATTR4_WORD0_ACL)
|
||||
|
||||
#define NFSD_SUPPORTED_ATTRS_WORD1 \
|
||||
#define NFSD4_SUPPORTED_ATTRS_WORD1 \
|
||||
(FATTR4_WORD1_MODE | FATTR4_WORD1_NO_TRUNC | FATTR4_WORD1_NUMLINKS \
|
||||
| FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP | FATTR4_WORD1_RAWDEV \
|
||||
| FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | FATTR4_WORD1_SPACE_TOTAL \
|
||||
@@ -320,6 +363,35 @@ extern struct timeval nfssvc_boot;
|
||||
| FATTR4_WORD1_TIME_DELTA | FATTR4_WORD1_TIME_METADATA \
|
||||
| FATTR4_WORD1_TIME_MODIFY | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
|
||||
|
||||
#define NFSD4_SUPPORTED_ATTRS_WORD2 0
|
||||
|
||||
#define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
|
||||
NFSD4_SUPPORTED_ATTRS_WORD0
|
||||
|
||||
#define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
|
||||
NFSD4_SUPPORTED_ATTRS_WORD1
|
||||
|
||||
#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
|
||||
(NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
|
||||
|
||||
static inline u32 nfsd_suppattrs0(u32 minorversion)
|
||||
{
|
||||
return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
|
||||
: NFSD4_SUPPORTED_ATTRS_WORD0;
|
||||
}
|
||||
|
||||
static inline u32 nfsd_suppattrs1(u32 minorversion)
|
||||
{
|
||||
return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
|
||||
: NFSD4_SUPPORTED_ATTRS_WORD1;
|
||||
}
|
||||
|
||||
static inline u32 nfsd_suppattrs2(u32 minorversion)
|
||||
{
|
||||
return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
|
||||
: NFSD4_SUPPORTED_ATTRS_WORD2;
|
||||
}
|
||||
|
||||
/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
|
||||
#define NFSD_WRITEONLY_ATTRS_WORD1 \
|
||||
(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
|
||||
@@ -330,6 +402,19 @@ extern struct timeval nfssvc_boot;
|
||||
#define NFSD_WRITEABLE_ATTRS_WORD1 \
|
||||
(FATTR4_WORD1_MODE | FATTR4_WORD1_OWNER | FATTR4_WORD1_OWNER_GROUP \
|
||||
| FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
|
||||
#define NFSD_WRITEABLE_ATTRS_WORD2 0
|
||||
|
||||
#define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
|
||||
NFSD_WRITEABLE_ATTRS_WORD0
|
||||
/*
|
||||
* we currently store the exclusive create verifier in the v_{a,m}time
|
||||
* attributes so the client can't set these at create time using EXCLUSIVE4_1
|
||||
*/
|
||||
#define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
|
||||
(NFSD_WRITEABLE_ATTRS_WORD1 & \
|
||||
~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
|
||||
#define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
|
||||
NFSD_WRITEABLE_ATTRS_WORD2
|
||||
|
||||
#endif /* CONFIG_NFSD_V4 */
|
||||
|
||||
|
||||
@@ -269,6 +269,13 @@ fh_copy(struct svc_fh *dst, struct svc_fh *src)
|
||||
return dst;
|
||||
}
|
||||
|
||||
static inline void
|
||||
fh_copy_shallow(struct knfsd_fh *dst, struct knfsd_fh *src)
|
||||
{
|
||||
dst->fh_size = src->fh_size;
|
||||
memcpy(&dst->fh_base, &src->fh_base, src->fh_size);
|
||||
}
|
||||
|
||||
static __inline__ struct svc_fh *
|
||||
fh_init(struct svc_fh *fhp, int maxsize)
|
||||
{
|
||||
|
||||
+73
-11
@@ -66,8 +66,7 @@ struct nfs4_cb_recall {
|
||||
u32 cbr_ident;
|
||||
int cbr_trunc;
|
||||
stateid_t cbr_stateid;
|
||||
u32 cbr_fhlen;
|
||||
char cbr_fhval[NFS4_FHSIZE];
|
||||
struct knfsd_fh cbr_fh;
|
||||
struct nfs4_delegation *cbr_dp;
|
||||
};
|
||||
|
||||
@@ -86,8 +85,7 @@ struct nfs4_delegation {
|
||||
};
|
||||
|
||||
#define dl_stateid dl_recall.cbr_stateid
|
||||
#define dl_fhlen dl_recall.cbr_fhlen
|
||||
#define dl_fhval dl_recall.cbr_fhval
|
||||
#define dl_fh dl_recall.cbr_fh
|
||||
|
||||
/* client delegation callback info */
|
||||
struct nfs4_callback {
|
||||
@@ -101,6 +99,64 @@ struct nfs4_callback {
|
||||
struct rpc_clnt * cb_client;
|
||||
};
|
||||
|
||||
/* Maximum number of slots per session. 128 is useful for long haul TCP */
|
||||
#define NFSD_MAX_SLOTS_PER_SESSION 128
|
||||
/* Maximum number of pages per slot cache entry */
|
||||
#define NFSD_PAGES_PER_SLOT 1
|
||||
/* Maximum number of operations per session compound */
|
||||
#define NFSD_MAX_OPS_PER_COMPOUND 16
|
||||
|
||||
struct nfsd4_cache_entry {
|
||||
__be32 ce_status;
|
||||
struct kvec ce_datav; /* encoded NFSv4.1 data in rq_res.head[0] */
|
||||
struct page *ce_respages[NFSD_PAGES_PER_SLOT + 1];
|
||||
int ce_cachethis;
|
||||
short ce_resused;
|
||||
int ce_opcnt;
|
||||
int ce_rpchdrlen;
|
||||
};
|
||||
|
||||
struct nfsd4_slot {
|
||||
bool sl_inuse;
|
||||
u32 sl_seqid;
|
||||
struct nfsd4_cache_entry sl_cache_entry;
|
||||
};
|
||||
|
||||
struct nfsd4_session {
|
||||
struct kref se_ref;
|
||||
struct list_head se_hash; /* hash by sessionid */
|
||||
struct list_head se_perclnt;
|
||||
u32 se_flags;
|
||||
struct nfs4_client *se_client; /* for expire_client */
|
||||
struct nfs4_sessionid se_sessionid;
|
||||
u32 se_fmaxreq_sz;
|
||||
u32 se_fmaxresp_sz;
|
||||
u32 se_fmaxresp_cached;
|
||||
u32 se_fmaxops;
|
||||
u32 se_fnumslots;
|
||||
struct nfsd4_slot se_slots[]; /* forward channel slots */
|
||||
};
|
||||
|
||||
static inline void
|
||||
nfsd4_put_session(struct nfsd4_session *ses)
|
||||
{
|
||||
extern void free_session(struct kref *kref);
|
||||
kref_put(&ses->se_ref, free_session);
|
||||
}
|
||||
|
||||
static inline void
|
||||
nfsd4_get_session(struct nfsd4_session *ses)
|
||||
{
|
||||
kref_get(&ses->se_ref);
|
||||
}
|
||||
|
||||
/* formatted contents of nfs4_sessionid */
|
||||
struct nfsd4_sessionid {
|
||||
clientid_t clientid;
|
||||
u32 sequence;
|
||||
u32 reserved;
|
||||
};
|
||||
|
||||
#define HEXDIR_LEN 33 /* hex version of 16 byte md5 of cl_name plus '\0' */
|
||||
|
||||
/*
|
||||
@@ -132,6 +188,12 @@ struct nfs4_client {
|
||||
struct nfs4_callback cl_callback; /* callback info */
|
||||
atomic_t cl_count; /* ref count */
|
||||
u32 cl_firststate; /* recovery dir creation */
|
||||
|
||||
/* for nfs41 */
|
||||
struct list_head cl_sessions;
|
||||
struct nfsd4_slot cl_slot; /* create_session slot */
|
||||
u32 cl_exchange_flags;
|
||||
struct nfs4_sessionid cl_sessionid;
|
||||
};
|
||||
|
||||
/* struct nfs4_client_reset
|
||||
@@ -168,8 +230,7 @@ struct nfs4_replay {
|
||||
unsigned int rp_buflen;
|
||||
char *rp_buf;
|
||||
unsigned intrp_allocated;
|
||||
int rp_openfh_len;
|
||||
char rp_openfh[NFS4_FHSIZE];
|
||||
struct knfsd_fh rp_openfh;
|
||||
char rp_ibuf[NFSD4_REPLAY_ISIZE];
|
||||
};
|
||||
|
||||
@@ -217,7 +278,7 @@ struct nfs4_stateowner {
|
||||
* share_acces, share_deny on the file.
|
||||
*/
|
||||
struct nfs4_file {
|
||||
struct kref fi_ref;
|
||||
atomic_t fi_ref;
|
||||
struct list_head fi_hash; /* hash by "struct inode *" */
|
||||
struct list_head fi_stateids;
|
||||
struct list_head fi_delegations;
|
||||
@@ -259,14 +320,13 @@ struct nfs4_stateid {
|
||||
};
|
||||
|
||||
/* flags for preprocess_seqid_op() */
|
||||
#define CHECK_FH 0x00000001
|
||||
#define HAS_SESSION 0x00000001
|
||||
#define CONFIRM 0x00000002
|
||||
#define OPEN_STATE 0x00000004
|
||||
#define LOCK_STATE 0x00000008
|
||||
#define RD_STATE 0x00000010
|
||||
#define WR_STATE 0x00000020
|
||||
#define CLOSE_STATE 0x00000040
|
||||
#define DELEG_RET 0x00000080
|
||||
|
||||
#define seqid_mutating_err(err) \
|
||||
(((err) != nfserr_stale_clientid) && \
|
||||
@@ -274,7 +334,9 @@ struct nfs4_stateid {
|
||||
((err) != nfserr_stale_stateid) && \
|
||||
((err) != nfserr_bad_stateid))
|
||||
|
||||
extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh,
|
||||
struct nfsd4_compound_state;
|
||||
|
||||
extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
|
||||
stateid_t *stateid, int flags, struct file **filp);
|
||||
extern void nfs4_lock_state(void);
|
||||
extern void nfs4_unlock_state(void);
|
||||
@@ -290,7 +352,7 @@ extern void nfsd4_init_recdir(char *recdir_name);
|
||||
extern int nfsd4_recdir_load(void);
|
||||
extern void nfsd4_shutdown_recdir(void);
|
||||
extern int nfs4_client_to_reclaim(const char *name);
|
||||
extern int nfs4_has_reclaimed_state(const char *name);
|
||||
extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id);
|
||||
extern void nfsd4_recdir_purge_old(void);
|
||||
extern int nfsd4_create_clid_dir(struct nfs4_client *clp);
|
||||
extern void nfsd4_remove_clid_dir(struct nfs4_client *clp);
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
|
||||
#include <linux/nfs4.h>
|
||||
|
||||
/* thread usage wraps very million seconds (approx one fortnight) */
|
||||
#define NFSD_USAGE_WRAP (HZ*1000000)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct nfsd_stats {
|
||||
unsigned int rchits; /* repcache hits */
|
||||
unsigned int rcmisses; /* repcache hits */
|
||||
@@ -35,10 +40,6 @@ struct nfsd_stats {
|
||||
|
||||
};
|
||||
|
||||
/* thread usage wraps very million seconds (approx one fortnight) */
|
||||
#define NFSD_USAGE_WRAP (HZ*1000000)
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
extern struct nfsd_stats nfsdstats;
|
||||
extern struct svc_stat nfsd_svcstats;
|
||||
|
||||
+110
-17
@@ -45,11 +45,23 @@
|
||||
#define XDR_LEN(n) (((n) + 3) & ~3)
|
||||
|
||||
struct nfsd4_compound_state {
|
||||
struct svc_fh current_fh;
|
||||
struct svc_fh save_fh;
|
||||
struct nfs4_stateowner *replay_owner;
|
||||
struct svc_fh current_fh;
|
||||
struct svc_fh save_fh;
|
||||
struct nfs4_stateowner *replay_owner;
|
||||
/* For sessions DRC */
|
||||
struct nfsd4_session *session;
|
||||
struct nfsd4_slot *slot;
|
||||
__be32 *statp;
|
||||
size_t iovlen;
|
||||
u32 minorversion;
|
||||
u32 status;
|
||||
};
|
||||
|
||||
static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
|
||||
{
|
||||
return cs->slot != NULL;
|
||||
}
|
||||
|
||||
struct nfsd4_change_info {
|
||||
u32 atomic;
|
||||
u32 before_ctime_sec;
|
||||
@@ -90,7 +102,7 @@ struct nfsd4_create {
|
||||
u32 specdata2;
|
||||
} dev; /* NF4BLK, NF4CHR */
|
||||
} u;
|
||||
u32 cr_bmval[2]; /* request */
|
||||
u32 cr_bmval[3]; /* request */
|
||||
struct iattr cr_iattr; /* request */
|
||||
struct nfsd4_change_info cr_cinfo; /* response */
|
||||
struct nfs4_acl *cr_acl;
|
||||
@@ -105,7 +117,7 @@ struct nfsd4_delegreturn {
|
||||
};
|
||||
|
||||
struct nfsd4_getattr {
|
||||
u32 ga_bmval[2]; /* request */
|
||||
u32 ga_bmval[3]; /* request */
|
||||
struct svc_fh *ga_fhp; /* response */
|
||||
};
|
||||
|
||||
@@ -206,11 +218,9 @@ struct nfsd4_open {
|
||||
stateid_t op_delegate_stateid; /* request - response */
|
||||
u32 op_create; /* request */
|
||||
u32 op_createmode; /* request */
|
||||
u32 op_bmval[2]; /* request */
|
||||
union { /* request */
|
||||
struct iattr iattr; /* UNCHECKED4,GUARDED4 */
|
||||
nfs4_verifier verf; /* EXCLUSIVE4 */
|
||||
} u;
|
||||
u32 op_bmval[3]; /* request */
|
||||
struct iattr iattr; /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
|
||||
nfs4_verifier verf; /* EXCLUSIVE4 */
|
||||
clientid_t op_clientid; /* request */
|
||||
struct xdr_netobj op_owner; /* request */
|
||||
u32 op_seqid; /* request */
|
||||
@@ -224,8 +234,8 @@ struct nfsd4_open {
|
||||
struct nfs4_stateowner *op_stateowner; /* used during processing */
|
||||
struct nfs4_acl *op_acl;
|
||||
};
|
||||
#define op_iattr u.iattr
|
||||
#define op_verf u.verf
|
||||
#define op_iattr iattr
|
||||
#define op_verf verf
|
||||
|
||||
struct nfsd4_open_confirm {
|
||||
stateid_t oc_req_stateid /* request */;
|
||||
@@ -259,7 +269,7 @@ struct nfsd4_readdir {
|
||||
nfs4_verifier rd_verf; /* request */
|
||||
u32 rd_dircount; /* request */
|
||||
u32 rd_maxcount; /* request */
|
||||
u32 rd_bmval[2]; /* request */
|
||||
u32 rd_bmval[3]; /* request */
|
||||
struct svc_rqst *rd_rqstp; /* response */
|
||||
struct svc_fh * rd_fhp; /* response */
|
||||
|
||||
@@ -301,7 +311,7 @@ struct nfsd4_secinfo {
|
||||
|
||||
struct nfsd4_setattr {
|
||||
stateid_t sa_stateid; /* request */
|
||||
u32 sa_bmval[2]; /* request */
|
||||
u32 sa_bmval[3]; /* request */
|
||||
struct iattr sa_iattr; /* request */
|
||||
struct nfs4_acl *sa_acl;
|
||||
};
|
||||
@@ -327,7 +337,7 @@ struct nfsd4_setclientid_confirm {
|
||||
|
||||
/* also used for NVERIFY */
|
||||
struct nfsd4_verify {
|
||||
u32 ve_bmval[2]; /* request */
|
||||
u32 ve_bmval[3]; /* request */
|
||||
u32 ve_attrlen; /* request */
|
||||
char * ve_attrval; /* request */
|
||||
};
|
||||
@@ -344,6 +354,54 @@ struct nfsd4_write {
|
||||
nfs4_verifier wr_verifier; /* response */
|
||||
};
|
||||
|
||||
struct nfsd4_exchange_id {
|
||||
nfs4_verifier verifier;
|
||||
struct xdr_netobj clname;
|
||||
u32 flags;
|
||||
clientid_t clientid;
|
||||
u32 seqid;
|
||||
int spa_how;
|
||||
};
|
||||
|
||||
struct nfsd4_channel_attrs {
|
||||
u32 headerpadsz;
|
||||
u32 maxreq_sz;
|
||||
u32 maxresp_sz;
|
||||
u32 maxresp_cached;
|
||||
u32 maxops;
|
||||
u32 maxreqs;
|
||||
u32 nr_rdma_attrs;
|
||||
u32 rdma_attrs;
|
||||
};
|
||||
|
||||
struct nfsd4_create_session {
|
||||
clientid_t clientid;
|
||||
struct nfs4_sessionid sessionid;
|
||||
u32 seqid;
|
||||
u32 flags;
|
||||
struct nfsd4_channel_attrs fore_channel;
|
||||
struct nfsd4_channel_attrs back_channel;
|
||||
u32 callback_prog;
|
||||
u32 uid;
|
||||
u32 gid;
|
||||
};
|
||||
|
||||
struct nfsd4_sequence {
|
||||
struct nfs4_sessionid sessionid; /* request/response */
|
||||
u32 seqid; /* request/response */
|
||||
u32 slotid; /* request/response */
|
||||
u32 maxslots; /* request/response */
|
||||
u32 cachethis; /* request */
|
||||
#if 0
|
||||
u32 target_maxslots; /* response */
|
||||
u32 status_flags; /* response */
|
||||
#endif /* not yet */
|
||||
};
|
||||
|
||||
struct nfsd4_destroy_session {
|
||||
struct nfs4_sessionid sessionid;
|
||||
};
|
||||
|
||||
struct nfsd4_op {
|
||||
int opnum;
|
||||
__be32 status;
|
||||
@@ -378,6 +436,12 @@ struct nfsd4_op {
|
||||
struct nfsd4_verify verify;
|
||||
struct nfsd4_write write;
|
||||
struct nfsd4_release_lockowner release_lockowner;
|
||||
|
||||
/* NFSv4.1 */
|
||||
struct nfsd4_exchange_id exchange_id;
|
||||
struct nfsd4_create_session create_session;
|
||||
struct nfsd4_destroy_session destroy_session;
|
||||
struct nfsd4_sequence sequence;
|
||||
} u;
|
||||
struct nfs4_replay * replay;
|
||||
};
|
||||
@@ -416,9 +480,22 @@ struct nfsd4_compoundres {
|
||||
u32 taglen;
|
||||
char * tag;
|
||||
u32 opcnt;
|
||||
__be32 * tagp; /* where to encode tag and opcount */
|
||||
__be32 * tagp; /* tag, opcount encode location */
|
||||
struct nfsd4_compound_state cstate;
|
||||
};
|
||||
|
||||
static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
|
||||
{
|
||||
struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
|
||||
return args->opcnt == 1;
|
||||
}
|
||||
|
||||
static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
|
||||
{
|
||||
return !resp->cstate.slot->sl_cache_entry.ce_cachethis ||
|
||||
nfsd4_is_solo_sequence(resp);
|
||||
}
|
||||
|
||||
#define NFS4_SVC_XDRSIZE sizeof(struct nfsd4_compoundargs)
|
||||
|
||||
static inline void
|
||||
@@ -448,7 +525,23 @@ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
|
||||
extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
|
||||
struct nfsd4_compound_state *,
|
||||
struct nfsd4_setclientid_confirm *setclientid_confirm);
|
||||
extern __be32 nfsd4_process_open1(struct nfsd4_open *open);
|
||||
extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
|
||||
extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
|
||||
struct nfsd4_sequence *seq);
|
||||
extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
|
||||
struct nfsd4_compound_state *,
|
||||
struct nfsd4_exchange_id *);
|
||||
extern __be32 nfsd4_create_session(struct svc_rqst *,
|
||||
struct nfsd4_compound_state *,
|
||||
struct nfsd4_create_session *);
|
||||
extern __be32 nfsd4_sequence(struct svc_rqst *,
|
||||
struct nfsd4_compound_state *,
|
||||
struct nfsd4_sequence *);
|
||||
extern __be32 nfsd4_destroy_session(struct svc_rqst *,
|
||||
struct nfsd4_compound_state *,
|
||||
struct nfsd4_destroy_session *);
|
||||
extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
|
||||
struct nfsd4_open *open);
|
||||
extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
|
||||
struct svc_fh *current_fh, struct nfsd4_open *open);
|
||||
extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
|
||||
|
||||
@@ -0,0 +1,801 @@
|
||||
/*
|
||||
* nilfs2_fs.h - NILFS2 on-disk structures and common declarations.
|
||||
*
|
||||
* Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Written by Koji Sato <koji@osrg.net>
|
||||
* Ryusuke Konishi <ryusuke@osrg.net>
|
||||
*/
|
||||
/*
|
||||
* linux/include/linux/ext2_fs.h
|
||||
*
|
||||
* Copyright (C) 1992, 1993, 1994, 1995
|
||||
* Remy Card (card@masi.ibp.fr)
|
||||
* Laboratoire MASI - Institut Blaise Pascal
|
||||
* Universite Pierre et Marie Curie (Paris VI)
|
||||
*
|
||||
* from
|
||||
*
|
||||
* linux/include/linux/minix_fs.h
|
||||
*
|
||||
* Copyright (C) 1991, 1992 Linus Torvalds
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_NILFS_FS_H
|
||||
#define _LINUX_NILFS_FS_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
/*
|
||||
* Inode flags stored in nilfs_inode and on-memory nilfs inode
|
||||
*
|
||||
* We define these flags based on ext2-fs because of the
|
||||
* compatibility reason; to avoid problems in chattr(1)
|
||||
*/
|
||||
#define NILFS_SECRM_FL 0x00000001 /* Secure deletion */
|
||||
#define NILFS_UNRM_FL 0x00000002 /* Undelete */
|
||||
#define NILFS_SYNC_FL 0x00000008 /* Synchronous updates */
|
||||
#define NILFS_IMMUTABLE_FL 0x00000010 /* Immutable file */
|
||||
#define NILFS_APPEND_FL 0x00000020 /* writes to file may only append */
|
||||
#define NILFS_NODUMP_FL 0x00000040 /* do not dump file */
|
||||
#define NILFS_NOATIME_FL 0x00000080 /* do not update atime */
|
||||
/* Reserved for compression usage... */
|
||||
#define NILFS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
|
||||
#define NILFS_DIRSYNC_FL 0x00010000 /* dirsync behaviour */
|
||||
|
||||
#define NILFS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
|
||||
#define NILFS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
|
||||
|
||||
|
||||
#define NILFS_INODE_BMAP_SIZE 7
|
||||
/**
|
||||
* struct nilfs_inode - structure of an inode on disk
|
||||
* @i_blocks: blocks count
|
||||
* @i_size: size in bytes
|
||||
* @i_ctime: creation time (seconds)
|
||||
* @i_mtime: modification time (seconds)
|
||||
* @i_ctime_nsec: creation time (nano seconds)
|
||||
* @i_mtime_nsec: modification time (nano seconds)
|
||||
* @i_uid: user id
|
||||
* @i_gid: group id
|
||||
* @i_mode: file mode
|
||||
* @i_links_count: links count
|
||||
* @i_flags: file flags
|
||||
* @i_bmap: block mapping
|
||||
* @i_xattr: extended attributes
|
||||
* @i_generation: file generation (for NFS)
|
||||
* @i_pad: padding
|
||||
*/
|
||||
struct nilfs_inode {
|
||||
__le64 i_blocks;
|
||||
__le64 i_size;
|
||||
__le64 i_ctime;
|
||||
__le64 i_mtime;
|
||||
__le32 i_ctime_nsec;
|
||||
__le32 i_mtime_nsec;
|
||||
__le32 i_uid;
|
||||
__le32 i_gid;
|
||||
__le16 i_mode;
|
||||
__le16 i_links_count;
|
||||
__le32 i_flags;
|
||||
__le64 i_bmap[NILFS_INODE_BMAP_SIZE];
|
||||
#define i_device_code i_bmap[0]
|
||||
__le64 i_xattr;
|
||||
__le32 i_generation;
|
||||
__le32 i_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_super_root - structure of super root
|
||||
* @sr_sum: check sum
|
||||
* @sr_bytes: byte count of the structure
|
||||
* @sr_flags: flags (reserved)
|
||||
* @sr_nongc_ctime: write time of the last segment not for cleaner operation
|
||||
* @sr_dat: DAT file inode
|
||||
* @sr_cpfile: checkpoint file inode
|
||||
* @sr_sufile: segment usage file inode
|
||||
*/
|
||||
struct nilfs_super_root {
|
||||
__le32 sr_sum;
|
||||
__le16 sr_bytes;
|
||||
__le16 sr_flags;
|
||||
__le64 sr_nongc_ctime;
|
||||
struct nilfs_inode sr_dat;
|
||||
struct nilfs_inode sr_cpfile;
|
||||
struct nilfs_inode sr_sufile;
|
||||
};
|
||||
|
||||
#define NILFS_SR_MDT_OFFSET(inode_size, i) \
|
||||
((unsigned long)&((struct nilfs_super_root *)0)->sr_dat + \
|
||||
(inode_size) * (i))
|
||||
#define NILFS_SR_DAT_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 0)
|
||||
#define NILFS_SR_CPFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 1)
|
||||
#define NILFS_SR_SUFILE_OFFSET(inode_size) NILFS_SR_MDT_OFFSET(inode_size, 2)
|
||||
#define NILFS_SR_BYTES (sizeof(struct nilfs_super_root))
|
||||
|
||||
/*
|
||||
* Maximal mount counts
|
||||
*/
|
||||
#define NILFS_DFL_MAX_MNT_COUNT 50 /* 50 mounts */
|
||||
|
||||
/*
|
||||
* File system states (sbp->s_state, nilfs->ns_mount_state)
|
||||
*/
|
||||
#define NILFS_VALID_FS 0x0001 /* Unmounted cleanly */
|
||||
#define NILFS_ERROR_FS 0x0002 /* Errors detected */
|
||||
#define NILFS_RESIZE_FS 0x0004 /* Resize required */
|
||||
|
||||
/*
|
||||
* Mount flags (sbi->s_mount_opt)
|
||||
*/
|
||||
#define NILFS_MOUNT_ERROR_MODE 0x0070 /* Error mode mask */
|
||||
#define NILFS_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
|
||||
#define NILFS_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
|
||||
#define NILFS_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
|
||||
#define NILFS_MOUNT_SNAPSHOT 0x0080 /* Snapshot flag */
|
||||
#define NILFS_MOUNT_BARRIER 0x1000 /* Use block barriers */
|
||||
#define NILFS_MOUNT_STRICT_ORDER 0x2000 /* Apply strict in-order
|
||||
semantics also for data */
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_super_block - structure of super block on disk
|
||||
*/
|
||||
struct nilfs_super_block {
|
||||
__le32 s_rev_level; /* Revision level */
|
||||
__le16 s_minor_rev_level; /* minor revision level */
|
||||
__le16 s_magic; /* Magic signature */
|
||||
|
||||
__le16 s_bytes; /* Bytes count of CRC calculation
|
||||
for this structure. s_reserved
|
||||
is excluded. */
|
||||
__le16 s_flags; /* flags */
|
||||
__le32 s_crc_seed; /* Seed value of CRC calculation */
|
||||
__le32 s_sum; /* Check sum of super block */
|
||||
|
||||
__le32 s_log_block_size; /* Block size represented as follows
|
||||
blocksize =
|
||||
1 << (s_log_block_size + 10) */
|
||||
__le64 s_nsegments; /* Number of segments in filesystem */
|
||||
__le64 s_dev_size; /* block device size in bytes */
|
||||
__le64 s_first_data_block; /* 1st seg disk block number */
|
||||
__le32 s_blocks_per_segment; /* number of blocks per full segment */
|
||||
__le32 s_r_segments_percentage; /* Reserved segments percentage */
|
||||
|
||||
__le64 s_last_cno; /* Last checkpoint number */
|
||||
__le64 s_last_pseg; /* disk block addr pseg written last */
|
||||
__le64 s_last_seq; /* seq. number of seg written last */
|
||||
__le64 s_free_blocks_count; /* Free blocks count */
|
||||
|
||||
__le64 s_ctime; /* Creation time (execution time of
|
||||
newfs) */
|
||||
__le64 s_mtime; /* Mount time */
|
||||
__le64 s_wtime; /* Write time */
|
||||
__le16 s_mnt_count; /* Mount count */
|
||||
__le16 s_max_mnt_count; /* Maximal mount count */
|
||||
__le16 s_state; /* File system state */
|
||||
__le16 s_errors; /* Behaviour when detecting errors */
|
||||
__le64 s_lastcheck; /* time of last check */
|
||||
|
||||
__le32 s_checkinterval; /* max. time between checks */
|
||||
__le32 s_creator_os; /* OS */
|
||||
__le16 s_def_resuid; /* Default uid for reserved blocks */
|
||||
__le16 s_def_resgid; /* Default gid for reserved blocks */
|
||||
__le32 s_first_ino; /* First non-reserved inode */
|
||||
|
||||
__le16 s_inode_size; /* Size of an inode */
|
||||
__le16 s_dat_entry_size; /* Size of a dat entry */
|
||||
__le16 s_checkpoint_size; /* Size of a checkpoint */
|
||||
__le16 s_segment_usage_size; /* Size of a segment usage */
|
||||
|
||||
__u8 s_uuid[16]; /* 128-bit uuid for volume */
|
||||
char s_volume_name[16]; /* volume name */
|
||||
char s_last_mounted[64]; /* directory where last mounted */
|
||||
|
||||
__le32 s_c_interval; /* Commit interval of segment */
|
||||
__le32 s_c_block_max; /* Threshold of data amount for
|
||||
the segment construction */
|
||||
__u32 s_reserved[192]; /* padding to the end of the block */
|
||||
};
|
||||
|
||||
/*
|
||||
* Codes for operating systems
|
||||
*/
|
||||
#define NILFS_OS_LINUX 0
|
||||
/* Codes from 1 to 4 are reserved to keep compatibility with ext2 creator-OS */
|
||||
|
||||
/*
|
||||
* Revision levels
|
||||
*/
|
||||
#define NILFS_CURRENT_REV 2 /* current major revision */
|
||||
#define NILFS_MINOR_REV 0 /* minor revision */
|
||||
|
||||
/*
|
||||
* Bytes count of super_block for CRC-calculation
|
||||
*/
|
||||
#define NILFS_SB_BYTES \
|
||||
((long)&((struct nilfs_super_block *)0)->s_reserved)
|
||||
|
||||
/*
|
||||
* Special inode number
|
||||
*/
|
||||
#define NILFS_ROOT_INO 2 /* Root file inode */
|
||||
#define NILFS_DAT_INO 3 /* DAT file */
|
||||
#define NILFS_CPFILE_INO 4 /* checkpoint file */
|
||||
#define NILFS_SUFILE_INO 5 /* segment usage file */
|
||||
#define NILFS_IFILE_INO 6 /* ifile */
|
||||
#define NILFS_ATIME_INO 7 /* Atime file (reserved) */
|
||||
#define NILFS_XATTR_INO 8 /* Xattribute file (reserved) */
|
||||
#define NILFS_SKETCH_INO 10 /* Sketch file */
|
||||
#define NILFS_USER_INO 11 /* Fisrt user's file inode number */
|
||||
|
||||
#define NILFS_SB_OFFSET_BYTES 1024 /* byte offset of nilfs superblock */
|
||||
#define NILFS_SUPER_MAGIC 0x3434 /* NILFS filesystem magic number */
|
||||
|
||||
#define NILFS_SEG_MIN_BLOCKS 16 /* Minimum number of blocks in
|
||||
a full segment */
|
||||
#define NILFS_PSEG_MIN_BLOCKS 2 /* Minimum number of blocks in
|
||||
a partial segment */
|
||||
#define NILFS_MIN_NRSVSEGS 8 /* Minimum number of reserved
|
||||
segments */
|
||||
|
||||
/*
|
||||
* bytes offset of secondary super block
|
||||
*/
|
||||
#define NILFS_SB2_OFFSET_BYTES(devsize) ((((devsize) >> 12) - 1) << 12)
|
||||
|
||||
/*
|
||||
* Maximal count of links to a file
|
||||
*/
|
||||
#define NILFS_LINK_MAX 32000
|
||||
|
||||
/*
|
||||
* Structure of a directory entry
|
||||
* (Same as ext2)
|
||||
*/
|
||||
|
||||
#define NILFS_NAME_LEN 255
|
||||
|
||||
/*
|
||||
* The new version of the directory entry. Since V0 structures are
|
||||
* stored in intel byte order, and the name_len field could never be
|
||||
* bigger than 255 chars, it's safe to reclaim the extra byte for the
|
||||
* file_type field.
|
||||
*/
|
||||
struct nilfs_dir_entry {
|
||||
__le64 inode; /* Inode number */
|
||||
__le16 rec_len; /* Directory entry length */
|
||||
__u8 name_len; /* Name length */
|
||||
__u8 file_type;
|
||||
char name[NILFS_NAME_LEN]; /* File name */
|
||||
char pad;
|
||||
};
|
||||
|
||||
/*
|
||||
* NILFS directory file types. Only the low 3 bits are used. The
|
||||
* other bits are reserved for now.
|
||||
*/
|
||||
enum {
|
||||
NILFS_FT_UNKNOWN,
|
||||
NILFS_FT_REG_FILE,
|
||||
NILFS_FT_DIR,
|
||||
NILFS_FT_CHRDEV,
|
||||
NILFS_FT_BLKDEV,
|
||||
NILFS_FT_FIFO,
|
||||
NILFS_FT_SOCK,
|
||||
NILFS_FT_SYMLINK,
|
||||
NILFS_FT_MAX
|
||||
};
|
||||
|
||||
/*
|
||||
* NILFS_DIR_PAD defines the directory entries boundaries
|
||||
*
|
||||
* NOTE: It must be a multiple of 8
|
||||
*/
|
||||
#define NILFS_DIR_PAD 8
|
||||
#define NILFS_DIR_ROUND (NILFS_DIR_PAD - 1)
|
||||
#define NILFS_DIR_REC_LEN(name_len) (((name_len) + 12 + NILFS_DIR_ROUND) & \
|
||||
~NILFS_DIR_ROUND)
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_finfo - file information
|
||||
* @fi_ino: inode number
|
||||
* @fi_cno: checkpoint number
|
||||
* @fi_nblocks: number of blocks (including intermediate blocks)
|
||||
* @fi_ndatablk: number of file data blocks
|
||||
*/
|
||||
struct nilfs_finfo {
|
||||
__le64 fi_ino;
|
||||
__le64 fi_cno;
|
||||
__le32 fi_nblocks;
|
||||
__le32 fi_ndatablk;
|
||||
/* array of virtual block numbers */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_binfo_v - information for the block to which a virtual block number is assigned
|
||||
* @bi_vblocknr: virtual block number
|
||||
* @bi_blkoff: block offset
|
||||
*/
|
||||
struct nilfs_binfo_v {
|
||||
__le64 bi_vblocknr;
|
||||
__le64 bi_blkoff;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_binfo_dat - information for the block which belongs to the DAT file
|
||||
* @bi_blkoff: block offset
|
||||
* @bi_level: level
|
||||
* @bi_pad: padding
|
||||
*/
|
||||
struct nilfs_binfo_dat {
|
||||
__le64 bi_blkoff;
|
||||
__u8 bi_level;
|
||||
__u8 bi_pad[7];
|
||||
};
|
||||
|
||||
/**
|
||||
* union nilfs_binfo: block information
|
||||
* @bi_v: nilfs_binfo_v structure
|
||||
* @bi_dat: nilfs_binfo_dat structure
|
||||
*/
|
||||
union nilfs_binfo {
|
||||
struct nilfs_binfo_v bi_v;
|
||||
struct nilfs_binfo_dat bi_dat;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_segment_summary - segment summary
|
||||
* @ss_datasum: checksum of data
|
||||
* @ss_sumsum: checksum of segment summary
|
||||
* @ss_magic: magic number
|
||||
* @ss_bytes: size of this structure in bytes
|
||||
* @ss_flags: flags
|
||||
* @ss_seq: sequence number
|
||||
* @ss_create: creation timestamp
|
||||
* @ss_next: next segment
|
||||
* @ss_nblocks: number of blocks
|
||||
* @ss_nfinfo: number of finfo structures
|
||||
* @ss_sumbytes: total size of segment summary in bytes
|
||||
* @ss_pad: padding
|
||||
*/
|
||||
struct nilfs_segment_summary {
|
||||
__le32 ss_datasum;
|
||||
__le32 ss_sumsum;
|
||||
__le32 ss_magic;
|
||||
__le16 ss_bytes;
|
||||
__le16 ss_flags;
|
||||
__le64 ss_seq;
|
||||
__le64 ss_create;
|
||||
__le64 ss_next;
|
||||
__le32 ss_nblocks;
|
||||
__le32 ss_nfinfo;
|
||||
__le32 ss_sumbytes;
|
||||
__le32 ss_pad;
|
||||
/* array of finfo structures */
|
||||
};
|
||||
|
||||
#define NILFS_SEGSUM_MAGIC 0x1eaffa11 /* segment summary magic number */
|
||||
|
||||
/*
|
||||
* Segment summary flags
|
||||
*/
|
||||
#define NILFS_SS_LOGBGN 0x0001 /* begins a logical segment */
|
||||
#define NILFS_SS_LOGEND 0x0002 /* ends a logical segment */
|
||||
#define NILFS_SS_SR 0x0004 /* has super root */
|
||||
#define NILFS_SS_SYNDT 0x0008 /* includes data only updates */
|
||||
#define NILFS_SS_GC 0x0010 /* segment written for cleaner operation */
|
||||
|
||||
/**
|
||||
* struct nilfs_palloc_group_desc - block group descriptor
|
||||
* @pg_nfrees: number of free entries in block group
|
||||
*/
|
||||
struct nilfs_palloc_group_desc {
|
||||
__le32 pg_nfrees;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_dat_entry - disk address translation entry
|
||||
* @dt_blocknr: block number
|
||||
* @dt_start: start checkpoint number
|
||||
* @dt_end: end checkpoint number
|
||||
* @dt_rsv: reserved for future use
|
||||
*/
|
||||
struct nilfs_dat_entry {
|
||||
__le64 de_blocknr;
|
||||
__le64 de_start;
|
||||
__le64 de_end;
|
||||
__le64 de_rsv;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_dat_group_desc - block group descriptor
|
||||
* @dg_nfrees: number of free virtual block numbers in block group
|
||||
*/
|
||||
struct nilfs_dat_group_desc {
|
||||
__le32 dg_nfrees;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_snapshot_list - snapshot list
|
||||
* @ssl_next: next checkpoint number on snapshot list
|
||||
* @ssl_prev: previous checkpoint number on snapshot list
|
||||
*/
|
||||
struct nilfs_snapshot_list {
|
||||
__le64 ssl_next;
|
||||
__le64 ssl_prev;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_checkpoint - checkpoint structure
|
||||
* @cp_flags: flags
|
||||
* @cp_checkpoints_count: checkpoints count in a block
|
||||
* @cp_snapshot_list: snapshot list
|
||||
* @cp_cno: checkpoint number
|
||||
* @cp_create: creation timestamp
|
||||
* @cp_nblk_inc: number of blocks incremented by this checkpoint
|
||||
* @cp_inodes_count: inodes count
|
||||
* @cp_blocks_count: blocks count
|
||||
* @cp_ifile_inode: inode of ifile
|
||||
*/
|
||||
struct nilfs_checkpoint {
|
||||
__le32 cp_flags;
|
||||
__le32 cp_checkpoints_count;
|
||||
struct nilfs_snapshot_list cp_snapshot_list;
|
||||
__le64 cp_cno;
|
||||
__le64 cp_create;
|
||||
__le64 cp_nblk_inc;
|
||||
__le64 cp_inodes_count;
|
||||
__le64 cp_blocks_count; /* Reserved (might be deleted) */
|
||||
|
||||
/* Do not change the byte offset of ifile inode.
|
||||
To keep the compatibility of the disk format,
|
||||
additional fields should be added behind cp_ifile_inode. */
|
||||
struct nilfs_inode cp_ifile_inode;
|
||||
};
|
||||
|
||||
/* checkpoint flags */
|
||||
enum {
|
||||
NILFS_CHECKPOINT_SNAPSHOT,
|
||||
NILFS_CHECKPOINT_INVALID,
|
||||
NILFS_CHECKPOINT_SKETCH,
|
||||
NILFS_CHECKPOINT_MINOR,
|
||||
};
|
||||
|
||||
#define NILFS_CHECKPOINT_FNS(flag, name) \
|
||||
static inline void \
|
||||
nilfs_checkpoint_set_##name(struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) | \
|
||||
(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
} \
|
||||
static inline void \
|
||||
nilfs_checkpoint_clear_##name(struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
cp->cp_flags = cpu_to_le32(le32_to_cpu(cp->cp_flags) & \
|
||||
~(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
} \
|
||||
static inline int \
|
||||
nilfs_checkpoint_##name(const struct nilfs_checkpoint *cp) \
|
||||
{ \
|
||||
return !!(le32_to_cpu(cp->cp_flags) & \
|
||||
(1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_CHECKPOINT_FNS(SNAPSHOT, snapshot)
|
||||
NILFS_CHECKPOINT_FNS(INVALID, invalid)
|
||||
NILFS_CHECKPOINT_FNS(MINOR, minor)
|
||||
|
||||
/**
|
||||
* struct nilfs_cpinfo - checkpoint information
|
||||
* @ci_flags: flags
|
||||
* @ci_pad: padding
|
||||
* @ci_cno: checkpoint number
|
||||
* @ci_create: creation timestamp
|
||||
* @ci_nblk_inc: number of blocks incremented by this checkpoint
|
||||
* @ci_inodes_count: inodes count
|
||||
* @ci_blocks_count: blocks count
|
||||
* @ci_next: next checkpoint number in snapshot list
|
||||
*/
|
||||
struct nilfs_cpinfo {
|
||||
__u32 ci_flags;
|
||||
__u32 ci_pad;
|
||||
__u64 ci_cno;
|
||||
__u64 ci_create;
|
||||
__u64 ci_nblk_inc;
|
||||
__u64 ci_inodes_count;
|
||||
__u64 ci_blocks_count;
|
||||
__u64 ci_next;
|
||||
};
|
||||
|
||||
#define NILFS_CPINFO_FNS(flag, name) \
|
||||
static inline int \
|
||||
nilfs_cpinfo_##name(const struct nilfs_cpinfo *cpinfo) \
|
||||
{ \
|
||||
return !!(cpinfo->ci_flags & (1UL << NILFS_CHECKPOINT_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_CPINFO_FNS(SNAPSHOT, snapshot)
|
||||
NILFS_CPINFO_FNS(INVALID, invalid)
|
||||
NILFS_CPINFO_FNS(MINOR, minor)
|
||||
|
||||
|
||||
/**
|
||||
* struct nilfs_cpfile_header - checkpoint file header
|
||||
* @ch_ncheckpoints: number of checkpoints
|
||||
* @ch_nsnapshots: number of snapshots
|
||||
* @ch_snapshot_list: snapshot list
|
||||
*/
|
||||
struct nilfs_cpfile_header {
|
||||
__le64 ch_ncheckpoints;
|
||||
__le64 ch_nsnapshots;
|
||||
struct nilfs_snapshot_list ch_snapshot_list;
|
||||
};
|
||||
|
||||
#define NILFS_CPFILE_FIRST_CHECKPOINT_OFFSET \
|
||||
((sizeof(struct nilfs_cpfile_header) + \
|
||||
sizeof(struct nilfs_checkpoint) - 1) / \
|
||||
sizeof(struct nilfs_checkpoint))
|
||||
|
||||
/**
|
||||
* struct nilfs_segment_usage - segment usage
|
||||
* @su_lastmod: last modified timestamp
|
||||
* @su_nblocks: number of blocks in segment
|
||||
* @su_flags: flags
|
||||
*/
|
||||
struct nilfs_segment_usage {
|
||||
__le64 su_lastmod;
|
||||
__le32 su_nblocks;
|
||||
__le32 su_flags;
|
||||
};
|
||||
|
||||
/* segment usage flag */
|
||||
enum {
|
||||
NILFS_SEGMENT_USAGE_ACTIVE,
|
||||
NILFS_SEGMENT_USAGE_DIRTY,
|
||||
NILFS_SEGMENT_USAGE_ERROR,
|
||||
|
||||
/* ... */
|
||||
};
|
||||
|
||||
#define NILFS_SEGMENT_USAGE_FNS(flag, name) \
|
||||
static inline void \
|
||||
nilfs_segment_usage_set_##name(struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
su->su_flags = cpu_to_le32(le32_to_cpu(su->su_flags) | \
|
||||
(1UL << NILFS_SEGMENT_USAGE_##flag));\
|
||||
} \
|
||||
static inline void \
|
||||
nilfs_segment_usage_clear_##name(struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
su->su_flags = \
|
||||
cpu_to_le32(le32_to_cpu(su->su_flags) & \
|
||||
~(1UL << NILFS_SEGMENT_USAGE_##flag)); \
|
||||
} \
|
||||
static inline int \
|
||||
nilfs_segment_usage_##name(const struct nilfs_segment_usage *su) \
|
||||
{ \
|
||||
return !!(le32_to_cpu(su->su_flags) & \
|
||||
(1UL << NILFS_SEGMENT_USAGE_##flag)); \
|
||||
}
|
||||
|
||||
NILFS_SEGMENT_USAGE_FNS(ACTIVE, active)
|
||||
NILFS_SEGMENT_USAGE_FNS(DIRTY, dirty)
|
||||
NILFS_SEGMENT_USAGE_FNS(ERROR, error)
|
||||
|
||||
static inline void
|
||||
nilfs_segment_usage_set_clean(struct nilfs_segment_usage *su)
|
||||
{
|
||||
su->su_lastmod = cpu_to_le64(0);
|
||||
su->su_nblocks = cpu_to_le32(0);
|
||||
su->su_flags = cpu_to_le32(0);
|
||||
}
|
||||
|
||||
static inline int
|
||||
nilfs_segment_usage_clean(const struct nilfs_segment_usage *su)
|
||||
{
|
||||
return !le32_to_cpu(su->su_flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct nilfs_sufile_header - segment usage file header
|
||||
* @sh_ncleansegs: number of clean segments
|
||||
* @sh_ndirtysegs: number of dirty segments
|
||||
* @sh_last_alloc: last allocated segment number
|
||||
*/
|
||||
struct nilfs_sufile_header {
|
||||
__le64 sh_ncleansegs;
|
||||
__le64 sh_ndirtysegs;
|
||||
__le64 sh_last_alloc;
|
||||
/* ... */
|
||||
};
|
||||
|
||||
#define NILFS_SUFILE_FIRST_SEGMENT_USAGE_OFFSET \
|
||||
((sizeof(struct nilfs_sufile_header) + \
|
||||
sizeof(struct nilfs_segment_usage) - 1) / \
|
||||
sizeof(struct nilfs_segment_usage))
|
||||
|
||||
/**
|
||||
* nilfs_suinfo - segment usage information
|
||||
* @sui_lastmod:
|
||||
* @sui_nblocks:
|
||||
* @sui_flags:
|
||||
*/
|
||||
struct nilfs_suinfo {
|
||||
__u64 sui_lastmod;
|
||||
__u32 sui_nblocks;
|
||||
__u32 sui_flags;
|
||||
};
|
||||
|
||||
#define NILFS_SUINFO_FNS(flag, name) \
|
||||
static inline int \
|
||||
nilfs_suinfo_##name(const struct nilfs_suinfo *si) \
|
||||
{ \
|
||||
return si->sui_flags & (1UL << NILFS_SEGMENT_USAGE_##flag); \
|
||||
}
|
||||
|
||||
NILFS_SUINFO_FNS(ACTIVE, active)
|
||||
NILFS_SUINFO_FNS(DIRTY, dirty)
|
||||
NILFS_SUINFO_FNS(ERROR, error)
|
||||
|
||||
static inline int nilfs_suinfo_clean(const struct nilfs_suinfo *si)
|
||||
{
|
||||
return !si->sui_flags;
|
||||
}
|
||||
|
||||
/* ioctl */
|
||||
enum {
|
||||
NILFS_CHECKPOINT,
|
||||
NILFS_SNAPSHOT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_cpmode -
|
||||
* @cc_cno:
|
||||
* @cc_mode:
|
||||
*/
|
||||
struct nilfs_cpmode {
|
||||
__u64 cm_cno;
|
||||
__u32 cm_mode;
|
||||
__u32 cm_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_argv - argument vector
|
||||
* @v_base:
|
||||
* @v_nmembs:
|
||||
* @v_size:
|
||||
* @v_flags:
|
||||
* @v_index:
|
||||
*/
|
||||
struct nilfs_argv {
|
||||
__u64 v_base;
|
||||
__u32 v_nmembs; /* number of members */
|
||||
__u16 v_size; /* size of members */
|
||||
__u16 v_flags;
|
||||
__u64 v_index;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_period -
|
||||
* @p_start:
|
||||
* @p_end:
|
||||
*/
|
||||
struct nilfs_period {
|
||||
__u64 p_start;
|
||||
__u64 p_end;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_cpstat -
|
||||
* @cs_cno: checkpoint number
|
||||
* @cs_ncps: number of checkpoints
|
||||
* @cs_nsss: number of snapshots
|
||||
*/
|
||||
struct nilfs_cpstat {
|
||||
__u64 cs_cno;
|
||||
__u64 cs_ncps;
|
||||
__u64 cs_nsss;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_sustat -
|
||||
* @ss_nsegs: number of segments
|
||||
* @ss_ncleansegs: number of clean segments
|
||||
* @ss_ndirtysegs: number of dirty segments
|
||||
* @ss_ctime: creation time of the last segment
|
||||
* @ss_nongc_ctime: creation time of the last segment not for GC
|
||||
* @ss_prot_seq: least sequence number of segments which must not be reclaimed
|
||||
*/
|
||||
struct nilfs_sustat {
|
||||
__u64 ss_nsegs;
|
||||
__u64 ss_ncleansegs;
|
||||
__u64 ss_ndirtysegs;
|
||||
__u64 ss_ctime;
|
||||
__u64 ss_nongc_ctime;
|
||||
__u64 ss_prot_seq;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_vinfo - virtual block number information
|
||||
* @vi_vblocknr:
|
||||
* @vi_start:
|
||||
* @vi_end:
|
||||
* @vi_blocknr:
|
||||
*/
|
||||
struct nilfs_vinfo {
|
||||
__u64 vi_vblocknr;
|
||||
__u64 vi_start;
|
||||
__u64 vi_end;
|
||||
__u64 vi_blocknr;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_vdesc -
|
||||
*/
|
||||
struct nilfs_vdesc {
|
||||
__u64 vd_ino;
|
||||
__u64 vd_cno;
|
||||
__u64 vd_vblocknr;
|
||||
struct nilfs_period vd_period;
|
||||
__u64 vd_blocknr;
|
||||
__u64 vd_offset;
|
||||
__u32 vd_flags;
|
||||
__u32 vd_pad;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nilfs_bdesc -
|
||||
*/
|
||||
struct nilfs_bdesc {
|
||||
__u64 bd_ino;
|
||||
__u64 bd_oblocknr;
|
||||
__u64 bd_blocknr;
|
||||
__u64 bd_offset;
|
||||
__u32 bd_level;
|
||||
__u32 bd_pad;
|
||||
};
|
||||
|
||||
#define NILFS_IOCTL_IDENT 'n'
|
||||
|
||||
#define NILFS_IOCTL_CHANGE_CPMODE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x80, struct nilfs_cpmode)
|
||||
#define NILFS_IOCTL_DELETE_CHECKPOINT \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x81, __u64)
|
||||
#define NILFS_IOCTL_GET_CPINFO \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x82, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_CPSTAT \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x83, struct nilfs_cpstat)
|
||||
#define NILFS_IOCTL_GET_SUINFO \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x84, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_SUSTAT \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x85, struct nilfs_sustat)
|
||||
#define NILFS_IOCTL_GET_VINFO \
|
||||
_IOWR(NILFS_IOCTL_IDENT, 0x86, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_GET_BDESCS \
|
||||
_IOWR(NILFS_IOCTL_IDENT, 0x87, struct nilfs_argv)
|
||||
#define NILFS_IOCTL_CLEAN_SEGMENTS \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x88, struct nilfs_argv[5])
|
||||
#define NILFS_IOCTL_SYNC \
|
||||
_IOR(NILFS_IOCTL_IDENT, 0x8A, __u64)
|
||||
#define NILFS_IOCTL_RESIZE \
|
||||
_IOW(NILFS_IOCTL_IDENT, 0x8B, __u64)
|
||||
|
||||
#endif /* _LINUX_NILFS_FS_H */
|
||||
@@ -228,10 +228,11 @@ extern void parport_pc_release_resources(struct parport *p);
|
||||
extern int parport_pc_claim_resources(struct parport *p);
|
||||
|
||||
/* PCMCIA code will want to get us to look at a port. Provide a mechanism. */
|
||||
extern struct parport *parport_pc_probe_port (unsigned long base,
|
||||
unsigned long base_hi,
|
||||
int irq, int dma,
|
||||
struct device *dev);
|
||||
extern void parport_pc_unregister_port (struct parport *p);
|
||||
extern struct parport *parport_pc_probe_port(unsigned long base,
|
||||
unsigned long base_hi,
|
||||
int irq, int dma,
|
||||
struct device *dev,
|
||||
int irqflags);
|
||||
extern void parport_pc_unregister_port(struct parport *p);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -674,6 +674,11 @@ int __must_check pci_reenable_device(struct pci_dev *);
|
||||
int __must_check pcim_enable_device(struct pci_dev *pdev);
|
||||
void pcim_pin_device(struct pci_dev *pdev);
|
||||
|
||||
static inline int pci_is_enabled(struct pci_dev *pdev)
|
||||
{
|
||||
return (atomic_read(&pdev->enable_cnt) > 0);
|
||||
}
|
||||
|
||||
static inline int pci_is_managed(struct pci_dev *pdev)
|
||||
{
|
||||
return pdev->is_managed;
|
||||
|
||||
@@ -944,6 +944,32 @@
|
||||
#define PCI_DEVICE_ID_SUN_TOMATILLO 0xa801
|
||||
#define PCI_DEVICE_ID_SUN_CASSINI 0xabba
|
||||
|
||||
#define PCI_VENDOR_ID_NI 0x1093
|
||||
#define PCI_DEVICE_ID_NI_PCI2322 0xd130
|
||||
#define PCI_DEVICE_ID_NI_PCI2324 0xd140
|
||||
#define PCI_DEVICE_ID_NI_PCI2328 0xd150
|
||||
#define PCI_DEVICE_ID_NI_PXI8422_2322 0xd190
|
||||
#define PCI_DEVICE_ID_NI_PXI8422_2324 0xd1a0
|
||||
#define PCI_DEVICE_ID_NI_PXI8420_2322 0xd1d0
|
||||
#define PCI_DEVICE_ID_NI_PXI8420_2324 0xd1e0
|
||||
#define PCI_DEVICE_ID_NI_PXI8420_2328 0xd1f0
|
||||
#define PCI_DEVICE_ID_NI_PXI8420_23216 0xd1f1
|
||||
#define PCI_DEVICE_ID_NI_PCI2322I 0xd250
|
||||
#define PCI_DEVICE_ID_NI_PCI2324I 0xd270
|
||||
#define PCI_DEVICE_ID_NI_PCI23216 0xd2b0
|
||||
#define PCI_DEVICE_ID_NI_PXI8430_2322 0x7080
|
||||
#define PCI_DEVICE_ID_NI_PCI8430_2322 0x70db
|
||||
#define PCI_DEVICE_ID_NI_PXI8430_2324 0x70dd
|
||||
#define PCI_DEVICE_ID_NI_PCI8430_2324 0x70df
|
||||
#define PCI_DEVICE_ID_NI_PXI8430_2328 0x70e2
|
||||
#define PCI_DEVICE_ID_NI_PCI8430_2328 0x70e4
|
||||
#define PCI_DEVICE_ID_NI_PXI8430_23216 0x70e6
|
||||
#define PCI_DEVICE_ID_NI_PCI8430_23216 0x70e7
|
||||
#define PCI_DEVICE_ID_NI_PXI8432_2322 0x70e8
|
||||
#define PCI_DEVICE_ID_NI_PCI8432_2322 0x70ea
|
||||
#define PCI_DEVICE_ID_NI_PXI8432_2324 0x70ec
|
||||
#define PCI_DEVICE_ID_NI_PCI8432_2324 0x70ee
|
||||
|
||||
#define PCI_VENDOR_ID_CMD 0x1095
|
||||
#define PCI_DEVICE_ID_CMD_643 0x0643
|
||||
#define PCI_DEVICE_ID_CMD_646 0x0646
|
||||
@@ -2488,6 +2514,8 @@
|
||||
#define PCI_DEVICE_ID_INTEL_IOAT_TBG3 0x3433
|
||||
#define PCI_DEVICE_ID_INTEL_82830_HB 0x3575
|
||||
#define PCI_DEVICE_ID_INTEL_82830_CGC 0x3577
|
||||
#define PCI_DEVICE_ID_INTEL_82854_HB 0x358c
|
||||
#define PCI_DEVICE_ID_INTEL_82854_IG 0x358e
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_HB 0x3580
|
||||
#define PCI_DEVICE_ID_INTEL_82855GM_IG 0x3582
|
||||
#define PCI_DEVICE_ID_INTEL_E7520_MCH 0x3590
|
||||
|
||||
@@ -31,6 +31,8 @@ struct pda_power_pdata {
|
||||
unsigned int wait_for_status; /* msecs, default is 500 */
|
||||
unsigned int wait_for_charger; /* msecs, default is 500 */
|
||||
unsigned int polling_interval; /* msecs, default is 2000 */
|
||||
|
||||
unsigned long ac_max_uA; /* current to draw when on AC */
|
||||
};
|
||||
|
||||
#endif /* __PDA_POWER_H__ */
|
||||
|
||||
@@ -168,4 +168,56 @@ static inline void free_percpu(void *p)
|
||||
#define alloc_percpu(type) (type *)__alloc_percpu(sizeof(type), \
|
||||
__alignof__(type))
|
||||
|
||||
/*
|
||||
* Optional methods for optimized non-lvalue per-cpu variable access.
|
||||
*
|
||||
* @var can be a percpu variable or a field of it and its size should
|
||||
* equal char, int or long. percpu_read() evaluates to a lvalue and
|
||||
* all others to void.
|
||||
*
|
||||
* These operations are guaranteed to be atomic w.r.t. preemption.
|
||||
* The generic versions use plain get/put_cpu_var(). Archs are
|
||||
* encouraged to implement single-instruction alternatives which don't
|
||||
* require preemption protection.
|
||||
*/
|
||||
#ifndef percpu_read
|
||||
# define percpu_read(var) \
|
||||
({ \
|
||||
typeof(per_cpu_var(var)) __tmp_var__; \
|
||||
__tmp_var__ = get_cpu_var(var); \
|
||||
put_cpu_var(var); \
|
||||
__tmp_var__; \
|
||||
})
|
||||
#endif
|
||||
|
||||
#define __percpu_generic_to_op(var, val, op) \
|
||||
do { \
|
||||
get_cpu_var(var) op val; \
|
||||
put_cpu_var(var); \
|
||||
} while (0)
|
||||
|
||||
#ifndef percpu_write
|
||||
# define percpu_write(var, val) __percpu_generic_to_op(var, (val), =)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_add
|
||||
# define percpu_add(var, val) __percpu_generic_to_op(var, (val), +=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_sub
|
||||
# define percpu_sub(var, val) __percpu_generic_to_op(var, (val), -=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_and
|
||||
# define percpu_and(var, val) __percpu_generic_to_op(var, (val), &=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_or
|
||||
# define percpu_or(var, val) __percpu_generic_to_op(var, (val), |=)
|
||||
#endif
|
||||
|
||||
#ifndef percpu_xor
|
||||
# define percpu_xor(var, val) __percpu_generic_to_op(var, (val), ^=)
|
||||
#endif
|
||||
|
||||
#endif /* __LINUX_PERCPU_H */
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include <linux/cache.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/seqlock.h>
|
||||
|
||||
@@ -108,25 +107,14 @@ struct rcu_data {
|
||||
struct rcu_head barrier;
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_data);
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
|
||||
|
||||
/*
|
||||
* Increment the quiescent state counter.
|
||||
* The counter is a bit degenerated: We do not need to know
|
||||
* how many quiescent states passed, just if there was at least
|
||||
* one since the start of the grace period. Thus just a flag.
|
||||
*/
|
||||
static inline void rcu_qsctr_inc(int cpu)
|
||||
{
|
||||
struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
|
||||
rdp->passed_quiesc = 1;
|
||||
}
|
||||
static inline void rcu_bh_qsctr_inc(int cpu)
|
||||
{
|
||||
struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
|
||||
rdp->passed_quiesc = 1;
|
||||
}
|
||||
extern void rcu_qsctr_inc(int cpu);
|
||||
extern void rcu_bh_qsctr_inc(int cpu);
|
||||
|
||||
extern int rcu_pending(int cpu);
|
||||
extern int rcu_needs_cpu(int cpu);
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
#include <linux/cache.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/seqlock.h>
|
||||
#include <linux/lockdep.h>
|
||||
|
||||
+10
-43
@@ -36,34 +36,19 @@
|
||||
#include <linux/cache.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/seqlock.h>
|
||||
|
||||
struct rcu_dyntick_sched {
|
||||
int dynticks;
|
||||
int dynticks_snap;
|
||||
int sched_qs;
|
||||
int sched_qs_snap;
|
||||
int sched_dynticks_snap;
|
||||
};
|
||||
|
||||
DECLARE_PER_CPU(struct rcu_dyntick_sched, rcu_dyntick_sched);
|
||||
|
||||
static inline void rcu_qsctr_inc(int cpu)
|
||||
{
|
||||
struct rcu_dyntick_sched *rdssp = &per_cpu(rcu_dyntick_sched, cpu);
|
||||
|
||||
rdssp->sched_qs++;
|
||||
}
|
||||
#define rcu_bh_qsctr_inc(cpu)
|
||||
extern void rcu_qsctr_inc(int cpu);
|
||||
static inline void rcu_bh_qsctr_inc(int cpu) { }
|
||||
|
||||
/*
|
||||
* Someone might want to pass call_rcu_bh as a function pointer.
|
||||
* So this needs to just be a rename and not a macro function.
|
||||
* (no parentheses)
|
||||
*/
|
||||
#define call_rcu_bh call_rcu
|
||||
#define call_rcu_bh call_rcu
|
||||
|
||||
/**
|
||||
* call_rcu_sched - Queue RCU callback for invocation after sched grace period.
|
||||
@@ -117,30 +102,12 @@ extern struct rcupreempt_trace *rcupreempt_trace_cpu(int cpu);
|
||||
struct softirq_action;
|
||||
|
||||
#ifdef CONFIG_NO_HZ
|
||||
|
||||
static inline void rcu_enter_nohz(void)
|
||||
{
|
||||
static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1);
|
||||
|
||||
smp_mb(); /* CPUs seeing ++ must see prior RCU read-side crit sects */
|
||||
__get_cpu_var(rcu_dyntick_sched).dynticks++;
|
||||
WARN_ON_RATELIMIT(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1, &rs);
|
||||
}
|
||||
|
||||
static inline void rcu_exit_nohz(void)
|
||||
{
|
||||
static DEFINE_RATELIMIT_STATE(rs, 10 * HZ, 1);
|
||||
|
||||
__get_cpu_var(rcu_dyntick_sched).dynticks++;
|
||||
smp_mb(); /* CPUs seeing ++ must see later RCU read-side crit sects */
|
||||
WARN_ON_RATELIMIT(!(__get_cpu_var(rcu_dyntick_sched).dynticks & 0x1),
|
||||
&rs);
|
||||
}
|
||||
|
||||
#else /* CONFIG_NO_HZ */
|
||||
#define rcu_enter_nohz() do { } while (0)
|
||||
#define rcu_exit_nohz() do { } while (0)
|
||||
#endif /* CONFIG_NO_HZ */
|
||||
extern void rcu_enter_nohz(void);
|
||||
extern void rcu_exit_nohz(void);
|
||||
#else
|
||||
# define rcu_enter_nohz() do { } while (0)
|
||||
# define rcu_exit_nohz() do { } while (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* A context switch is a grace period for rcupreempt synchronize_rcu()
|
||||
|
||||
+2
-25
@@ -33,7 +33,6 @@
|
||||
#include <linux/cache.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/seqlock.h>
|
||||
|
||||
@@ -236,30 +235,8 @@ struct rcu_state {
|
||||
#endif /* #ifdef CONFIG_NO_HZ */
|
||||
};
|
||||
|
||||
extern struct rcu_state rcu_state;
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_data);
|
||||
|
||||
extern struct rcu_state rcu_bh_state;
|
||||
DECLARE_PER_CPU(struct rcu_data, rcu_bh_data);
|
||||
|
||||
/*
|
||||
* Increment the quiescent state counter.
|
||||
* The counter is a bit degenerated: We do not need to know
|
||||
* how many quiescent states passed, just if there was at least
|
||||
* one since the start of the grace period. Thus just a flag.
|
||||
*/
|
||||
static inline void rcu_qsctr_inc(int cpu)
|
||||
{
|
||||
struct rcu_data *rdp = &per_cpu(rcu_data, cpu);
|
||||
rdp->passed_quiesc = 1;
|
||||
rdp->passed_quiesc_completed = rdp->completed;
|
||||
}
|
||||
static inline void rcu_bh_qsctr_inc(int cpu)
|
||||
{
|
||||
struct rcu_data *rdp = &per_cpu(rcu_bh_data, cpu);
|
||||
rdp->passed_quiesc = 1;
|
||||
rdp->passed_quiesc_completed = rdp->completed;
|
||||
}
|
||||
extern void rcu_qsctr_inc(int cpu);
|
||||
extern void rcu_bh_qsctr_inc(int cpu);
|
||||
|
||||
extern int rcu_pending(int cpu);
|
||||
extern int rcu_needs_cpu(int cpu);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#ifndef __ROTARY_ENCODER_H__
|
||||
#define __ROTARY_ENCODER_H__
|
||||
|
||||
struct rotary_encoder_platform_data {
|
||||
unsigned int steps;
|
||||
unsigned int axis;
|
||||
unsigned int gpio_a;
|
||||
unsigned int gpio_b;
|
||||
unsigned int inverted_a;
|
||||
unsigned int inverted_b;
|
||||
};
|
||||
|
||||
#endif /* __ROTARY_ENCODER_H__ */
|
||||
+17
-9
@@ -205,7 +205,8 @@ extern unsigned long long time_sync_thresh;
|
||||
#define task_is_stopped_or_traced(task) \
|
||||
((task->state & (__TASK_STOPPED | __TASK_TRACED)) != 0)
|
||||
#define task_contributes_to_load(task) \
|
||||
((task->state & TASK_UNINTERRUPTIBLE) != 0)
|
||||
((task->state & TASK_UNINTERRUPTIBLE) != 0 && \
|
||||
(task->flags & PF_FROZEN) == 0)
|
||||
|
||||
#define __set_task_state(tsk, state_value) \
|
||||
do { (tsk)->state = (state_value); } while (0)
|
||||
@@ -300,17 +301,11 @@ extern int proc_dosoftlockup_thresh(struct ctl_table *table, int write,
|
||||
struct file *filp, void __user *buffer,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
extern unsigned int softlockup_panic;
|
||||
extern unsigned long sysctl_hung_task_check_count;
|
||||
extern unsigned long sysctl_hung_task_timeout_secs;
|
||||
extern unsigned long sysctl_hung_task_warnings;
|
||||
extern int softlockup_thresh;
|
||||
#else
|
||||
static inline void softlockup_tick(void)
|
||||
{
|
||||
}
|
||||
static inline void spawn_softlockup_task(void)
|
||||
{
|
||||
}
|
||||
static inline void touch_softlockup_watchdog(void)
|
||||
{
|
||||
}
|
||||
@@ -319,6 +314,15 @@ static inline void touch_all_softlockup_watchdogs(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DETECT_HUNG_TASK
|
||||
extern unsigned int sysctl_hung_task_panic;
|
||||
extern unsigned long sysctl_hung_task_check_count;
|
||||
extern unsigned long sysctl_hung_task_timeout_secs;
|
||||
extern unsigned long sysctl_hung_task_warnings;
|
||||
extern int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
|
||||
struct file *filp, void __user *buffer,
|
||||
size_t *lenp, loff_t *ppos);
|
||||
#endif
|
||||
|
||||
/* Attach to any functions which should be ignored in wchan output. */
|
||||
#define __sched __attribute__((__section__(".sched.text")))
|
||||
@@ -1255,9 +1259,8 @@ struct task_struct {
|
||||
/* ipc stuff */
|
||||
struct sysv_sem sysvsem;
|
||||
#endif
|
||||
#ifdef CONFIG_DETECT_SOFTLOCKUP
|
||||
#ifdef CONFIG_DETECT_HUNG_TASK
|
||||
/* hung task detection */
|
||||
unsigned long last_switch_timestamp;
|
||||
unsigned long last_switch_count;
|
||||
#endif
|
||||
/* CPU-specific state of this task */
|
||||
@@ -1294,6 +1297,11 @@ struct task_struct {
|
||||
/* Protection of (de-)allocation: mm, files, fs, tty, keyrings */
|
||||
spinlock_t alloc_lock;
|
||||
|
||||
#ifdef CONFIG_GENERIC_HARDIRQS
|
||||
/* IRQ handler threads */
|
||||
struct irqaction *irqaction;
|
||||
#endif
|
||||
|
||||
/* Protection of the PI data structures: */
|
||||
spinlock_t pi_lock;
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/xfrm.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <net/flow.h>
|
||||
|
||||
/* Maximum number of letters for an LSM name string */
|
||||
@@ -2953,5 +2954,28 @@ static inline void securityfs_remove(struct dentry *dentry)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SECURITY
|
||||
|
||||
static inline char *alloc_secdata(void)
|
||||
{
|
||||
return (char *)get_zeroed_page(GFP_KERNEL);
|
||||
}
|
||||
|
||||
static inline void free_secdata(void *secdata)
|
||||
{
|
||||
free_page((unsigned long)secdata);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static inline char *alloc_secdata(void)
|
||||
{
|
||||
return (char *)1;
|
||||
}
|
||||
|
||||
static inline void free_secdata(void *secdata)
|
||||
{ }
|
||||
#endif /* CONFIG_SECURITY */
|
||||
|
||||
#endif /* ! __LINUX_SECURITY_H */
|
||||
|
||||
|
||||
@@ -164,6 +164,9 @@
|
||||
/* NWPSERIAL */
|
||||
#define PORT_NWPSERIAL 85
|
||||
|
||||
/* MAX3100 */
|
||||
#define PORT_MAX3100 86
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
@@ -277,7 +280,7 @@ struct uart_port {
|
||||
struct uart_icount icount; /* statistics */
|
||||
|
||||
struct console *cons; /* struct console, if any */
|
||||
#ifdef CONFIG_SERIAL_CORE_CONSOLE
|
||||
#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(SUPPORT_SYSRQ)
|
||||
unsigned long sysrq; /* sysrq timeout */
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (C) 2007 Christian Pellegrin
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _LINUX_SERIAL_MAX3100_H
|
||||
#define _LINUX_SERIAL_MAX3100_H 1
|
||||
|
||||
|
||||
/**
|
||||
* struct plat_max3100 - MAX3100 SPI UART platform data
|
||||
* @loopback: force MAX3100 in loopback
|
||||
* @crystal: 1 for 3.6864 Mhz, 0 for 1.8432
|
||||
* @max3100_hw_suspend: MAX3100 has a shutdown pin. This is a hook
|
||||
* called on suspend and resume to activate it.
|
||||
* @poll_time: poll time for CTS signal in ms, 0 disables (so no hw
|
||||
* flow ctrl is possible but you have less CPU usage)
|
||||
*
|
||||
* You should use this structure in your machine description to specify
|
||||
* how the MAX3100 is connected. Example:
|
||||
*
|
||||
* static struct plat_max3100 max3100_plat_data = {
|
||||
* .loopback = 0,
|
||||
* .crystal = 0,
|
||||
* .poll_time = 100,
|
||||
* };
|
||||
*
|
||||
* static struct spi_board_info spi_board_info[] = {
|
||||
* {
|
||||
* .modalias = "max3100",
|
||||
* .platform_data = &max3100_plat_data,
|
||||
* .irq = IRQ_EINT12,
|
||||
* .max_speed_hz = 5*1000*1000,
|
||||
* .chip_select = 0,
|
||||
* },
|
||||
* };
|
||||
*
|
||||
**/
|
||||
struct plat_max3100 {
|
||||
int loopback;
|
||||
int crystal;
|
||||
void (*max3100_hw_suspend) (int suspend);
|
||||
int poll_time;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* sht15.h - support for the SHT15 Temperature and Humidity Sensor
|
||||
*
|
||||
* Copyright (c) 2009 Jonathan Cameron
|
||||
*
|
||||
* Copyright (c) 2007 Wouter Horre
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct sht15_platform_data - sht15 connectivity info
|
||||
* @gpio_data: no. of gpio to which bidirectional data line is connected
|
||||
* @gpio_sck: no. of gpio to which the data clock is connected.
|
||||
* @supply_mv: supply voltage in mv. Overridden by regulator if available.
|
||||
**/
|
||||
struct sht15_platform_data {
|
||||
int gpio_data;
|
||||
int gpio_sck;
|
||||
int supply_mv;
|
||||
};
|
||||
|
||||
@@ -73,8 +73,8 @@ found:
|
||||
|
||||
ret = kmem_cache_alloc_notrace(cachep, flags);
|
||||
|
||||
kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret,
|
||||
size, slab_buffer_size(cachep), flags);
|
||||
trace_kmalloc(_THIS_IP_, ret,
|
||||
size, slab_buffer_size(cachep), flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -128,9 +128,9 @@ found:
|
||||
|
||||
ret = kmem_cache_alloc_node_notrace(cachep, flags, node);
|
||||
|
||||
kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_,
|
||||
ret, size, slab_buffer_size(cachep),
|
||||
flags, node);
|
||||
trace_kmalloc_node(_THIS_IP_, ret,
|
||||
size, slab_buffer_size(cachep),
|
||||
flags, node);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -233,8 +233,7 @@ static __always_inline void *kmalloc_large(size_t size, gfp_t flags)
|
||||
unsigned int order = get_order(size);
|
||||
void *ret = (void *) __get_free_pages(flags | __GFP_COMP, order);
|
||||
|
||||
kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC, _THIS_IP_, ret,
|
||||
size, PAGE_SIZE << order, flags);
|
||||
trace_kmalloc(_THIS_IP_, ret, size, PAGE_SIZE << order, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -255,9 +254,7 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)
|
||||
|
||||
ret = kmem_cache_alloc_notrace(s, flags);
|
||||
|
||||
kmemtrace_mark_alloc(KMEMTRACE_TYPE_KMALLOC,
|
||||
_THIS_IP_, ret,
|
||||
size, s->size, flags);
|
||||
trace_kmalloc(_THIS_IP_, ret, size, s->size, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -296,9 +293,8 @@ static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node)
|
||||
|
||||
ret = kmem_cache_alloc_node_notrace(s, flags, node);
|
||||
|
||||
kmemtrace_mark_alloc_node(KMEMTRACE_TYPE_KMALLOC,
|
||||
_THIS_IP_, ret,
|
||||
size, s->size, flags, node);
|
||||
trace_kmalloc_node(_THIS_IP_, ret,
|
||||
size, s->size, flags, node);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/* linux/spi/ad7879.h */
|
||||
|
||||
/* Touchscreen characteristics vary between boards and models. The
|
||||
* platform_data for the device's "struct device" holds this information.
|
||||
*
|
||||
* It's OK if the min/max values are zero.
|
||||
*/
|
||||
struct ad7879_platform_data {
|
||||
u16 model; /* 7879 */
|
||||
u16 x_plate_ohms;
|
||||
u16 x_min, x_max;
|
||||
u16 y_min, y_max;
|
||||
u16 pressure_min, pressure_max;
|
||||
|
||||
/* [0..255] 0=OFF Starts at 1=550us and goes
|
||||
* all the way to 9.440ms in steps of 35us.
|
||||
*/
|
||||
u8 pen_down_acc_interval;
|
||||
/* [0..15] Starts at 0=128us and goes all the
|
||||
* way to 4.096ms in steps of 128us.
|
||||
*/
|
||||
u8 first_conversion_delay;
|
||||
/* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
|
||||
u8 acquisition_time;
|
||||
/* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */
|
||||
u8 averaging;
|
||||
/* [0..3] Perform X measurements 0 = OFF,
|
||||
* 1 = 4, 2 = 8, 3 = 16 (median > averaging)
|
||||
*/
|
||||
u8 median;
|
||||
/* 1 = AUX/VBAT/GPIO set to GPIO Output */
|
||||
u8 gpio_output;
|
||||
/* Initial GPIO pin state (valid if gpio_output = 1) */
|
||||
u8 gpio_default;
|
||||
};
|
||||
@@ -204,6 +204,7 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
|
||||
* SPI slaves, and are numbered from zero to num_chipselects.
|
||||
* each slave has a chipselect signal, but it's common that not
|
||||
* every chipselect is connected to a slave.
|
||||
* @dma_alignment: SPI controller constraint on DMA buffers alignment.
|
||||
* @setup: updates the device mode and clocking records used by a
|
||||
* device's SPI controller; protocol code may call this. This
|
||||
* must fail if an unrecognized or unsupported mode is requested.
|
||||
@@ -239,6 +240,11 @@ struct spi_master {
|
||||
*/
|
||||
u16 num_chipselect;
|
||||
|
||||
/* some SPI controllers pose alignment requirements on DMAable
|
||||
* buffers; let protocol drivers know about these requirements.
|
||||
*/
|
||||
u16 dma_alignment;
|
||||
|
||||
/* setup mode and clock, etc (spi driver may call many times) */
|
||||
int (*setup)(struct spi_device *spi);
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
* converts to "bar".
|
||||
*/
|
||||
|
||||
#define __stringify_1(x) #x
|
||||
#define __stringify(x) __stringify_1(x)
|
||||
#define __stringify_1(x...) #x
|
||||
#define __stringify(x...) __stringify_1(x)
|
||||
|
||||
#endif /* !__LINUX_STRINGIFY_H */
|
||||
|
||||
@@ -24,6 +24,15 @@
|
||||
*/
|
||||
typedef int (*svc_thread_fn)(void *);
|
||||
|
||||
/* statistics for svc_pool structures */
|
||||
struct svc_pool_stats {
|
||||
unsigned long packets;
|
||||
unsigned long sockets_queued;
|
||||
unsigned long threads_woken;
|
||||
unsigned long overloads_avoided;
|
||||
unsigned long threads_timedout;
|
||||
};
|
||||
|
||||
/*
|
||||
*
|
||||
* RPC service thread pool.
|
||||
@@ -41,6 +50,8 @@ struct svc_pool {
|
||||
struct list_head sp_sockets; /* pending sockets */
|
||||
unsigned int sp_nrthreads; /* # of threads in pool */
|
||||
struct list_head sp_all_threads; /* all server threads */
|
||||
int sp_nwaking; /* number of threads woken but not yet active */
|
||||
struct svc_pool_stats sp_stats; /* statistics on pool operation */
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
@@ -83,6 +94,8 @@ struct svc_serv {
|
||||
struct module * sv_module; /* optional module to count when
|
||||
* adding threads */
|
||||
svc_thread_fn sv_function; /* main function for threads */
|
||||
unsigned int sv_drc_max_pages; /* Total pages for DRC */
|
||||
unsigned int sv_drc_pages_used;/* DRC pages used */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -218,6 +231,7 @@ struct svc_rqst {
|
||||
struct svc_cred rq_cred; /* auth info */
|
||||
void * rq_xprt_ctxt; /* transport specific context ptr */
|
||||
struct svc_deferred_req*rq_deferred; /* deferred request we are replaying */
|
||||
int rq_usedeferral; /* use deferral */
|
||||
|
||||
size_t rq_xprt_hlen; /* xprt header len */
|
||||
struct xdr_buf rq_arg;
|
||||
@@ -263,6 +277,7 @@ struct svc_rqst {
|
||||
* cache pages */
|
||||
wait_queue_head_t rq_wait; /* synchronization */
|
||||
struct task_struct *rq_task; /* service thread */
|
||||
int rq_waking; /* 1 if thread is being woken */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -393,6 +408,7 @@ struct svc_serv * svc_create_pooled(struct svc_program *, unsigned int,
|
||||
void (*shutdown)(struct svc_serv *),
|
||||
svc_thread_fn, struct module *);
|
||||
int svc_set_num_threads(struct svc_serv *, struct svc_pool *, int);
|
||||
int svc_pool_stats_open(struct svc_serv *serv, struct file *file);
|
||||
void svc_destroy(struct svc_serv *);
|
||||
int svc_process(struct svc_rqst *);
|
||||
int svc_register(const struct svc_serv *, const int,
|
||||
|
||||
+19
-19
@@ -69,27 +69,27 @@ struct xdr_buf {
|
||||
* pre-xdr'ed macros.
|
||||
*/
|
||||
|
||||
#define xdr_zero __constant_htonl(0)
|
||||
#define xdr_one __constant_htonl(1)
|
||||
#define xdr_two __constant_htonl(2)
|
||||
#define xdr_zero cpu_to_be32(0)
|
||||
#define xdr_one cpu_to_be32(1)
|
||||
#define xdr_two cpu_to_be32(2)
|
||||
|
||||
#define rpc_success __constant_htonl(RPC_SUCCESS)
|
||||
#define rpc_prog_unavail __constant_htonl(RPC_PROG_UNAVAIL)
|
||||
#define rpc_prog_mismatch __constant_htonl(RPC_PROG_MISMATCH)
|
||||
#define rpc_proc_unavail __constant_htonl(RPC_PROC_UNAVAIL)
|
||||
#define rpc_garbage_args __constant_htonl(RPC_GARBAGE_ARGS)
|
||||
#define rpc_system_err __constant_htonl(RPC_SYSTEM_ERR)
|
||||
#define rpc_drop_reply __constant_htonl(RPC_DROP_REPLY)
|
||||
#define rpc_success cpu_to_be32(RPC_SUCCESS)
|
||||
#define rpc_prog_unavail cpu_to_be32(RPC_PROG_UNAVAIL)
|
||||
#define rpc_prog_mismatch cpu_to_be32(RPC_PROG_MISMATCH)
|
||||
#define rpc_proc_unavail cpu_to_be32(RPC_PROC_UNAVAIL)
|
||||
#define rpc_garbage_args cpu_to_be32(RPC_GARBAGE_ARGS)
|
||||
#define rpc_system_err cpu_to_be32(RPC_SYSTEM_ERR)
|
||||
#define rpc_drop_reply cpu_to_be32(RPC_DROP_REPLY)
|
||||
|
||||
#define rpc_auth_ok __constant_htonl(RPC_AUTH_OK)
|
||||
#define rpc_autherr_badcred __constant_htonl(RPC_AUTH_BADCRED)
|
||||
#define rpc_autherr_rejectedcred __constant_htonl(RPC_AUTH_REJECTEDCRED)
|
||||
#define rpc_autherr_badverf __constant_htonl(RPC_AUTH_BADVERF)
|
||||
#define rpc_autherr_rejectedverf __constant_htonl(RPC_AUTH_REJECTEDVERF)
|
||||
#define rpc_autherr_tooweak __constant_htonl(RPC_AUTH_TOOWEAK)
|
||||
#define rpcsec_gsserr_credproblem __constant_htonl(RPCSEC_GSS_CREDPROBLEM)
|
||||
#define rpcsec_gsserr_ctxproblem __constant_htonl(RPCSEC_GSS_CTXPROBLEM)
|
||||
#define rpc_autherr_oldseqnum __constant_htonl(101)
|
||||
#define rpc_auth_ok cpu_to_be32(RPC_AUTH_OK)
|
||||
#define rpc_autherr_badcred cpu_to_be32(RPC_AUTH_BADCRED)
|
||||
#define rpc_autherr_rejectedcred cpu_to_be32(RPC_AUTH_REJECTEDCRED)
|
||||
#define rpc_autherr_badverf cpu_to_be32(RPC_AUTH_BADVERF)
|
||||
#define rpc_autherr_rejectedverf cpu_to_be32(RPC_AUTH_REJECTEDVERF)
|
||||
#define rpc_autherr_tooweak cpu_to_be32(RPC_AUTH_TOOWEAK)
|
||||
#define rpcsec_gsserr_credproblem cpu_to_be32(RPCSEC_GSS_CREDPROBLEM)
|
||||
#define rpcsec_gsserr_ctxproblem cpu_to_be32(RPCSEC_GSS_CTXPROBLEM)
|
||||
#define rpc_autherr_oldseqnum cpu_to_be32(101)
|
||||
|
||||
/*
|
||||
* Miscellaneous XDR helper functions
|
||||
|
||||
@@ -65,7 +65,7 @@ struct old_linux_dirent;
|
||||
#include <asm/signal.h>
|
||||
#include <linux/quota.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <trace/syscall.h>
|
||||
|
||||
#define __SC_DECL1(t1, a1) t1 a1
|
||||
#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__)
|
||||
|
||||
@@ -309,7 +309,8 @@ extern void tty_set_operations(struct tty_driver *driver,
|
||||
extern struct tty_driver *tty_find_polling_driver(char *name, int *line);
|
||||
|
||||
extern void tty_driver_kref_put(struct tty_driver *driver);
|
||||
extern inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
|
||||
|
||||
static inline struct tty_driver *tty_driver_kref_get(struct tty_driver *d)
|
||||
{
|
||||
kref_get(&d->kref);
|
||||
return d;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/**
|
||||
* usb_serial_port: structure for the specific ports of a device.
|
||||
* @serial: pointer back to the struct usb_serial owner of this port.
|
||||
* @tty: pointer to the corresponding tty for this port.
|
||||
* @port: pointer to the corresponding tty_port for this port.
|
||||
* @lock: spinlock to grab when updating portions of this structure.
|
||||
* @mutex: mutex used to synchronize serial_open() and serial_close()
|
||||
* access for this port.
|
||||
@@ -44,19 +44,22 @@
|
||||
* @interrupt_out_endpointAddress: endpoint address for the interrupt out pipe
|
||||
* for this port.
|
||||
* @bulk_in_buffer: pointer to the bulk in buffer for this port.
|
||||
* @bulk_in_size: the size of the bulk_in_buffer, in bytes.
|
||||
* @read_urb: pointer to the bulk in struct urb for this port.
|
||||
* @bulk_in_endpointAddress: endpoint address for the bulk in pipe for this
|
||||
* port.
|
||||
* @bulk_out_buffer: pointer to the bulk out buffer for this port.
|
||||
* @bulk_out_size: the size of the bulk_out_buffer, in bytes.
|
||||
* @write_urb: pointer to the bulk out struct urb for this port.
|
||||
* @write_urb_busy: port`s writing status
|
||||
* @bulk_out_endpointAddress: endpoint address for the bulk out pipe for this
|
||||
* port.
|
||||
* @write_wait: a wait_queue_head_t used by the port.
|
||||
* @work: work queue entry for the line discipline waking up.
|
||||
* @open_count: number of times this port has been opened.
|
||||
* @throttled: nonzero if the read urb is inactive to throttle the device
|
||||
* @throttle_req: nonzero if the tty wants to throttle us
|
||||
* @console: attached usb serial console
|
||||
* @dev: pointer to the serial device
|
||||
*
|
||||
* This structure is used by the usb-serial core and drivers for the specific
|
||||
* ports of a device.
|
||||
|
||||
@@ -737,6 +737,11 @@ struct v4l2_input {
|
||||
#define V4L2_IN_ST_NO_SIGNAL 0x00000002
|
||||
#define V4L2_IN_ST_NO_COLOR 0x00000004
|
||||
|
||||
/* field 'status' - sensor orientation */
|
||||
/* If sensor is mounted upside down set both bits */
|
||||
#define V4L2_IN_ST_HFLIP 0x00000010 /* Frames are flipped horizontally */
|
||||
#define V4L2_IN_ST_VFLIP 0x00000020 /* Frames are flipped vertically */
|
||||
|
||||
/* field 'status' - analog */
|
||||
#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
|
||||
#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
|
||||
|
||||
@@ -168,6 +168,8 @@ void writeback_set_ratelimit(void);
|
||||
/* pdflush.c */
|
||||
extern int nr_pdflush_threads; /* Global so it can be exported to sysctl
|
||||
read-only. */
|
||||
extern int nr_pdflush_threads_max; /* Global so it can be exported to sysctl */
|
||||
extern int nr_pdflush_threads_min; /* Global so it can be exported to sysctl */
|
||||
|
||||
|
||||
#endif /* WRITEBACK_H */
|
||||
|
||||
Reference in New Issue
Block a user