mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-23 21:19:04 -04:00
Merge branch 'master' into for-next
Pull linus#master to merge PER_CPU_DEF_ATTRIBUTES and alpha build fix changes. As alpha in percpu tree uses 'weak' attribute instead of inline assembly, there's no need for __used attribute. Conflicts: arch/alpha/include/asm/percpu.h arch/mn10300/kernel/vmlinux.lds.S include/linux/percpu-defs.h
This commit is contained in:
commit
c43768cbb7
1365 changed files with 55248 additions and 17552 deletions
|
|
@ -57,6 +57,7 @@ header-y += dlmconstants.h
|
|||
header-y += dlm_device.h
|
||||
header-y += dlm_netlink.h
|
||||
header-y += dm-ioctl.h
|
||||
header-y += dm-log-userspace.h
|
||||
header-y += dn.h
|
||||
header-y += dqblk_xfs.h
|
||||
header-y += efs_fs_sb.h
|
||||
|
|
|
|||
|
|
@ -113,9 +113,6 @@ void acpi_irq_stats_init(void);
|
|||
extern u32 acpi_irq_handled;
|
||||
extern u32 acpi_irq_not_handled;
|
||||
|
||||
extern struct acpi_mcfg_allocation *pci_mmcfg_config;
|
||||
extern int pci_mmcfg_config_num;
|
||||
|
||||
extern int sbf_port;
|
||||
extern unsigned long acpi_realmode_flags;
|
||||
|
||||
|
|
@ -293,7 +290,10 @@ void __init acpi_s4_no_nvs(void);
|
|||
OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL)
|
||||
|
||||
extern acpi_status acpi_pci_osc_control_set(acpi_handle handle, u32 flags);
|
||||
extern void acpi_early_init(void);
|
||||
|
||||
#else /* CONFIG_ACPI */
|
||||
static inline void acpi_early_init(void) { }
|
||||
|
||||
static inline int early_acpi_boot_init(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -121,9 +121,9 @@ struct kiocb {
|
|||
|
||||
/*
|
||||
* If the aio_resfd field of the userspace iocb is not zero,
|
||||
* this is the underlying file* to deliver event to.
|
||||
* this is the underlying eventfd context to deliver events to.
|
||||
*/
|
||||
struct file *ki_eventfd;
|
||||
struct eventfd_ctx *ki_eventfd;
|
||||
};
|
||||
|
||||
#define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY)
|
||||
|
|
|
|||
|
|
@ -599,6 +599,8 @@ extern void audit_log_untrustedstring(struct audit_buffer *ab,
|
|||
extern void audit_log_d_path(struct audit_buffer *ab,
|
||||
const char *prefix,
|
||||
struct path *path);
|
||||
extern void audit_log_key(struct audit_buffer *ab,
|
||||
char *key);
|
||||
extern void audit_log_lost(const char *message);
|
||||
extern int audit_update_lsm_rules(void);
|
||||
|
||||
|
|
@ -621,6 +623,7 @@ extern int audit_enabled;
|
|||
#define audit_log_n_untrustedstring(a,n,s) do { ; } while (0)
|
||||
#define audit_log_untrustedstring(a,s) do { ; } while (0)
|
||||
#define audit_log_d_path(b, p, d) do { ; } while (0)
|
||||
#define audit_log_key(b, k) do { ; } while (0)
|
||||
#define audit_enabled 0
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -319,7 +319,6 @@ static inline int bio_has_allocated_vec(struct bio *bio)
|
|||
*/
|
||||
struct bio_integrity_payload {
|
||||
struct bio *bip_bio; /* parent bio */
|
||||
struct bio_vec *bip_vec; /* integrity data vector */
|
||||
|
||||
sector_t bip_sector; /* virtual start sector */
|
||||
|
||||
|
|
@ -328,11 +327,12 @@ struct bio_integrity_payload {
|
|||
|
||||
unsigned int bip_size;
|
||||
|
||||
unsigned short bip_pool; /* pool the ivec came from */
|
||||
unsigned short bip_slab; /* slab the bip came from */
|
||||
unsigned short bip_vcnt; /* # of integrity bio_vecs */
|
||||
unsigned short bip_idx; /* current bip_vec index */
|
||||
|
||||
struct work_struct bip_work; /* I/O completion */
|
||||
struct bio_vec bip_vec[0]; /* embedded bvec array */
|
||||
};
|
||||
#endif /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
|
|
@ -430,6 +430,9 @@ struct bio_set {
|
|||
unsigned int front_pad;
|
||||
|
||||
mempool_t *bio_pool;
|
||||
#if defined(CONFIG_BLK_DEV_INTEGRITY)
|
||||
mempool_t *bio_integrity_pool;
|
||||
#endif
|
||||
mempool_t *bvec_pool;
|
||||
};
|
||||
|
||||
|
|
@ -634,8 +637,9 @@ static inline struct bio *bio_list_get(struct bio_list *bl)
|
|||
|
||||
#define bio_integrity(bio) (bio->bi_integrity != NULL)
|
||||
|
||||
extern struct bio_integrity_payload *bio_integrity_alloc_bioset(struct bio *, gfp_t, unsigned int, struct bio_set *);
|
||||
extern struct bio_integrity_payload *bio_integrity_alloc(struct bio *, gfp_t, unsigned int);
|
||||
extern void bio_integrity_free(struct bio *);
|
||||
extern void bio_integrity_free(struct bio *, struct bio_set *);
|
||||
extern int bio_integrity_add_page(struct bio *, struct page *, unsigned int, unsigned int);
|
||||
extern int bio_integrity_enabled(struct bio *bio);
|
||||
extern int bio_integrity_set_tag(struct bio *, void *, unsigned int);
|
||||
|
|
@ -645,21 +649,27 @@ extern void bio_integrity_endio(struct bio *, int);
|
|||
extern void bio_integrity_advance(struct bio *, unsigned int);
|
||||
extern void bio_integrity_trim(struct bio *, unsigned int, unsigned int);
|
||||
extern void bio_integrity_split(struct bio *, struct bio_pair *, int);
|
||||
extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t);
|
||||
extern int bio_integrity_clone(struct bio *, struct bio *, gfp_t, struct bio_set *);
|
||||
extern int bioset_integrity_create(struct bio_set *, int);
|
||||
extern void bioset_integrity_free(struct bio_set *);
|
||||
extern void bio_integrity_init(void);
|
||||
|
||||
#else /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
#define bio_integrity(a) (0)
|
||||
#define bioset_integrity_create(a, b) (0)
|
||||
#define bio_integrity_prep(a) (0)
|
||||
#define bio_integrity_enabled(a) (0)
|
||||
#define bio_integrity_clone(a, b, c) (0)
|
||||
#define bio_integrity_free(a) do { } while (0)
|
||||
#define bio_integrity_clone(a, b, c, d) (0)
|
||||
#define bioset_integrity_free(a) do { } while (0)
|
||||
#define bio_integrity_free(a, b) do { } while (0)
|
||||
#define bio_integrity_endio(a, b) do { } while (0)
|
||||
#define bio_integrity_advance(a, b) do { } while (0)
|
||||
#define bio_integrity_trim(a, b, c) do { } while (0)
|
||||
#define bio_integrity_split(a, b, c) do { } while (0)
|
||||
#define bio_integrity_set_tag(a, b, c) do { } while (0)
|
||||
#define bio_integrity_get_tag(a, b, c) do { } while (0)
|
||||
#define bio_integrity_init(a) do { } while (0)
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
|
|
|
|||
|
|
@ -301,12 +301,6 @@ struct blk_queue_tag {
|
|||
#define BLK_SCSI_MAX_CMDS (256)
|
||||
#define BLK_SCSI_CMD_PER_LONG (BLK_SCSI_MAX_CMDS / (sizeof(long) * 8))
|
||||
|
||||
struct blk_cmd_filter {
|
||||
unsigned long read_ok[BLK_SCSI_CMD_PER_LONG];
|
||||
unsigned long write_ok[BLK_SCSI_CMD_PER_LONG];
|
||||
struct kobject kobj;
|
||||
};
|
||||
|
||||
struct queue_limits {
|
||||
unsigned long bounce_pfn;
|
||||
unsigned long seg_boundary_mask;
|
||||
|
|
@ -445,7 +439,6 @@ struct request_queue
|
|||
#if defined(CONFIG_BLK_DEV_BSG)
|
||||
struct bsg_class_device bsg_dev;
|
||||
#endif
|
||||
struct blk_cmd_filter cmd_filter;
|
||||
};
|
||||
|
||||
#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */
|
||||
|
|
@ -998,13 +991,7 @@ static inline int sb_issue_discard(struct super_block *sb,
|
|||
return blkdev_issue_discard(sb->s_bdev, block, nr_blocks, GFP_KERNEL);
|
||||
}
|
||||
|
||||
/*
|
||||
* command filter functions
|
||||
*/
|
||||
extern int blk_verify_command(struct blk_cmd_filter *filter,
|
||||
unsigned char *cmd, fmode_t has_write_perm);
|
||||
extern void blk_unregister_filter(struct gendisk *disk);
|
||||
extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter);
|
||||
extern int blk_verify_command(unsigned char *cmd, fmode_t has_write_perm);
|
||||
|
||||
#define MAX_PHYS_SEGMENTS 128
|
||||
#define MAX_HW_SEGMENTS 128
|
||||
|
|
|
|||
|
|
@ -41,8 +41,10 @@
|
|||
#define CN_IDX_BB 0x5 /* BlackBoard, from the TSP GPL sampling framework */
|
||||
#define CN_DST_IDX 0x6
|
||||
#define CN_DST_VAL 0x1
|
||||
#define CN_IDX_DM 0x7 /* Device Mapper */
|
||||
#define CN_VAL_DM_USERSPACE_LOG 0x1
|
||||
|
||||
#define CN_NETLINK_USERS 7
|
||||
#define CN_NETLINK_USERS 8
|
||||
|
||||
/*
|
||||
* Maximum connector's message size.
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ static inline void unregister_cpu_notifier(struct notifier_block *nb)
|
|||
|
||||
int cpu_up(unsigned int cpu);
|
||||
void notify_cpu_starting(unsigned int cpu);
|
||||
extern void cpu_hotplug_init(void);
|
||||
extern void cpu_maps_update_begin(void);
|
||||
extern void cpu_maps_update_done(void);
|
||||
|
||||
|
|
@ -84,10 +83,6 @@ static inline void unregister_cpu_notifier(struct notifier_block *nb)
|
|||
{
|
||||
}
|
||||
|
||||
static inline void cpu_hotplug_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void cpu_maps_update_begin(void)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/bio.h>
|
||||
#include <linux/blkdev.h>
|
||||
|
||||
struct dm_dev;
|
||||
struct dm_target;
|
||||
struct dm_table;
|
||||
struct mapped_device;
|
||||
|
|
@ -21,6 +22,7 @@ typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
|
|||
union map_info {
|
||||
void *ptr;
|
||||
unsigned long long ll;
|
||||
unsigned flush_request;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -80,6 +82,15 @@ typedef int (*dm_ioctl_fn) (struct dm_target *ti, unsigned int cmd,
|
|||
typedef int (*dm_merge_fn) (struct dm_target *ti, struct bvec_merge_data *bvm,
|
||||
struct bio_vec *biovec, int max_size);
|
||||
|
||||
typedef int (*iterate_devices_callout_fn) (struct dm_target *ti,
|
||||
struct dm_dev *dev,
|
||||
sector_t physical_start,
|
||||
void *data);
|
||||
|
||||
typedef int (*dm_iterate_devices_fn) (struct dm_target *ti,
|
||||
iterate_devices_callout_fn fn,
|
||||
void *data);
|
||||
|
||||
/*
|
||||
* Returns:
|
||||
* 0: The target can handle the next I/O immediately.
|
||||
|
|
@ -92,7 +103,8 @@ void dm_error(const char *message);
|
|||
/*
|
||||
* Combine device limits.
|
||||
*/
|
||||
void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev);
|
||||
int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev,
|
||||
sector_t start, void *data);
|
||||
|
||||
struct dm_dev {
|
||||
struct block_device *bdev;
|
||||
|
|
@ -138,23 +150,12 @@ struct target_type {
|
|||
dm_ioctl_fn ioctl;
|
||||
dm_merge_fn merge;
|
||||
dm_busy_fn busy;
|
||||
dm_iterate_devices_fn iterate_devices;
|
||||
|
||||
/* For internal device-mapper use. */
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct io_restrictions {
|
||||
unsigned long bounce_pfn;
|
||||
unsigned long seg_boundary_mask;
|
||||
unsigned max_hw_sectors;
|
||||
unsigned max_sectors;
|
||||
unsigned max_segment_size;
|
||||
unsigned short logical_block_size;
|
||||
unsigned short max_hw_segments;
|
||||
unsigned short max_phys_segments;
|
||||
unsigned char no_cluster; /* inverted so that 0 is default */
|
||||
};
|
||||
|
||||
struct dm_target {
|
||||
struct dm_table *table;
|
||||
struct target_type *type;
|
||||
|
|
@ -163,15 +164,18 @@ struct dm_target {
|
|||
sector_t begin;
|
||||
sector_t len;
|
||||
|
||||
/* FIXME: turn this into a mask, and merge with io_restrictions */
|
||||
/* Always a power of 2 */
|
||||
sector_t split_io;
|
||||
|
||||
/*
|
||||
* These are automatically filled in by
|
||||
* dm_table_get_device.
|
||||
* A number of zero-length barrier requests that will be submitted
|
||||
* to the target for the purpose of flushing cache.
|
||||
*
|
||||
* The request number will be placed in union map_info->flush_request.
|
||||
* It is a responsibility of the target driver to remap these requests
|
||||
* to the real underlying devices.
|
||||
*/
|
||||
struct io_restrictions limits;
|
||||
unsigned num_flush_requests;
|
||||
|
||||
/* target specific data */
|
||||
void *private;
|
||||
|
|
@ -230,6 +234,7 @@ struct gendisk *dm_disk(struct mapped_device *md);
|
|||
int dm_suspended(struct mapped_device *md);
|
||||
int dm_noflush_suspending(struct dm_target *ti);
|
||||
union map_info *dm_get_mapinfo(struct bio *bio);
|
||||
union map_info *dm_get_rq_mapinfo(struct request *rq);
|
||||
|
||||
/*
|
||||
* Geometry functions.
|
||||
|
|
@ -392,4 +397,12 @@ static inline unsigned long to_bytes(sector_t n)
|
|||
return (n << SECTOR_SHIFT);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------
|
||||
* Helper for block layer and dm core operations
|
||||
*---------------------------------------------------------------*/
|
||||
void dm_dispatch_request(struct request *rq);
|
||||
void dm_requeue_unmapped_request(struct request *rq);
|
||||
void dm_kill_unmapped_request(struct request *rq, int error);
|
||||
int dm_underlying_device_busy(struct request_queue *q);
|
||||
|
||||
#endif /* _LINUX_DEVICE_MAPPER_H */
|
||||
|
|
|
|||
|
|
@ -123,6 +123,16 @@ struct dm_ioctl {
|
|||
__u32 target_count; /* in/out */
|
||||
__s32 open_count; /* out */
|
||||
__u32 flags; /* in/out */
|
||||
|
||||
/*
|
||||
* event_nr holds either the event number (input and output) or the
|
||||
* udev cookie value (input only).
|
||||
* The DM_DEV_WAIT ioctl takes an event number as input.
|
||||
* The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls
|
||||
* use the field as a cookie to return in the DM_COOKIE
|
||||
* variable with the uevents they issue.
|
||||
* For output, the ioctls return the event number, not the cookie.
|
||||
*/
|
||||
__u32 event_nr; /* in/out */
|
||||
__u32 padding;
|
||||
|
||||
|
|
@ -256,9 +266,9 @@ enum {
|
|||
#define DM_DEV_SET_GEOMETRY _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
|
||||
|
||||
#define DM_VERSION_MAJOR 4
|
||||
#define DM_VERSION_MINOR 14
|
||||
#define DM_VERSION_MINOR 15
|
||||
#define DM_VERSION_PATCHLEVEL 0
|
||||
#define DM_VERSION_EXTRA "-ioctl (2008-04-23)"
|
||||
#define DM_VERSION_EXTRA "-ioctl (2009-04-01)"
|
||||
|
||||
/* Status bits */
|
||||
#define DM_READONLY_FLAG (1 << 0) /* In/Out */
|
||||
|
|
|
|||
386
include/linux/dm-log-userspace.h
Normal file
386
include/linux/dm-log-userspace.h
Normal file
|
|
@ -0,0 +1,386 @@
|
|||
/*
|
||||
* Copyright (C) 2006-2009 Red Hat, Inc.
|
||||
*
|
||||
* This file is released under the LGPL.
|
||||
*/
|
||||
|
||||
#ifndef __DM_LOG_USERSPACE_H__
|
||||
#define __DM_LOG_USERSPACE_H__
|
||||
|
||||
#include <linux/dm-ioctl.h> /* For DM_UUID_LEN */
|
||||
|
||||
/*
|
||||
* The device-mapper userspace log module consists of a kernel component and
|
||||
* a user-space component. The kernel component implements the API defined
|
||||
* in dm-dirty-log.h. Its purpose is simply to pass the parameters and
|
||||
* return values of those API functions between kernel and user-space.
|
||||
*
|
||||
* Below are defined the 'request_types' - DM_ULOG_CTR, DM_ULOG_DTR, etc.
|
||||
* These request types represent the different functions in the device-mapper
|
||||
* dirty log API. Each of these is described in more detail below.
|
||||
*
|
||||
* The user-space program must listen for requests from the kernel (representing
|
||||
* the various API functions) and process them.
|
||||
*
|
||||
* User-space begins by setting up the communication link (error checking
|
||||
* removed for clarity):
|
||||
* fd = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
|
||||
* addr.nl_family = AF_NETLINK;
|
||||
* addr.nl_groups = CN_IDX_DM;
|
||||
* addr.nl_pid = 0;
|
||||
* r = bind(fd, (struct sockaddr *) &addr, sizeof(addr));
|
||||
* opt = addr.nl_groups;
|
||||
* setsockopt(fd, SOL_NETLINK, NETLINK_ADD_MEMBERSHIP, &opt, sizeof(opt));
|
||||
*
|
||||
* User-space will then wait to receive requests form the kernel, which it
|
||||
* will process as described below. The requests are received in the form,
|
||||
* ((struct dm_ulog_request) + (additional data)). Depending on the request
|
||||
* type, there may or may not be 'additional data'. In the descriptions below,
|
||||
* you will see 'Payload-to-userspace' and 'Payload-to-kernel'. The
|
||||
* 'Payload-to-userspace' is what the kernel sends in 'additional data' as
|
||||
* necessary parameters to complete the request. The 'Payload-to-kernel' is
|
||||
* the 'additional data' returned to the kernel that contains the necessary
|
||||
* results of the request. The 'data_size' field in the dm_ulog_request
|
||||
* structure denotes the availability and amount of payload data.
|
||||
*/
|
||||
|
||||
/*
|
||||
* DM_ULOG_CTR corresponds to (found in dm-dirty-log.h):
|
||||
* int (*ctr)(struct dm_dirty_log *log, struct dm_target *ti,
|
||||
* unsigned argc, char **argv);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* A single string containing all the argv arguments separated by ' 's
|
||||
* Payload-to-kernel:
|
||||
* None. ('data_size' in the dm_ulog_request struct should be 0.)
|
||||
*
|
||||
* The UUID contained in the dm_ulog_request structure is the reference that
|
||||
* will be used by all request types to a specific log. The constructor must
|
||||
* record this assotiation with instance created.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_CTR 1
|
||||
|
||||
/*
|
||||
* DM_ULOG_DTR corresponds to (found in dm-dirty-log.h):
|
||||
* void (*dtr)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* A single string containing all the argv arguments separated by ' 's
|
||||
* Payload-to-kernel:
|
||||
* None. ('data_size' in the dm_ulog_request struct should be 0.)
|
||||
*
|
||||
* The UUID contained in the dm_ulog_request structure is all that is
|
||||
* necessary to identify the log instance being destroyed. There is no
|
||||
* payload data.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and clearing
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_DTR 2
|
||||
|
||||
/*
|
||||
* DM_ULOG_PRESUSPEND corresponds to (found in dm-dirty-log.h):
|
||||
* int (*presuspend)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* The UUID contained in the dm_ulog_request structure is all that is
|
||||
* necessary to identify the log instance being presuspended. There is no
|
||||
* payload data.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_PRESUSPEND 3
|
||||
|
||||
/*
|
||||
* DM_ULOG_POSTSUSPEND corresponds to (found in dm-dirty-log.h):
|
||||
* int (*postsuspend)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* The UUID contained in the dm_ulog_request structure is all that is
|
||||
* necessary to identify the log instance being postsuspended. There is no
|
||||
* payload data.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_POSTSUSPEND 4
|
||||
|
||||
/*
|
||||
* DM_ULOG_RESUME corresponds to (found in dm-dirty-log.h):
|
||||
* int (*resume)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* The UUID contained in the dm_ulog_request structure is all that is
|
||||
* necessary to identify the log instance being resumed. There is no
|
||||
* payload data.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_RESUME 5
|
||||
|
||||
/*
|
||||
* DM_ULOG_GET_REGION_SIZE corresponds to (found in dm-dirty-log.h):
|
||||
* uint32_t (*get_region_size)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* uint64_t - contains the region size
|
||||
*
|
||||
* The region size is something that was determined at constructor time.
|
||||
* It is returned in the payload area and 'data_size' is set to
|
||||
* reflect this.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field appropriately.
|
||||
*/
|
||||
#define DM_ULOG_GET_REGION_SIZE 6
|
||||
|
||||
/*
|
||||
* DM_ULOG_IS_CLEAN corresponds to (found in dm-dirty-log.h):
|
||||
* int (*is_clean)(struct dm_dirty_log *log, region_t region);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* uint64_t - the region to get clean status on
|
||||
* Payload-to-kernel:
|
||||
* int64_t - 1 if clean, 0 otherwise
|
||||
*
|
||||
* Payload is sizeof(uint64_t) and contains the region for which the clean
|
||||
* status is being made.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - filling the payload with 0 (not clean) or
|
||||
* 1 (clean), setting 'data_size' and 'error' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_IS_CLEAN 7
|
||||
|
||||
/*
|
||||
* DM_ULOG_IN_SYNC corresponds to (found in dm-dirty-log.h):
|
||||
* int (*in_sync)(struct dm_dirty_log *log, region_t region,
|
||||
* int can_block);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* uint64_t - the region to get sync status on
|
||||
* Payload-to-kernel:
|
||||
* int64_t - 1 if in-sync, 0 otherwise
|
||||
*
|
||||
* Exactly the same as 'is_clean' above, except this time asking "has the
|
||||
* region been recovered?" vs. "is the region not being modified?"
|
||||
*/
|
||||
#define DM_ULOG_IN_SYNC 8
|
||||
|
||||
/*
|
||||
* DM_ULOG_FLUSH corresponds to (found in dm-dirty-log.h):
|
||||
* int (*flush)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* No incoming or outgoing payload. Simply flush log state to disk.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and clearing
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_FLUSH 9
|
||||
|
||||
/*
|
||||
* DM_ULOG_MARK_REGION corresponds to (found in dm-dirty-log.h):
|
||||
* void (*mark_region)(struct dm_dirty_log *log, region_t region);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* uint64_t [] - region(s) to mark
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* Incoming payload contains the one or more regions to mark dirty.
|
||||
* The number of regions contained in the payload can be determined from
|
||||
* 'data_size/sizeof(uint64_t)'.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and clearing
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_MARK_REGION 10
|
||||
|
||||
/*
|
||||
* DM_ULOG_CLEAR_REGION corresponds to (found in dm-dirty-log.h):
|
||||
* void (*clear_region)(struct dm_dirty_log *log, region_t region);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* uint64_t [] - region(s) to clear
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* Incoming payload contains the one or more regions to mark clean.
|
||||
* The number of regions contained in the payload can be determined from
|
||||
* 'data_size/sizeof(uint64_t)'.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and clearing
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_CLEAR_REGION 11
|
||||
|
||||
/*
|
||||
* DM_ULOG_GET_RESYNC_WORK corresponds to (found in dm-dirty-log.h):
|
||||
* int (*get_resync_work)(struct dm_dirty_log *log, region_t *region);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* {
|
||||
* int64_t i; -- 1 if recovery necessary, 0 otherwise
|
||||
* uint64_t r; -- The region to recover if i=1
|
||||
* }
|
||||
* 'data_size' should be set appropriately.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field appropriately.
|
||||
*/
|
||||
#define DM_ULOG_GET_RESYNC_WORK 12
|
||||
|
||||
/*
|
||||
* DM_ULOG_SET_REGION_SYNC corresponds to (found in dm-dirty-log.h):
|
||||
* void (*set_region_sync)(struct dm_dirty_log *log,
|
||||
* region_t region, int in_sync);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* {
|
||||
* uint64_t - region to set sync state on
|
||||
* int64_t - 0 if not-in-sync, 1 if in-sync
|
||||
* }
|
||||
* Payload-to-kernel:
|
||||
* None.
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and clearing
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_SET_REGION_SYNC 13
|
||||
|
||||
/*
|
||||
* DM_ULOG_GET_SYNC_COUNT corresponds to (found in dm-dirty-log.h):
|
||||
* region_t (*get_sync_count)(struct dm_dirty_log *log);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* uint64_t - the number of in-sync regions
|
||||
*
|
||||
* No incoming payload. Kernel-bound payload contains the number of
|
||||
* regions that are in-sync (in a size_t).
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_GET_SYNC_COUNT 14
|
||||
|
||||
/*
|
||||
* DM_ULOG_STATUS_INFO corresponds to (found in dm-dirty-log.h):
|
||||
* int (*status)(struct dm_dirty_log *log, STATUSTYPE_INFO,
|
||||
* char *result, unsigned maxlen);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* Character string containing STATUSTYPE_INFO
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_STATUS_INFO 15
|
||||
|
||||
/*
|
||||
* DM_ULOG_STATUS_TABLE corresponds to (found in dm-dirty-log.h):
|
||||
* int (*status)(struct dm_dirty_log *log, STATUSTYPE_TABLE,
|
||||
* char *result, unsigned maxlen);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* None.
|
||||
* Payload-to-kernel:
|
||||
* Character string containing STATUSTYPE_TABLE
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_STATUS_TABLE 16
|
||||
|
||||
/*
|
||||
* DM_ULOG_IS_REMOTE_RECOVERING corresponds to (found in dm-dirty-log.h):
|
||||
* int (*is_remote_recovering)(struct dm_dirty_log *log, region_t region);
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* uint64_t - region to determine recovery status on
|
||||
* Payload-to-kernel:
|
||||
* {
|
||||
* int64_t is_recovering; -- 0 if no, 1 if yes
|
||||
* uint64_t in_sync_hint; -- lowest region still needing resync
|
||||
* }
|
||||
*
|
||||
* When the request has been processed, user-space must return the
|
||||
* dm_ulog_request to the kernel - setting the 'error' field and
|
||||
* 'data_size' appropriately.
|
||||
*/
|
||||
#define DM_ULOG_IS_REMOTE_RECOVERING 17
|
||||
|
||||
/*
|
||||
* (DM_ULOG_REQUEST_MASK & request_type) to get the request type
|
||||
*
|
||||
* Payload-to-userspace:
|
||||
* A single string containing all the argv arguments separated by ' 's
|
||||
* Payload-to-kernel:
|
||||
* None. ('data_size' in the dm_ulog_request struct should be 0.)
|
||||
*
|
||||
* We are reserving 8 bits of the 32-bit 'request_type' field for the
|
||||
* various request types above. The remaining 24-bits are currently
|
||||
* set to zero and are reserved for future use and compatibility concerns.
|
||||
*
|
||||
* User-space should always use DM_ULOG_REQUEST_TYPE to aquire the
|
||||
* request type from the 'request_type' field to maintain forward compatibility.
|
||||
*/
|
||||
#define DM_ULOG_REQUEST_MASK 0xFF
|
||||
#define DM_ULOG_REQUEST_TYPE(request_type) \
|
||||
(DM_ULOG_REQUEST_MASK & (request_type))
|
||||
|
||||
struct dm_ulog_request {
|
||||
char uuid[DM_UUID_LEN]; /* Ties a request to a specific mirror log */
|
||||
char padding[7]; /* Padding because DM_UUID_LEN = 129 */
|
||||
|
||||
int32_t error; /* Used to report back processing errors */
|
||||
|
||||
uint32_t seq; /* Sequence number for request */
|
||||
uint32_t request_type; /* DM_ULOG_* defined above */
|
||||
uint32_t data_size; /* How much data (not including this struct) */
|
||||
|
||||
char data[0];
|
||||
};
|
||||
|
||||
#endif /* __DM_LOG_USERSPACE_H__ */
|
||||
|
|
@ -13,6 +13,10 @@
|
|||
#define DMA_PTE_WRITE (2)
|
||||
#define DMA_PTE_SNP (1 << 11)
|
||||
|
||||
#define CONTEXT_TT_MULTI_LEVEL 0
|
||||
#define CONTEXT_TT_DEV_IOTLB 1
|
||||
#define CONTEXT_TT_PASS_THROUGH 2
|
||||
|
||||
struct intel_iommu;
|
||||
struct dmar_domain;
|
||||
struct root_entry;
|
||||
|
|
@ -21,11 +25,16 @@ extern void free_dmar_iommu(struct intel_iommu *iommu);
|
|||
|
||||
#ifdef CONFIG_DMAR
|
||||
extern int iommu_calculate_agaw(struct intel_iommu *iommu);
|
||||
extern int iommu_calculate_max_sagaw(struct intel_iommu *iommu);
|
||||
#else
|
||||
static inline int iommu_calculate_agaw(struct intel_iommu *iommu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int iommu_calculate_max_sagaw(struct intel_iommu *iommu)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int dmar_disabled;
|
||||
|
|
|
|||
|
|
@ -126,6 +126,8 @@ extern int free_irte(int irq);
|
|||
extern int irq_remapped(int irq);
|
||||
extern struct intel_iommu *map_dev_to_ir(struct pci_dev *dev);
|
||||
extern struct intel_iommu *map_ioapic_to_ir(int apic);
|
||||
extern int set_ioapic_sid(struct irte *irte, int apic);
|
||||
extern int set_msi_sid(struct irte *irte, struct pci_dev *dev);
|
||||
#else
|
||||
static inline int alloc_irte(struct intel_iommu *iommu, int irq, u16 count)
|
||||
{
|
||||
|
|
@ -156,6 +158,15 @@ static inline struct intel_iommu *map_ioapic_to_ir(int apic)
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline int set_ioapic_sid(struct irte *irte, int apic)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int set_msi_sid(struct irte *irte, struct pci_dev *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define irq_remapped(irq) (0)
|
||||
#define enable_intr_remapping(mode) (-1)
|
||||
#define disable_intr_remapping() (0)
|
||||
|
|
@ -188,6 +199,15 @@ struct dmar_rmrr_unit {
|
|||
|
||||
#define for_each_rmrr_units(rmrr) \
|
||||
list_for_each_entry(rmrr, &dmar_rmrr_units, list)
|
||||
|
||||
struct dmar_atsr_unit {
|
||||
struct list_head list; /* list of ATSR units */
|
||||
struct acpi_dmar_header *hdr; /* ACPI header */
|
||||
struct pci_dev **devices; /* target devices */
|
||||
int devices_cnt; /* target device count */
|
||||
u8 include_all:1; /* include all ports */
|
||||
};
|
||||
|
||||
/* Intel DMAR initialization functions */
|
||||
extern int intel_iommu_init(void);
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -8,10 +8,8 @@
|
|||
#ifndef _LINUX_EVENTFD_H
|
||||
#define _LINUX_EVENTFD_H
|
||||
|
||||
#ifdef CONFIG_EVENTFD
|
||||
|
||||
/* For O_CLOEXEC and O_NONBLOCK */
|
||||
#include <linux/fcntl.h>
|
||||
#include <linux/file.h>
|
||||
|
||||
/*
|
||||
* CAREFUL: Check include/asm-generic/fcntl.h when defining
|
||||
|
|
@ -27,16 +25,37 @@
|
|||
#define EFD_SHARED_FCNTL_FLAGS (O_CLOEXEC | O_NONBLOCK)
|
||||
#define EFD_FLAGS_SET (EFD_SHARED_FCNTL_FLAGS | EFD_SEMAPHORE)
|
||||
|
||||
#ifdef CONFIG_EVENTFD
|
||||
|
||||
struct eventfd_ctx *eventfd_ctx_get(struct eventfd_ctx *ctx);
|
||||
void eventfd_ctx_put(struct eventfd_ctx *ctx);
|
||||
struct file *eventfd_fget(int fd);
|
||||
int eventfd_signal(struct file *file, int n);
|
||||
struct eventfd_ctx *eventfd_ctx_fdget(int fd);
|
||||
struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);
|
||||
int eventfd_signal(struct eventfd_ctx *ctx, int n);
|
||||
|
||||
#else /* CONFIG_EVENTFD */
|
||||
|
||||
#define eventfd_fget(fd) ERR_PTR(-ENOSYS)
|
||||
static inline int eventfd_signal(struct file *file, int n)
|
||||
{ return 0; }
|
||||
/*
|
||||
* Ugly ugly ugly error layer to support modules that uses eventfd but
|
||||
* pretend to work in !CONFIG_EVENTFD configurations. Namely, AIO.
|
||||
*/
|
||||
static inline struct eventfd_ctx *eventfd_ctx_fdget(int fd)
|
||||
{
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_EVENTFD */
|
||||
static inline int eventfd_signal(struct eventfd_ctx *ctx, int n)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline void eventfd_ctx_put(struct eventfd_ctx *ctx)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_EVENTFD_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -103,10 +103,6 @@ struct ext3_inode_info {
|
|||
*/
|
||||
struct rw_semaphore xattr_sem;
|
||||
#endif
|
||||
#ifdef CONFIG_EXT3_FS_POSIX_ACL
|
||||
struct posix_acl *i_acl;
|
||||
struct posix_acl *i_default_acl;
|
||||
#endif
|
||||
|
||||
struct list_head i_orphan; /* unlinked but open inodes */
|
||||
|
||||
|
|
|
|||
|
|
@ -3,4 +3,25 @@
|
|||
|
||||
#define FALLOC_FL_KEEP_SIZE 0x01 /* default is extend size */
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/*
|
||||
* Space reservation ioctls and argument structure
|
||||
* are designed to be compatible with the legacy XFS ioctls.
|
||||
*/
|
||||
struct space_resv {
|
||||
__s16 l_type;
|
||||
__s16 l_whence;
|
||||
__s64 l_start;
|
||||
__s64 l_len; /* len == 0 means until end of file */
|
||||
__s32 l_sysid;
|
||||
__u32 l_pid;
|
||||
__s32 l_pad[4]; /* reserved area */
|
||||
};
|
||||
|
||||
#define FS_IOC_RESVSP _IOW('X', 40, struct space_resv)
|
||||
#define FS_IOC_RESVSP64 _IOW('X', 42, struct space_resv)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _FALLOC_H_ */
|
||||
|
|
|
|||
|
|
@ -819,6 +819,7 @@ struct fb_info {
|
|||
int node;
|
||||
int flags;
|
||||
struct mutex lock; /* Lock for open/release/ioctl funcs */
|
||||
struct mutex mm_lock; /* Lock for fb_mmap and smem_* fields */
|
||||
struct fb_var_screeninfo var; /* Current var */
|
||||
struct fb_fix_screeninfo fix; /* Current fix */
|
||||
struct fb_monspecs monspecs; /* Current Monitor specs */
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/kref.h>
|
||||
#include <linux/list.h>
|
||||
|
|
@ -355,4 +356,90 @@ int fw_run_transaction(struct fw_card *card, int tcode, int destination_id,
|
|||
int generation, int speed, unsigned long long offset,
|
||||
void *payload, size_t length);
|
||||
|
||||
static inline int fw_stream_packet_destination_id(int tag, int channel, int sy)
|
||||
{
|
||||
return tag << 14 | channel << 8 | sy;
|
||||
}
|
||||
|
||||
struct fw_descriptor {
|
||||
struct list_head link;
|
||||
size_t length;
|
||||
u32 immediate;
|
||||
u32 key;
|
||||
const u32 *data;
|
||||
};
|
||||
|
||||
int fw_core_add_descriptor(struct fw_descriptor *desc);
|
||||
void fw_core_remove_descriptor(struct fw_descriptor *desc);
|
||||
|
||||
/*
|
||||
* The iso packet format allows for an immediate header/payload part
|
||||
* stored in 'header' immediately after the packet info plus an
|
||||
* indirect payload part that is pointer to by the 'payload' field.
|
||||
* Applications can use one or the other or both to implement simple
|
||||
* low-bandwidth streaming (e.g. audio) or more advanced
|
||||
* scatter-gather streaming (e.g. assembling video frame automatically).
|
||||
*/
|
||||
struct fw_iso_packet {
|
||||
u16 payload_length; /* Length of indirect payload. */
|
||||
u32 interrupt:1; /* Generate interrupt on this packet */
|
||||
u32 skip:1; /* Set to not send packet at all. */
|
||||
u32 tag:2;
|
||||
u32 sy:4;
|
||||
u32 header_length:8; /* Length of immediate header. */
|
||||
u32 header[0];
|
||||
};
|
||||
|
||||
#define FW_ISO_CONTEXT_TRANSMIT 0
|
||||
#define FW_ISO_CONTEXT_RECEIVE 1
|
||||
|
||||
#define FW_ISO_CONTEXT_MATCH_TAG0 1
|
||||
#define FW_ISO_CONTEXT_MATCH_TAG1 2
|
||||
#define FW_ISO_CONTEXT_MATCH_TAG2 4
|
||||
#define FW_ISO_CONTEXT_MATCH_TAG3 8
|
||||
#define FW_ISO_CONTEXT_MATCH_ALL_TAGS 15
|
||||
|
||||
/*
|
||||
* An iso buffer is just a set of pages mapped for DMA in the
|
||||
* specified direction. Since the pages are to be used for DMA, they
|
||||
* are not mapped into the kernel virtual address space. We store the
|
||||
* DMA address in the page private. The helper function
|
||||
* fw_iso_buffer_map() will map the pages into a given vma.
|
||||
*/
|
||||
struct fw_iso_buffer {
|
||||
enum dma_data_direction direction;
|
||||
struct page **pages;
|
||||
int page_count;
|
||||
};
|
||||
|
||||
int fw_iso_buffer_init(struct fw_iso_buffer *buffer, struct fw_card *card,
|
||||
int page_count, enum dma_data_direction direction);
|
||||
void fw_iso_buffer_destroy(struct fw_iso_buffer *buffer, struct fw_card *card);
|
||||
|
||||
struct fw_iso_context;
|
||||
typedef void (*fw_iso_callback_t)(struct fw_iso_context *context,
|
||||
u32 cycle, size_t header_length,
|
||||
void *header, void *data);
|
||||
struct fw_iso_context {
|
||||
struct fw_card *card;
|
||||
int type;
|
||||
int channel;
|
||||
int speed;
|
||||
size_t header_size;
|
||||
fw_iso_callback_t callback;
|
||||
void *callback_data;
|
||||
};
|
||||
|
||||
struct fw_iso_context *fw_iso_context_create(struct fw_card *card,
|
||||
int type, int channel, int speed, size_t header_size,
|
||||
fw_iso_callback_t callback, void *callback_data);
|
||||
int fw_iso_context_queue(struct fw_iso_context *ctx,
|
||||
struct fw_iso_packet *packet,
|
||||
struct fw_iso_buffer *buffer,
|
||||
unsigned long payload);
|
||||
int fw_iso_context_start(struct fw_iso_context *ctx,
|
||||
int cycle, int sync, int tags);
|
||||
int fw_iso_context_stop(struct fw_iso_context *ctx);
|
||||
void fw_iso_context_destroy(struct fw_iso_context *ctx);
|
||||
|
||||
#endif /* _LINUX_FIREWIRE_H */
|
||||
|
|
|
|||
|
|
@ -710,6 +710,9 @@ static inline int mapping_writably_mapped(struct address_space *mapping)
|
|||
#define i_size_ordered_init(inode) do { } while (0)
|
||||
#endif
|
||||
|
||||
struct posix_acl;
|
||||
#define ACL_NOT_CACHED ((void *)(-1))
|
||||
|
||||
struct inode {
|
||||
struct hlist_node i_hash;
|
||||
struct list_head i_list;
|
||||
|
|
@ -772,6 +775,10 @@ struct inode {
|
|||
atomic_t i_writecount;
|
||||
#ifdef CONFIG_SECURITY
|
||||
void *i_security;
|
||||
#endif
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
struct posix_acl *i_acl;
|
||||
struct posix_acl *i_default_acl;
|
||||
#endif
|
||||
void *i_private; /* fs or device private pointer */
|
||||
};
|
||||
|
|
@ -1107,6 +1114,7 @@ extern void locks_copy_lock(struct file_lock *, struct file_lock *);
|
|||
extern void __locks_copy_lock(struct file_lock *, const struct file_lock *);
|
||||
extern void locks_remove_posix(struct file *, fl_owner_t);
|
||||
extern void locks_remove_flock(struct file *);
|
||||
extern void locks_release_private(struct file_lock *);
|
||||
extern void posix_test_lock(struct file *, struct file_lock *);
|
||||
extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
|
||||
extern int posix_lock_file_wait(struct file *, struct file_lock *);
|
||||
|
|
@ -1905,6 +1913,8 @@ static inline int break_lease(struct inode *inode, unsigned int mode)
|
|||
|
||||
extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
|
||||
struct file *filp);
|
||||
extern int do_fallocate(struct file *file, int mode, loff_t offset,
|
||||
loff_t len);
|
||||
extern long do_sys_open(int dfd, const char __user *filename, int flags,
|
||||
int mode);
|
||||
extern struct file *filp_open(const char *, int, int);
|
||||
|
|
@ -1913,6 +1923,10 @@ extern struct file * dentry_open(struct dentry *, struct vfsmount *, int,
|
|||
extern int filp_close(struct file *, fl_owner_t id);
|
||||
extern char * getname(const char __user *);
|
||||
|
||||
/* fs/ioctl.c */
|
||||
|
||||
extern int ioctl_preallocate(struct file *filp, void __user *argp);
|
||||
|
||||
/* fs/dcache.c */
|
||||
extern void __init vfs_caches_init_early(void);
|
||||
extern void __init vfs_caches_init(unsigned long);
|
||||
|
|
|
|||
|
|
@ -280,7 +280,7 @@ static inline void __fsnotify_update_dcache_flags(struct dentry *dentry)
|
|||
assert_spin_locked(&dentry->d_lock);
|
||||
|
||||
parent = dentry->d_parent;
|
||||
if (fsnotify_inode_watches_children(parent->d_inode))
|
||||
if (parent->d_inode && fsnotify_inode_watches_children(parent->d_inode))
|
||||
dentry->d_flags |= DCACHE_FSNOTIFY_PARENT_WATCHED;
|
||||
else
|
||||
dentry->d_flags &= ~DCACHE_FSNOTIFY_PARENT_WATCHED;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,11 @@
|
|||
* - add IOCTL message
|
||||
* - add unsolicited notification support
|
||||
* - add POLL message and NOTIFY_POLL notification
|
||||
*
|
||||
* 7.12
|
||||
* - add umask flag to input argument of open, mknod and mkdir
|
||||
* - add notification messages for invalidation of inodes and
|
||||
* directory entries
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_FUSE_H
|
||||
|
|
@ -36,7 +41,7 @@
|
|||
#define FUSE_KERNEL_VERSION 7
|
||||
|
||||
/** Minor version number of this interface */
|
||||
#define FUSE_KERNEL_MINOR_VERSION 11
|
||||
#define FUSE_KERNEL_MINOR_VERSION 12
|
||||
|
||||
/** The node ID of the root inode */
|
||||
#define FUSE_ROOT_ID 1
|
||||
|
|
@ -112,6 +117,7 @@ struct fuse_file_lock {
|
|||
* INIT request/reply flags
|
||||
*
|
||||
* FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
|
||||
* FUSE_DONT_MASK: don't apply umask to file mode on create operations
|
||||
*/
|
||||
#define FUSE_ASYNC_READ (1 << 0)
|
||||
#define FUSE_POSIX_LOCKS (1 << 1)
|
||||
|
|
@ -119,6 +125,7 @@ struct fuse_file_lock {
|
|||
#define FUSE_ATOMIC_O_TRUNC (1 << 3)
|
||||
#define FUSE_EXPORT_SUPPORT (1 << 4)
|
||||
#define FUSE_BIG_WRITES (1 << 5)
|
||||
#define FUSE_DONT_MASK (1 << 6)
|
||||
|
||||
/**
|
||||
* CUSE INIT request/reply flags
|
||||
|
|
@ -224,6 +231,8 @@ enum fuse_opcode {
|
|||
|
||||
enum fuse_notify_code {
|
||||
FUSE_NOTIFY_POLL = 1,
|
||||
FUSE_NOTIFY_INVAL_INODE = 2,
|
||||
FUSE_NOTIFY_INVAL_ENTRY = 3,
|
||||
FUSE_NOTIFY_CODE_MAX,
|
||||
};
|
||||
|
||||
|
|
@ -262,14 +271,18 @@ struct fuse_attr_out {
|
|||
struct fuse_attr attr;
|
||||
};
|
||||
|
||||
#define FUSE_COMPAT_MKNOD_IN_SIZE 8
|
||||
|
||||
struct fuse_mknod_in {
|
||||
__u32 mode;
|
||||
__u32 rdev;
|
||||
__u32 umask;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_mkdir_in {
|
||||
__u32 mode;
|
||||
__u32 padding;
|
||||
__u32 umask;
|
||||
};
|
||||
|
||||
struct fuse_rename_in {
|
||||
|
|
@ -300,8 +313,15 @@ struct fuse_setattr_in {
|
|||
};
|
||||
|
||||
struct fuse_open_in {
|
||||
__u32 flags;
|
||||
__u32 unused;
|
||||
};
|
||||
|
||||
struct fuse_create_in {
|
||||
__u32 flags;
|
||||
__u32 mode;
|
||||
__u32 umask;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
struct fuse_open_out {
|
||||
|
|
@ -508,4 +528,16 @@ struct fuse_dirent {
|
|||
#define FUSE_DIRENT_SIZE(d) \
|
||||
FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
|
||||
|
||||
struct fuse_notify_inval_inode_out {
|
||||
__u64 ino;
|
||||
__s64 off;
|
||||
__s64 len;
|
||||
};
|
||||
|
||||
struct fuse_notify_inval_entry_out {
|
||||
__u64 parent;
|
||||
__u32 namelen;
|
||||
__u32 padding;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_FUSE_H */
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/timer.h>
|
||||
|
||||
|
||||
struct hrtimer_clock_base;
|
||||
|
|
@ -447,6 +448,8 @@ extern void timer_stats_update_stats(void *timer, pid_t pid, void *startf,
|
|||
|
||||
static inline void timer_stats_account_hrtimer(struct hrtimer *timer)
|
||||
{
|
||||
if (likely(!timer->start_pid))
|
||||
return;
|
||||
timer_stats_update_stats(timer, timer->start_pid, timer->start_site,
|
||||
timer->function, timer->start_comm, 0);
|
||||
}
|
||||
|
|
@ -456,6 +459,8 @@ extern void __timer_stats_hrtimer_set_start_info(struct hrtimer *timer,
|
|||
|
||||
static inline void timer_stats_hrtimer_set_start_info(struct hrtimer *timer)
|
||||
{
|
||||
if (likely(!timer_stats_active))
|
||||
return;
|
||||
__timer_stats_hrtimer_set_start_info(timer, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ void hugetlb_report_meminfo(struct seq_file *);
|
|||
int hugetlb_report_node_meminfo(int, char *);
|
||||
unsigned long hugetlb_total_pages(void);
|
||||
int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
unsigned long address, int write_access);
|
||||
unsigned long address, unsigned int flags);
|
||||
int hugetlb_reserve_pages(struct inode *inode, long from, long to,
|
||||
struct vm_area_struct *vma,
|
||||
int acctflags);
|
||||
|
|
@ -98,7 +98,7 @@ static inline void hugetlb_report_meminfo(struct seq_file *m)
|
|||
#define pud_huge(x) 0
|
||||
#define is_hugepage_only_range(mm, addr, len) 0
|
||||
#define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) ({BUG(); 0; })
|
||||
#define hugetlb_fault(mm, vma, addr, write) ({ BUG(); 0; })
|
||||
#define hugetlb_fault(mm, vma, addr, flags) ({ BUG(); 0; })
|
||||
|
||||
#define hugetlb_change_protection(vma, address, end, newprot)
|
||||
|
||||
|
|
|
|||
|
|
@ -175,16 +175,16 @@ struct icmp6_filter {
|
|||
|
||||
|
||||
extern void icmpv6_send(struct sk_buff *skb,
|
||||
int type, int code,
|
||||
u8 type, u8 code,
|
||||
__u32 info,
|
||||
struct net_device *dev);
|
||||
|
||||
extern int icmpv6_init(void);
|
||||
extern int icmpv6_err_convert(int type, int code,
|
||||
extern int icmpv6_err_convert(u8 type, u8 code,
|
||||
int *err);
|
||||
extern void icmpv6_cleanup(void);
|
||||
extern void icmpv6_param_prob(struct sk_buff *skb,
|
||||
int code, int pos);
|
||||
u8 code, int pos);
|
||||
|
||||
struct flowi;
|
||||
struct in6_addr;
|
||||
|
|
|
|||
|
|
@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned l
|
|||
extern int ide_vlb_clk;
|
||||
extern int ide_pci_clk;
|
||||
|
||||
unsigned int ide_rq_bytes(struct request *);
|
||||
int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int);
|
||||
void ide_kill_rq(ide_drive_t *, struct request *);
|
||||
|
||||
|
|
@ -1361,7 +1360,6 @@ int ide_in_drive_list(u16 *, const struct drive_list_entry *);
|
|||
#ifdef CONFIG_BLK_DEV_IDEDMA
|
||||
int ide_dma_good_drive(ide_drive_t *);
|
||||
int __ide_dma_bad_drive(ide_drive_t *);
|
||||
int ide_id_dma_bug(ide_drive_t *);
|
||||
|
||||
u8 ide_find_dma_mode(ide_drive_t *, u8);
|
||||
|
||||
|
|
@ -1402,7 +1400,6 @@ void ide_dma_lost_irq(ide_drive_t *);
|
|||
ide_startstop_t ide_dma_timeout_retry(ide_drive_t *, int);
|
||||
|
||||
#else
|
||||
static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; }
|
||||
static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; }
|
||||
static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; }
|
||||
static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; }
|
||||
|
|
@ -1422,6 +1419,7 @@ static inline void ide_dma_unmap_sg(ide_drive_t *drive,
|
|||
|
||||
#ifdef CONFIG_BLK_DEV_IDEACPI
|
||||
int ide_acpi_init(void);
|
||||
bool ide_port_acpi(ide_hwif_t *hwif);
|
||||
extern int ide_acpi_exec_tfs(ide_drive_t *drive);
|
||||
extern void ide_acpi_get_timing(ide_hwif_t *hwif);
|
||||
extern void ide_acpi_push_timing(ide_hwif_t *hwif);
|
||||
|
|
@ -1430,6 +1428,7 @@ void ide_acpi_port_init_devices(ide_hwif_t *);
|
|||
extern void ide_acpi_set_state(ide_hwif_t *hwif, int on);
|
||||
#else
|
||||
static inline int ide_acpi_init(void) { return 0; }
|
||||
static inline bool ide_port_acpi(ide_hwif_t *hwif) { return 0; }
|
||||
static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; }
|
||||
static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; }
|
||||
static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; }
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ extern int ima_path_check(struct path *path, int mask, int update_counts);
|
|||
extern void ima_file_free(struct file *file);
|
||||
extern int ima_file_mmap(struct file *file, unsigned long prot);
|
||||
extern void ima_counts_get(struct file *file);
|
||||
extern void ima_counts_put(struct path *path, int mask);
|
||||
|
||||
#else
|
||||
static inline int ima_bprm_check(struct linux_binprm *bprm)
|
||||
|
|
@ -60,5 +61,10 @@ static inline void ima_counts_get(struct file *file)
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void ima_counts_put(struct path *path, int mask)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* CONFIG_IMA_H */
|
||||
#endif /* _LINUX_IMA_H */
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@
|
|||
#define DMAR_PHMLIMIT_REG 0x78 /* pmrr high limit */
|
||||
#define DMAR_IQH_REG 0x80 /* Invalidation queue head register */
|
||||
#define DMAR_IQT_REG 0x88 /* Invalidation queue tail register */
|
||||
#define DMAR_IQ_SHIFT 4 /* Invalidation queue head/tail shift */
|
||||
#define DMAR_IQA_REG 0x90 /* Invalidation queue addr register */
|
||||
#define DMAR_ICS_REG 0x98 /* Invalidation complete status register */
|
||||
#define DMAR_IRTA_REG 0xb8 /* Interrupt remapping table addr register */
|
||||
|
|
@ -120,8 +121,10 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
|||
(ecap_iotlb_offset(e) + ecap_niotlb_iunits(e) * 16)
|
||||
#define ecap_coherent(e) ((e) & 0x1)
|
||||
#define ecap_qis(e) ((e) & 0x2)
|
||||
#define ecap_pass_through(e) ((e >> 6) & 0x1)
|
||||
#define ecap_eim_support(e) ((e >> 4) & 0x1)
|
||||
#define ecap_ir_support(e) ((e >> 3) & 0x1)
|
||||
#define ecap_dev_iotlb_support(e) (((e) >> 2) & 0x1)
|
||||
#define ecap_max_handle_mask(e) ((e >> 20) & 0xf)
|
||||
#define ecap_sc_support(e) ((e >> 7) & 0x1) /* Snooping Control */
|
||||
|
||||
|
|
@ -197,6 +200,8 @@ static inline void dmar_writeq(void __iomem *addr, u64 val)
|
|||
#define DMA_FSTS_PPF ((u32)2)
|
||||
#define DMA_FSTS_PFO ((u32)1)
|
||||
#define DMA_FSTS_IQE (1 << 4)
|
||||
#define DMA_FSTS_ICE (1 << 5)
|
||||
#define DMA_FSTS_ITE (1 << 6)
|
||||
#define dma_fsts_fault_record_index(s) (((s) >> 8) & 0xff)
|
||||
|
||||
/* FRCD_REG, 32 bits access */
|
||||
|
|
@ -225,7 +230,8 @@ do { \
|
|||
enum {
|
||||
QI_FREE,
|
||||
QI_IN_USE,
|
||||
QI_DONE
|
||||
QI_DONE,
|
||||
QI_ABORT
|
||||
};
|
||||
|
||||
#define QI_CC_TYPE 0x1
|
||||
|
|
@ -254,6 +260,12 @@ enum {
|
|||
#define QI_CC_DID(did) (((u64)did) << 16)
|
||||
#define QI_CC_GRAN(gran) (((u64)gran) >> (DMA_CCMD_INVL_GRANU_OFFSET-4))
|
||||
|
||||
#define QI_DEV_IOTLB_SID(sid) ((u64)((sid) & 0xffff) << 32)
|
||||
#define QI_DEV_IOTLB_QDEP(qdep) (((qdep) & 0x1f) << 16)
|
||||
#define QI_DEV_IOTLB_ADDR(addr) ((u64)(addr) & VTD_PAGE_MASK)
|
||||
#define QI_DEV_IOTLB_SIZE 1
|
||||
#define QI_DEV_IOTLB_MAX_INVS 32
|
||||
|
||||
struct qi_desc {
|
||||
u64 low, high;
|
||||
};
|
||||
|
|
@ -280,10 +292,10 @@ struct ir_table {
|
|||
#endif
|
||||
|
||||
struct iommu_flush {
|
||||
int (*flush_context)(struct intel_iommu *iommu, u16 did, u16 sid, u8 fm,
|
||||
u64 type, int non_present_entry_flush);
|
||||
int (*flush_iotlb)(struct intel_iommu *iommu, u16 did, u64 addr,
|
||||
unsigned int size_order, u64 type, int non_present_entry_flush);
|
||||
void (*flush_context)(struct intel_iommu *iommu, u16 did, u16 sid,
|
||||
u8 fm, u64 type);
|
||||
void (*flush_iotlb)(struct intel_iommu *iommu, u16 did, u64 addr,
|
||||
unsigned int size_order, u64 type);
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
@ -302,6 +314,7 @@ struct intel_iommu {
|
|||
spinlock_t register_lock; /* protect register handling */
|
||||
int seq_id; /* sequence id of the iommu */
|
||||
int agaw; /* agaw of this iommu */
|
||||
int msagaw; /* max sagaw of this iommu */
|
||||
unsigned int irq;
|
||||
unsigned char name[13]; /* Device Name */
|
||||
|
||||
|
|
@ -329,6 +342,7 @@ static inline void __iommu_flush_cache(
|
|||
}
|
||||
|
||||
extern struct dmar_drhd_unit * dmar_find_matched_drhd_unit(struct pci_dev *dev);
|
||||
extern int dmar_find_matched_atsr_unit(struct pci_dev *dev);
|
||||
|
||||
extern int alloc_iommu(struct dmar_drhd_unit *drhd);
|
||||
extern void free_iommu(struct intel_iommu *iommu);
|
||||
|
|
@ -337,11 +351,12 @@ 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,
|
||||
u8 fm, u64 type, int non_present_entry_flush);
|
||||
extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
|
||||
unsigned int size_order, u64 type,
|
||||
int non_present_entry_flush);
|
||||
extern void qi_flush_context(struct intel_iommu *iommu, u16 did, u16 sid,
|
||||
u8 fm, u64 type);
|
||||
extern void qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr,
|
||||
unsigned int size_order, u64 type);
|
||||
extern void qi_flush_dev_iotlb(struct intel_iommu *iommu, u16 sid, u16 qdep,
|
||||
u64 addr, unsigned mask);
|
||||
|
||||
extern int qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu);
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ struct resource_list {
|
|||
#define IORESOURCE_SIZEALIGN 0x00020000 /* size indicates alignment */
|
||||
#define IORESOURCE_STARTALIGN 0x00040000 /* start field is alignment */
|
||||
|
||||
#define IORESOURCE_MEM_64 0x00100000
|
||||
|
||||
#define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */
|
||||
#define IORESOURCE_DISABLED 0x10000000
|
||||
#define IORESOURCE_UNSET 0x20000000
|
||||
|
|
|
|||
|
|
@ -303,6 +303,7 @@ extern int oops_in_progress; /* If set, an oops, panic(), BUG() or die() is in
|
|||
extern int panic_timeout;
|
||||
extern int panic_on_oops;
|
||||
extern int panic_on_unrecovered_nmi;
|
||||
extern int panic_on_io_nmi;
|
||||
extern const char *print_tainted(void);
|
||||
extern void add_taint(unsigned flag);
|
||||
extern int test_taint(unsigned flag);
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ struct kvm_kernel_irq_routing_entry {
|
|||
struct kvm {
|
||||
struct mutex lock; /* protects the vcpus array and APIC accesses */
|
||||
spinlock_t mmu_lock;
|
||||
spinlock_t requests_lock;
|
||||
struct rw_semaphore slots_lock;
|
||||
struct mm_struct *mm; /* userspace tied to this vm */
|
||||
int nmemslots;
|
||||
|
|
|
|||
53
include/linux/leds-lp3944.h
Normal file
53
include/linux/leds-lp3944.h
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* leds-lp3944.h - platform data structure for lp3944 led controller
|
||||
*
|
||||
* Copyright (C) 2009 Antonio Ospite <ospite@studenti.unina.it>
|
||||
*
|
||||
* 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 __LINUX_LEDS_LP3944_H
|
||||
#define __LINUX_LEDS_LP3944_H
|
||||
|
||||
#include <linux/leds.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#define LP3944_LED0 0
|
||||
#define LP3944_LED1 1
|
||||
#define LP3944_LED2 2
|
||||
#define LP3944_LED3 3
|
||||
#define LP3944_LED4 4
|
||||
#define LP3944_LED5 5
|
||||
#define LP3944_LED6 6
|
||||
#define LP3944_LED7 7
|
||||
#define LP3944_LEDS_MAX 8
|
||||
|
||||
#define LP3944_LED_STATUS_MASK 0x03
|
||||
enum lp3944_status {
|
||||
LP3944_LED_STATUS_OFF = 0x0,
|
||||
LP3944_LED_STATUS_ON = 0x1,
|
||||
LP3944_LED_STATUS_DIM0 = 0x2,
|
||||
LP3944_LED_STATUS_DIM1 = 0x3
|
||||
};
|
||||
|
||||
enum lp3944_type {
|
||||
LP3944_LED_TYPE_NONE,
|
||||
LP3944_LED_TYPE_LED,
|
||||
LP3944_LED_TYPE_LED_INVERTED,
|
||||
};
|
||||
|
||||
struct lp3944_led {
|
||||
char *name;
|
||||
enum lp3944_type type;
|
||||
enum lp3944_status status;
|
||||
};
|
||||
|
||||
struct lp3944_platform_data {
|
||||
struct lp3944_led leds[LP3944_LEDS_MAX];
|
||||
u8 leds_size;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_LEDS_LP3944_H */
|
||||
|
|
@ -45,7 +45,10 @@ struct led_classdev {
|
|||
/* Get LED brightness level */
|
||||
enum led_brightness (*brightness_get)(struct led_classdev *led_cdev);
|
||||
|
||||
/* Activate hardware accelerated blink */
|
||||
/* Activate hardware accelerated blink, delays are in
|
||||
* miliseconds and if none is provided then a sensible default
|
||||
* should be chosen. The call can adjust the timings if it can't
|
||||
* match the values specified exactly. */
|
||||
int (*blink_set)(struct led_classdev *led_cdev,
|
||||
unsigned long *delay_on,
|
||||
unsigned long *delay_off);
|
||||
|
|
@ -141,9 +144,14 @@ struct gpio_led {
|
|||
const char *name;
|
||||
const char *default_trigger;
|
||||
unsigned gpio;
|
||||
u8 active_low : 1;
|
||||
u8 retain_state_suspended : 1;
|
||||
unsigned active_low : 1;
|
||||
unsigned retain_state_suspended : 1;
|
||||
unsigned default_state : 2;
|
||||
/* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
|
||||
};
|
||||
#define LEDS_GPIO_DEFSTATE_OFF 0
|
||||
#define LEDS_GPIO_DEFSTATE_ON 1
|
||||
#define LEDS_GPIO_DEFSTATE_KEEP 2
|
||||
|
||||
struct gpio_led_platform_data {
|
||||
int num_leds;
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ extern struct svc_procedure nlmsvc_procedures4[];
|
|||
extern int nlmsvc_grace_period;
|
||||
extern unsigned long nlmsvc_timeout;
|
||||
extern int nsm_use_hostnames;
|
||||
extern int nsm_local_state;
|
||||
extern u32 nsm_local_state;
|
||||
|
||||
/*
|
||||
* Lockd client functions
|
||||
|
|
|
|||
|
|
@ -258,6 +258,16 @@ extern void lockdep_init_map(struct lockdep_map *lock, const char *name,
|
|||
#define lockdep_set_subclass(lock, sub) \
|
||||
lockdep_init_map(&(lock)->dep_map, #lock, \
|
||||
(lock)->dep_map.key, sub)
|
||||
/*
|
||||
* Compare locking classes
|
||||
*/
|
||||
#define lockdep_match_class(lock, key) lockdep_match_key(&(lock)->dep_map, key)
|
||||
|
||||
static inline int lockdep_match_key(struct lockdep_map *lock,
|
||||
struct lock_class_key *key)
|
||||
{
|
||||
return lock->key == key;
|
||||
}
|
||||
|
||||
/*
|
||||
* Acquire a lock.
|
||||
|
|
@ -326,6 +336,11 @@ static inline void lockdep_on(void)
|
|||
#define lockdep_set_class_and_subclass(lock, key, sub) \
|
||||
do { (void)(key); } while (0)
|
||||
#define lockdep_set_subclass(lock, sub) do { } while (0)
|
||||
/*
|
||||
* We don't define lockdep_match_class() and lockdep_match_key() for !LOCKDEP
|
||||
* case since the result is not well defined and the caller should rather
|
||||
* #ifdef the call himself.
|
||||
*/
|
||||
|
||||
# define INIT_LOCKDEP
|
||||
# define lockdep_reset() do { debug_locks = 1; } while (0)
|
||||
|
|
|
|||
19
include/linux/max17040_battery.h
Normal file
19
include/linux/max17040_battery.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* Copyright (C) 2009 Samsung Electronics
|
||||
* Minkyu Kang <mk7.kang@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.
|
||||
*/
|
||||
|
||||
#ifndef __MAX17040_BATTERY_H_
|
||||
#define __MAX17040_BATTERY_H_
|
||||
|
||||
struct max17040_platform_data {
|
||||
int (*battery_online)(void);
|
||||
int (*charger_online)(void);
|
||||
int (*charger_enable)(void);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -826,7 +826,7 @@ extern int make_pages_present(unsigned long addr, unsigned long end);
|
|||
extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
|
||||
|
||||
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
||||
unsigned long start, int len, int write, int force,
|
||||
unsigned long start, int nr_pages, int write, int force,
|
||||
struct page **pages, struct vm_area_struct **vmas);
|
||||
int get_user_pages_fast(unsigned long start, int nr_pages, int write,
|
||||
struct page **pages);
|
||||
|
|
|
|||
|
|
@ -24,16 +24,10 @@ struct proc_mounts {
|
|||
|
||||
struct fs_struct;
|
||||
|
||||
extern struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt);
|
||||
extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
|
||||
struct fs_struct *);
|
||||
extern void __put_mnt_ns(struct mnt_namespace *ns);
|
||||
|
||||
static inline void put_mnt_ns(struct mnt_namespace *ns)
|
||||
{
|
||||
if (atomic_dec_and_lock(&ns->count, &vfsmount_lock))
|
||||
/* releases vfsmount_lock */
|
||||
__put_mnt_ns(ns);
|
||||
}
|
||||
extern void put_mnt_ns(struct mnt_namespace *ns);
|
||||
|
||||
static inline void exit_mnt_ns(struct task_struct *p)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -563,6 +563,7 @@ extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
|
|||
* @options: Option flags, e.g. 16bit buswidth
|
||||
* @ecclayout: ecc layout info structure
|
||||
* @part_probe_types: NULL-terminated array of probe types
|
||||
* @set_parts: platform specific function to set partitions
|
||||
* @priv: hardware controller specific settings
|
||||
*/
|
||||
struct platform_nand_chip {
|
||||
|
|
@ -574,26 +575,41 @@ struct platform_nand_chip {
|
|||
int chip_delay;
|
||||
unsigned int options;
|
||||
const char **part_probe_types;
|
||||
void (*set_parts)(uint64_t size,
|
||||
struct platform_nand_chip *chip);
|
||||
void *priv;
|
||||
};
|
||||
|
||||
/* Keep gcc happy */
|
||||
struct platform_device;
|
||||
|
||||
/**
|
||||
* struct platform_nand_ctrl - controller level device structure
|
||||
* @probe: platform specific function to probe/setup hardware
|
||||
* @remove: platform specific function to remove/teardown hardware
|
||||
* @hwcontrol: platform specific hardware control structure
|
||||
* @dev_ready: platform specific function to read ready/busy pin
|
||||
* @select_chip: platform specific chip select function
|
||||
* @cmd_ctrl: platform specific function for controlling
|
||||
* ALE/CLE/nCE. Also used to write command and address
|
||||
* @write_buf: platform specific function for write buffer
|
||||
* @read_buf: platform specific function for read buffer
|
||||
* @priv: private data to transport driver specific settings
|
||||
*
|
||||
* All fields are optional and depend on the hardware driver requirements
|
||||
*/
|
||||
struct platform_nand_ctrl {
|
||||
int (*probe)(struct platform_device *pdev);
|
||||
void (*remove)(struct platform_device *pdev);
|
||||
void (*hwcontrol)(struct mtd_info *mtd, int cmd);
|
||||
int (*dev_ready)(struct mtd_info *mtd);
|
||||
void (*select_chip)(struct mtd_info *mtd, int chip);
|
||||
void (*cmd_ctrl)(struct mtd_info *mtd, int dat,
|
||||
unsigned int ctrl);
|
||||
void (*write_buf)(struct mtd_info *mtd,
|
||||
const uint8_t *buf, int len);
|
||||
void (*read_buf)(struct mtd_info *mtd,
|
||||
uint8_t *buf, int len);
|
||||
void *priv;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/mtd/onenand_regs.h>
|
||||
#include <linux/mtd/bbm.h>
|
||||
|
||||
#define MAX_DIES 2
|
||||
#define MAX_BUFFERRAM 2
|
||||
|
||||
/* Scan and identify a OneNAND device */
|
||||
|
|
@ -51,7 +52,12 @@ struct onenand_bufferram {
|
|||
/**
|
||||
* struct onenand_chip - OneNAND Private Flash Chip Data
|
||||
* @base: [BOARDSPECIFIC] address to access OneNAND
|
||||
* @dies: [INTERN][FLEX-ONENAND] number of dies on chip
|
||||
* @boundary: [INTERN][FLEX-ONENAND] Boundary of the dies
|
||||
* @diesize: [INTERN][FLEX-ONENAND] Size of the dies
|
||||
* @chipsize: [INTERN] the size of one chip for multichip arrays
|
||||
* FIXME For Flex-OneNAND, chipsize holds maximum possible
|
||||
* device size ie when all blocks are considered MLC
|
||||
* @device_id: [INTERN] device ID
|
||||
* @density_mask: chip density, used for DDP devices
|
||||
* @verstion_id: [INTERN] version ID
|
||||
|
|
@ -68,6 +74,8 @@ struct onenand_bufferram {
|
|||
* @command: [REPLACEABLE] hardware specific function for writing
|
||||
* commands to the chip
|
||||
* @wait: [REPLACEABLE] hardware specific function for wait on ready
|
||||
* @bbt_wait: [REPLACEABLE] hardware specific function for bbt wait on ready
|
||||
* @unlock_all: [REPLACEABLE] hardware specific function for unlock all
|
||||
* @read_bufferram: [REPLACEABLE] hardware specific function for BufferRAM Area
|
||||
* @write_bufferram: [REPLACEABLE] hardware specific function for BufferRAM Area
|
||||
* @read_word: [REPLACEABLE] hardware specific function for read
|
||||
|
|
@ -92,9 +100,13 @@ struct onenand_bufferram {
|
|||
*/
|
||||
struct onenand_chip {
|
||||
void __iomem *base;
|
||||
unsigned dies;
|
||||
unsigned boundary[MAX_DIES];
|
||||
loff_t diesize[MAX_DIES];
|
||||
unsigned int chipsize;
|
||||
unsigned int device_id;
|
||||
unsigned int version_id;
|
||||
unsigned int technology;
|
||||
unsigned int density_mask;
|
||||
unsigned int options;
|
||||
|
||||
|
|
@ -108,6 +120,8 @@ struct onenand_chip {
|
|||
|
||||
int (*command)(struct mtd_info *mtd, int cmd, loff_t address, size_t len);
|
||||
int (*wait)(struct mtd_info *mtd, int state);
|
||||
int (*bbt_wait)(struct mtd_info *mtd, int state);
|
||||
void (*unlock_all)(struct mtd_info *mtd);
|
||||
int (*read_bufferram)(struct mtd_info *mtd, int area,
|
||||
unsigned char *buffer, int offset, size_t count);
|
||||
int (*write_bufferram)(struct mtd_info *mtd, int area,
|
||||
|
|
@ -145,6 +159,8 @@ struct onenand_chip {
|
|||
#define ONENAND_SET_BUFFERRAM0(this) (this->bufferram_index = 0)
|
||||
#define ONENAND_SET_BUFFERRAM1(this) (this->bufferram_index = 1)
|
||||
|
||||
#define FLEXONENAND(this) \
|
||||
(this->device_id & DEVICE_IS_FLEXONENAND)
|
||||
#define ONENAND_GET_SYS_CFG1(this) \
|
||||
(this->read_word(this->base + ONENAND_REG_SYS_CFG1))
|
||||
#define ONENAND_SET_SYS_CFG1(v, this) \
|
||||
|
|
@ -153,6 +169,9 @@ struct onenand_chip {
|
|||
#define ONENAND_IS_DDP(this) \
|
||||
(this->device_id & ONENAND_DEVICE_IS_DDP)
|
||||
|
||||
#define ONENAND_IS_MLC(this) \
|
||||
(this->technology & ONENAND_TECHNOLOGY_IS_MLC)
|
||||
|
||||
#ifdef CONFIG_MTD_ONENAND_2X_PROGRAM
|
||||
#define ONENAND_IS_2PLANE(this) \
|
||||
(this->options & ONENAND_HAS_2PLANE)
|
||||
|
|
@ -169,6 +188,7 @@ struct onenand_chip {
|
|||
#define ONENAND_HAS_CONT_LOCK (0x0001)
|
||||
#define ONENAND_HAS_UNLOCK_ALL (0x0002)
|
||||
#define ONENAND_HAS_2PLANE (0x0004)
|
||||
#define ONENAND_SKIP_UNLOCK_CHECK (0x0100)
|
||||
#define ONENAND_PAGEBUF_ALLOC (0x1000)
|
||||
#define ONENAND_OOBBUF_ALLOC (0x2000)
|
||||
|
||||
|
|
@ -176,6 +196,7 @@ struct onenand_chip {
|
|||
* OneNAND Flash Manufacturer ID Codes
|
||||
*/
|
||||
#define ONENAND_MFR_SAMSUNG 0xec
|
||||
#define ONENAND_MFR_NUMONYX 0x20
|
||||
|
||||
/**
|
||||
* struct onenand_manufacturers - NAND Flash Manufacturer ID Structure
|
||||
|
|
@ -189,5 +210,8 @@ struct onenand_manufacturers {
|
|||
|
||||
int onenand_bbt_read_oob(struct mtd_info *mtd, loff_t from,
|
||||
struct mtd_oob_ops *ops);
|
||||
unsigned onenand_block(struct onenand_chip *this, loff_t addr);
|
||||
loff_t onenand_addr(struct onenand_chip *this, int block);
|
||||
int flexonenand_region(struct mtd_info *mtd, loff_t addr);
|
||||
|
||||
#endif /* __LINUX_MTD_ONENAND_H */
|
||||
|
|
|
|||
|
|
@ -67,6 +67,9 @@
|
|||
/*
|
||||
* Device ID Register F001h (R)
|
||||
*/
|
||||
#define DEVICE_IS_FLEXONENAND (1 << 9)
|
||||
#define FLEXONENAND_PI_MASK (0x3ff)
|
||||
#define FLEXONENAND_PI_UNLOCK_SHIFT (14)
|
||||
#define ONENAND_DEVICE_DENSITY_MASK (0xf)
|
||||
#define ONENAND_DEVICE_DENSITY_SHIFT (4)
|
||||
#define ONENAND_DEVICE_IS_DDP (1 << 3)
|
||||
|
|
@ -83,6 +86,11 @@
|
|||
*/
|
||||
#define ONENAND_VERSION_PROCESS_SHIFT (8)
|
||||
|
||||
/*
|
||||
* Technology Register F006h (R)
|
||||
*/
|
||||
#define ONENAND_TECHNOLOGY_IS_MLC (1 << 0)
|
||||
|
||||
/*
|
||||
* Start Address 1 F100h (R/W) & Start Address 2 F101h (R/W)
|
||||
*/
|
||||
|
|
@ -93,7 +101,8 @@
|
|||
/*
|
||||
* Start Address 8 F107h (R/W)
|
||||
*/
|
||||
#define ONENAND_FPA_MASK (0x3f)
|
||||
/* Note: It's actually 0x3f in case of SLC */
|
||||
#define ONENAND_FPA_MASK (0x7f)
|
||||
#define ONENAND_FPA_SHIFT (2)
|
||||
#define ONENAND_FSA_MASK (0x03)
|
||||
|
||||
|
|
@ -105,7 +114,8 @@
|
|||
#define ONENAND_BSA_BOOTRAM (0 << 2)
|
||||
#define ONENAND_BSA_DATARAM0 (2 << 2)
|
||||
#define ONENAND_BSA_DATARAM1 (3 << 2)
|
||||
#define ONENAND_BSC_MASK (0x03)
|
||||
/* Note: It's actually 0x03 in case of SLC */
|
||||
#define ONENAND_BSC_MASK (0x07)
|
||||
|
||||
/*
|
||||
* Command Register F220h (R/W)
|
||||
|
|
@ -124,9 +134,13 @@
|
|||
#define ONENAND_CMD_RESET (0xF0)
|
||||
#define ONENAND_CMD_OTP_ACCESS (0x65)
|
||||
#define ONENAND_CMD_READID (0x90)
|
||||
#define FLEXONENAND_CMD_PI_UPDATE (0x05)
|
||||
#define FLEXONENAND_CMD_PI_ACCESS (0x66)
|
||||
#define FLEXONENAND_CMD_RECOVER_LSB (0x05)
|
||||
|
||||
/* NOTE: Those are not *REAL* commands */
|
||||
#define ONENAND_CMD_BUFFERRAM (0x1978)
|
||||
#define FLEXONENAND_CMD_READ_PI (0x1985)
|
||||
|
||||
/*
|
||||
* System Configuration 1 Register F221h (R, R/W)
|
||||
|
|
@ -192,10 +206,12 @@
|
|||
#define ONENAND_ECC_1BIT_ALL (0x5555)
|
||||
#define ONENAND_ECC_2BIT (1 << 1)
|
||||
#define ONENAND_ECC_2BIT_ALL (0xAAAA)
|
||||
#define FLEXONENAND_UNCORRECTABLE_ERROR (0x1010)
|
||||
|
||||
/*
|
||||
* One-Time Programmable (OTP)
|
||||
*/
|
||||
#define FLEXONENAND_OTP_LOCK_OFFSET (2048)
|
||||
#define ONENAND_OTP_LOCK_OFFSET (14)
|
||||
|
||||
#endif /* __ONENAND_REG_H */
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ struct mtd_partition {
|
|||
uint64_t offset; /* offset within the master MTD space */
|
||||
uint32_t mask_flags; /* master MTD flags to mask out for this partition */
|
||||
struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
|
||||
struct mtd_info **mtdp; /* pointer to store the MTD object */
|
||||
};
|
||||
|
||||
#define MTDPART_OFS_NXTBLK (-2)
|
||||
|
|
|
|||
|
|
@ -81,4 +81,17 @@ struct xt_conntrack_mtinfo1 {
|
|||
__u8 state_mask, status_mask;
|
||||
};
|
||||
|
||||
struct xt_conntrack_mtinfo2 {
|
||||
union nf_inet_addr origsrc_addr, origsrc_mask;
|
||||
union nf_inet_addr origdst_addr, origdst_mask;
|
||||
union nf_inet_addr replsrc_addr, replsrc_mask;
|
||||
union nf_inet_addr repldst_addr, repldst_mask;
|
||||
__u32 expires_min, expires_max;
|
||||
__u16 l4proto;
|
||||
__be16 origsrc_port, origdst_port;
|
||||
__be16 replsrc_port, repldst_port;
|
||||
__u16 match_flags, invert_flags;
|
||||
__u16 state_mask, status_mask;
|
||||
};
|
||||
|
||||
#endif /*_XT_CONNTRACK_H*/
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@
|
|||
#ifndef _XT_OSF_H
|
||||
#define _XT_OSF_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define MAXGENRELEN 32
|
||||
|
||||
#define XT_OSF_GENRE (1<<0)
|
||||
|
|
|
|||
|
|
@ -25,8 +25,9 @@
|
|||
#define NFSMODE_SOCK 0140000
|
||||
#define NFSMODE_FIFO 0010000
|
||||
|
||||
#define NFS_MNT_PROGRAM 100005
|
||||
#define NFS_MNT_PORT 627
|
||||
#define NFS_MNT_PROGRAM 100005
|
||||
#define NFS_MNT_VERSION 1
|
||||
#define NFS_MNT3_VERSION 3
|
||||
|
||||
/*
|
||||
* NFS stats. The good thing with these values is that NFSv3 errors are
|
||||
|
|
|
|||
|
|
@ -64,11 +64,4 @@ struct nfs2_fh {
|
|||
#define NFSPROC_READDIR 16
|
||||
#define NFSPROC_STATFS 17
|
||||
|
||||
#define NFS_MNT_PROGRAM 100005
|
||||
#define NFS_MNT_VERSION 1
|
||||
#define MNTPROC_NULL 0
|
||||
#define MNTPROC_MNT 1
|
||||
#define MNTPROC_UMNT 3
|
||||
#define MNTPROC_UMNTALL 4
|
||||
|
||||
#endif /* _LINUX_NFS2_H */
|
||||
|
|
|
|||
|
|
@ -88,12 +88,7 @@ struct nfs3_fh {
|
|||
#define NFS3PROC_PATHCONF 20
|
||||
#define NFS3PROC_COMMIT 21
|
||||
|
||||
#define NFS_MNT3_PROGRAM 100005
|
||||
#define NFS_MNT3_VERSION 3
|
||||
#define MOUNTPROC3_NULL 0
|
||||
#define MOUNTPROC3_MNT 1
|
||||
#define MOUNTPROC3_UMNT 3
|
||||
#define MOUNTPROC3_UMNTALL 4
|
||||
|
||||
|
||||
#if defined(__KERNEL__)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#define NFS4_FHSIZE 128
|
||||
#define NFS4_MAXPATHLEN PATH_MAX
|
||||
#define NFS4_MAXNAMLEN NAME_MAX
|
||||
#define NFS4_OPAQUE_LIMIT 1024
|
||||
#define NFS4_MAX_SESSIONID_LEN 16
|
||||
|
||||
#define NFS4_ACCESS_READ 0x0001
|
||||
|
|
@ -130,6 +131,16 @@
|
|||
|
||||
#define NFS4_MAX_UINT64 (~(u64)0)
|
||||
|
||||
/* An NFS4 sessions server must support at least NFS4_MAX_OPS operations.
|
||||
* If a compound requires more operations, adjust NFS4_MAX_OPS accordingly.
|
||||
*/
|
||||
#define NFS4_MAX_OPS 8
|
||||
|
||||
/* Our NFS4 client back channel server only wants the cb_sequene and the
|
||||
* actual operation per compound
|
||||
*/
|
||||
#define NFS4_MAX_BACK_CHANNEL_OPS 2
|
||||
|
||||
enum nfs4_acl_whotype {
|
||||
NFS4_ACL_WHO_NAMED = 0,
|
||||
NFS4_ACL_WHO_OWNER,
|
||||
|
|
@ -462,6 +473,13 @@ enum lock_type4 {
|
|||
#define NFSPROC4_NULL 0
|
||||
#define NFSPROC4_COMPOUND 1
|
||||
#define NFS4_MINOR_VERSION 0
|
||||
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
#define NFS4_MAX_MINOR_VERSION 1
|
||||
#else
|
||||
#define NFS4_MAX_MINOR_VERSION 0
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
#define NFS4_DEBUG 1
|
||||
|
||||
/* Index of predefined Linux client operations */
|
||||
|
|
|
|||
|
|
@ -4,11 +4,17 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/backing-dev.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/nfs_xdr.h>
|
||||
#include <linux/sunrpc/xprt.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct nfs4_session;
|
||||
struct nfs_iostats;
|
||||
struct nlm_host;
|
||||
struct nfs4_sequence_args;
|
||||
struct nfs4_sequence_res;
|
||||
struct nfs_server;
|
||||
|
||||
/*
|
||||
* The nfs_client identifies our client state to the server.
|
||||
|
|
@ -18,6 +24,7 @@ struct nfs_client {
|
|||
int cl_cons_state; /* current construction state (-ve: init error) */
|
||||
#define NFS_CS_READY 0 /* ready to be used */
|
||||
#define NFS_CS_INITING 1 /* busy initialising */
|
||||
#define NFS_CS_SESSION_INITING 2 /* busy initialising session */
|
||||
unsigned long cl_res_state; /* NFS resources state */
|
||||
#define NFS_CS_CALLBACK 1 /* - callback started */
|
||||
#define NFS_CS_IDMAP 2 /* - idmap started */
|
||||
|
|
@ -32,6 +39,7 @@ struct nfs_client {
|
|||
const struct nfs_rpc_ops *rpc_ops; /* NFS protocol vector */
|
||||
int cl_proto; /* Network transport protocol */
|
||||
|
||||
u32 cl_minorversion;/* NFSv4 minorversion */
|
||||
struct rpc_cred *cl_machine_cred;
|
||||
|
||||
#ifdef CONFIG_NFS_V4
|
||||
|
|
@ -63,7 +71,22 @@ struct nfs_client {
|
|||
*/
|
||||
char cl_ipaddr[48];
|
||||
unsigned char cl_id_uniquifier;
|
||||
#endif
|
||||
int (* cl_call_sync)(struct nfs_server *server,
|
||||
struct rpc_message *msg,
|
||||
struct nfs4_sequence_args *args,
|
||||
struct nfs4_sequence_res *res,
|
||||
int cache_reply);
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
|
||||
#ifdef CONFIG_NFS_V4_1
|
||||
/* clientid returned from EXCHANGE_ID, used by session operations */
|
||||
u64 cl_ex_clid;
|
||||
/* The sequence id to use for the next CREATE_SESSION */
|
||||
u32 cl_seqid;
|
||||
/* The flags used for obtaining the clientid during EXCHANGE_ID */
|
||||
u32 cl_exchange_flags;
|
||||
struct nfs4_session *cl_session; /* sharred session */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
#ifdef CONFIG_NFS_FSCACHE
|
||||
struct fscache_cookie *fscache; /* client index cache cookie */
|
||||
|
|
@ -145,4 +168,46 @@ struct nfs_server {
|
|||
#define NFS_CAP_ACLS (1U << 3)
|
||||
#define NFS_CAP_ATOMIC_OPEN (1U << 4)
|
||||
|
||||
|
||||
/* maximum number of slots to use */
|
||||
#define NFS4_MAX_SLOT_TABLE RPC_MAX_SLOT_TABLE
|
||||
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
|
||||
/* Sessions */
|
||||
#define SLOT_TABLE_SZ (NFS4_MAX_SLOT_TABLE/(8*sizeof(long)))
|
||||
struct nfs4_slot_table {
|
||||
struct nfs4_slot *slots; /* seqid per slot */
|
||||
unsigned long used_slots[SLOT_TABLE_SZ]; /* used/unused bitmap */
|
||||
spinlock_t slot_tbl_lock;
|
||||
struct rpc_wait_queue slot_tbl_waitq; /* allocators may wait here */
|
||||
int max_slots; /* # slots in table */
|
||||
int highest_used_slotid; /* sent to server on each SEQ.
|
||||
* op for dynamic resizing */
|
||||
};
|
||||
|
||||
static inline int slot_idx(struct nfs4_slot_table *tbl, struct nfs4_slot *sp)
|
||||
{
|
||||
return sp - tbl->slots;
|
||||
}
|
||||
|
||||
/*
|
||||
* Session related parameters
|
||||
*/
|
||||
struct nfs4_session {
|
||||
struct nfs4_sessionid sess_id;
|
||||
u32 flags;
|
||||
unsigned long session_state;
|
||||
u32 hash_alg;
|
||||
u32 ssv_len;
|
||||
|
||||
/* The fore and back channel */
|
||||
struct nfs4_channel_attrs fc_attrs;
|
||||
struct nfs4_slot_table fc_slot_table;
|
||||
struct nfs4_channel_attrs bc_attrs;
|
||||
struct nfs4_slot_table bc_slot_table;
|
||||
struct nfs_client *clp;
|
||||
};
|
||||
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -145,6 +145,44 @@ struct nfs4_change_info {
|
|||
};
|
||||
|
||||
struct nfs_seqid;
|
||||
|
||||
/* nfs41 sessions channel attributes */
|
||||
struct nfs4_channel_attrs {
|
||||
u32 headerpadsz;
|
||||
u32 max_rqst_sz;
|
||||
u32 max_resp_sz;
|
||||
u32 max_resp_sz_cached;
|
||||
u32 max_ops;
|
||||
u32 max_reqs;
|
||||
};
|
||||
|
||||
/* nfs41 sessions slot seqid */
|
||||
struct nfs4_slot {
|
||||
u32 seq_nr;
|
||||
};
|
||||
|
||||
struct nfs4_sequence_args {
|
||||
struct nfs4_session *sa_session;
|
||||
u8 sa_slotid;
|
||||
u8 sa_cache_this;
|
||||
};
|
||||
|
||||
struct nfs4_sequence_res {
|
||||
struct nfs4_session *sr_session;
|
||||
u8 sr_slotid; /* slot used to send request */
|
||||
unsigned long sr_renewal_time;
|
||||
int sr_status; /* sequence operation status */
|
||||
};
|
||||
|
||||
struct nfs4_get_lease_time_args {
|
||||
struct nfs4_sequence_args la_seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_get_lease_time_res {
|
||||
struct nfs_fsinfo *lr_fsinfo;
|
||||
struct nfs4_sequence_res lr_seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to the open call.
|
||||
*/
|
||||
|
|
@ -165,6 +203,7 @@ struct nfs_openargs {
|
|||
const struct nfs_server *server; /* Needed for ID mapping */
|
||||
const u32 * bitmask;
|
||||
__u32 claim;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_openres {
|
||||
|
|
@ -181,6 +220,7 @@ struct nfs_openres {
|
|||
__u32 do_recall;
|
||||
__u64 maxsize;
|
||||
__u32 attrset[NFS4_BITMAP_SIZE];
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -206,6 +246,7 @@ struct nfs_closeargs {
|
|||
struct nfs_seqid * seqid;
|
||||
fmode_t fmode;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_closeres {
|
||||
|
|
@ -213,6 +254,7 @@ struct nfs_closeres {
|
|||
struct nfs_fattr * fattr;
|
||||
struct nfs_seqid * seqid;
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
/*
|
||||
* * Arguments to the lock,lockt, and locku call.
|
||||
|
|
@ -233,12 +275,14 @@ struct nfs_lock_args {
|
|||
unsigned char block : 1;
|
||||
unsigned char reclaim : 1;
|
||||
unsigned char new_lock_owner : 1;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_lock_res {
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_seqid * lock_seqid;
|
||||
struct nfs_seqid * open_seqid;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs_locku_args {
|
||||
|
|
@ -246,32 +290,38 @@ struct nfs_locku_args {
|
|||
struct file_lock * fl;
|
||||
struct nfs_seqid * seqid;
|
||||
nfs4_stateid * stateid;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_locku_res {
|
||||
nfs4_stateid stateid;
|
||||
struct nfs_seqid * seqid;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs_lockt_args {
|
||||
struct nfs_fh * fh;
|
||||
struct file_lock * fl;
|
||||
struct nfs_lowner lock_owner;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_lockt_res {
|
||||
struct file_lock * denied; /* LOCK, LOCKT failed */
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_delegreturnargs {
|
||||
const struct nfs_fh *fhandle;
|
||||
const nfs4_stateid *stateid;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_delegreturnres {
|
||||
struct nfs_fattr * fattr;
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -284,12 +334,14 @@ struct nfs_readargs {
|
|||
__u32 count;
|
||||
unsigned int pgbase;
|
||||
struct page ** pages;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_readres {
|
||||
struct nfs_fattr * fattr;
|
||||
__u32 count;
|
||||
int eof;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -304,6 +356,7 @@ struct nfs_writeargs {
|
|||
unsigned int pgbase;
|
||||
struct page ** pages;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_writeverf {
|
||||
|
|
@ -316,6 +369,7 @@ struct nfs_writeres {
|
|||
struct nfs_writeverf * verf;
|
||||
__u32 count;
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -325,12 +379,14 @@ struct nfs_removeargs {
|
|||
const struct nfs_fh *fh;
|
||||
struct qstr name;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_removeres {
|
||||
const struct nfs_server *server;
|
||||
struct nfs4_change_info cinfo;
|
||||
struct nfs_fattr dir_attr;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -383,6 +439,7 @@ struct nfs_setattrargs {
|
|||
struct iattr * iap;
|
||||
const struct nfs_server * server; /* Needed for name mapping */
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_setaclargs {
|
||||
|
|
@ -390,6 +447,11 @@ struct nfs_setaclargs {
|
|||
size_t acl_len;
|
||||
unsigned int acl_pgbase;
|
||||
struct page ** acl_pages;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_setaclres {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs_getaclargs {
|
||||
|
|
@ -397,11 +459,18 @@ struct nfs_getaclargs {
|
|||
size_t acl_len;
|
||||
unsigned int acl_pgbase;
|
||||
struct page ** acl_pages;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs_getaclres {
|
||||
size_t acl_len;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs_setattrres {
|
||||
struct nfs_fattr * fattr;
|
||||
const struct nfs_server * server;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs_linkargs {
|
||||
|
|
@ -583,6 +652,7 @@ struct nfs4_accessargs {
|
|||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
u32 access;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_accessres {
|
||||
|
|
@ -590,6 +660,7 @@ struct nfs4_accessres {
|
|||
struct nfs_fattr * fattr;
|
||||
u32 supported;
|
||||
u32 access;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_create_arg {
|
||||
|
|
@ -609,6 +680,7 @@ struct nfs4_create_arg {
|
|||
const struct iattr * attrs;
|
||||
const struct nfs_fh * dir_fh;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_create_res {
|
||||
|
|
@ -617,21 +689,30 @@ struct nfs4_create_res {
|
|||
struct nfs_fattr * fattr;
|
||||
struct nfs4_change_info dir_cinfo;
|
||||
struct nfs_fattr * dir_fattr;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_fsinfo_arg {
|
||||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_fsinfo_res {
|
||||
struct nfs_fsinfo *fsinfo;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_getattr_arg {
|
||||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_getattr_res {
|
||||
const struct nfs_server * server;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_link_arg {
|
||||
|
|
@ -639,6 +720,7 @@ struct nfs4_link_arg {
|
|||
const struct nfs_fh * dir_fh;
|
||||
const struct qstr * name;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_link_res {
|
||||
|
|
@ -646,6 +728,7 @@ struct nfs4_link_res {
|
|||
struct nfs_fattr * fattr;
|
||||
struct nfs4_change_info cinfo;
|
||||
struct nfs_fattr * dir_attr;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -653,21 +736,30 @@ struct nfs4_lookup_arg {
|
|||
const struct nfs_fh * dir_fh;
|
||||
const struct qstr * name;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_lookup_res {
|
||||
const struct nfs_server * server;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs_fh * fh;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_lookup_root_arg {
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_pathconf_arg {
|
||||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_pathconf_res {
|
||||
struct nfs_pathconf *pathconf;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_readdir_arg {
|
||||
|
|
@ -678,11 +770,13 @@ struct nfs4_readdir_arg {
|
|||
struct page ** pages; /* zero-copy data */
|
||||
unsigned int pgbase; /* zero-copy data */
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_readdir_res {
|
||||
nfs4_verifier verifier;
|
||||
unsigned int pgbase;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_readlink {
|
||||
|
|
@ -690,6 +784,11 @@ struct nfs4_readlink {
|
|||
unsigned int pgbase;
|
||||
unsigned int pglen; /* zero-copy data */
|
||||
struct page ** pages; /* zero-copy data */
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_readlink_res {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_rename_arg {
|
||||
|
|
@ -698,6 +797,7 @@ struct nfs4_rename_arg {
|
|||
const struct qstr * old_name;
|
||||
const struct qstr * new_name;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_rename_res {
|
||||
|
|
@ -706,6 +806,7 @@ struct nfs4_rename_res {
|
|||
struct nfs_fattr * old_fattr;
|
||||
struct nfs4_change_info new_cinfo;
|
||||
struct nfs_fattr * new_fattr;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
#define NFS4_SETCLIENTID_NAMELEN (127)
|
||||
|
|
@ -724,6 +825,17 @@ struct nfs4_setclientid {
|
|||
struct nfs4_statfs_arg {
|
||||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_statfs_res {
|
||||
struct nfs_fsstat *fsstat;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_server_caps_arg {
|
||||
struct nfs_fh *fhandle;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_server_caps_res {
|
||||
|
|
@ -731,6 +843,7 @@ struct nfs4_server_caps_res {
|
|||
u32 acl_bitmask;
|
||||
u32 has_links;
|
||||
u32 has_symlinks;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
struct nfs4_string {
|
||||
|
|
@ -765,10 +878,68 @@ struct nfs4_fs_locations_arg {
|
|||
const struct qstr *name;
|
||||
struct page *page;
|
||||
const u32 *bitmask;
|
||||
struct nfs4_sequence_args seq_args;
|
||||
};
|
||||
|
||||
struct nfs4_fs_locations_res {
|
||||
struct nfs4_fs_locations *fs_locations;
|
||||
struct nfs4_sequence_res seq_res;
|
||||
};
|
||||
|
||||
#endif /* CONFIG_NFS_V4 */
|
||||
|
||||
struct nfstime4 {
|
||||
u64 seconds;
|
||||
u32 nseconds;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_NFS_V4_1
|
||||
struct nfs_impl_id4 {
|
||||
u32 domain_len;
|
||||
char *domain;
|
||||
u32 name_len;
|
||||
char *name;
|
||||
struct nfstime4 date;
|
||||
};
|
||||
|
||||
#define NFS4_EXCHANGE_ID_LEN (48)
|
||||
struct nfs41_exchange_id_args {
|
||||
struct nfs_client *client;
|
||||
nfs4_verifier *verifier;
|
||||
unsigned int id_len;
|
||||
char id[NFS4_EXCHANGE_ID_LEN];
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
struct server_owner {
|
||||
uint64_t minor_id;
|
||||
uint32_t major_id_sz;
|
||||
char major_id[NFS4_OPAQUE_LIMIT];
|
||||
};
|
||||
|
||||
struct server_scope {
|
||||
uint32_t server_scope_sz;
|
||||
char server_scope[NFS4_OPAQUE_LIMIT];
|
||||
};
|
||||
|
||||
struct nfs41_exchange_id_res {
|
||||
struct nfs_client *client;
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
struct nfs41_create_session_args {
|
||||
struct nfs_client *client;
|
||||
uint32_t flags;
|
||||
uint32_t cb_program;
|
||||
struct nfs4_channel_attrs fc_attrs; /* Fore Channel */
|
||||
struct nfs4_channel_attrs bc_attrs; /* Back Channel */
|
||||
};
|
||||
|
||||
struct nfs41_create_session_res {
|
||||
struct nfs_client *client;
|
||||
};
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
struct nfs_page;
|
||||
|
||||
#define NFS_PAGEVEC_SIZE (8U)
|
||||
|
|
|
|||
|
|
@ -14,8 +14,7 @@
|
|||
#include <linux/uio.h>
|
||||
|
||||
/*
|
||||
* Representation of a reply cache entry. The first two members *must*
|
||||
* be hash_next and hash_prev.
|
||||
* Representation of a reply cache entry.
|
||||
*/
|
||||
struct svc_cacherep {
|
||||
struct hlist_node c_hash;
|
||||
|
|
|
|||
|
|
@ -151,9 +151,15 @@ typedef struct svc_fh {
|
|||
__u64 fh_pre_size; /* size before operation */
|
||||
struct timespec fh_pre_mtime; /* mtime before oper */
|
||||
struct timespec fh_pre_ctime; /* ctime before oper */
|
||||
/*
|
||||
* pre-op nfsv4 change attr: note must check IS_I_VERSION(inode)
|
||||
* to find out if it is valid.
|
||||
*/
|
||||
u64 fh_pre_change;
|
||||
|
||||
/* Post-op attributes saved in fh_unlock */
|
||||
struct kstat fh_post_attr; /* full attrs after operation */
|
||||
u64 fh_post_change; /* nfsv4 change; see above */
|
||||
#endif /* CONFIG_NFSD_V3 */
|
||||
|
||||
} svc_fh;
|
||||
|
|
@ -298,6 +304,7 @@ fill_pre_wcc(struct svc_fh *fhp)
|
|||
fhp->fh_pre_mtime = inode->i_mtime;
|
||||
fhp->fh_pre_ctime = inode->i_ctime;
|
||||
fhp->fh_pre_size = inode->i_size;
|
||||
fhp->fh_pre_change = inode->i_version;
|
||||
fhp->fh_pre_saved = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@
|
|||
#include <linux/kref.h>
|
||||
#include <linux/sunrpc/clnt.h>
|
||||
|
||||
#define NFS4_OPAQUE_LIMIT 1024
|
||||
typedef struct {
|
||||
u32 cl_boot;
|
||||
u32 cl_id;
|
||||
|
|
@ -61,15 +60,6 @@ typedef struct {
|
|||
#define si_stateownerid si_opaque.so_stateownerid
|
||||
#define si_fileid si_opaque.so_fileid
|
||||
|
||||
|
||||
struct nfs4_cb_recall {
|
||||
u32 cbr_ident;
|
||||
int cbr_trunc;
|
||||
stateid_t cbr_stateid;
|
||||
struct knfsd_fh cbr_fh;
|
||||
struct nfs4_delegation *cbr_dp;
|
||||
};
|
||||
|
||||
struct nfs4_delegation {
|
||||
struct list_head dl_perfile;
|
||||
struct list_head dl_perclnt;
|
||||
|
|
@ -81,22 +71,25 @@ struct nfs4_delegation {
|
|||
struct file *dl_vfs_file;
|
||||
u32 dl_type;
|
||||
time_t dl_time;
|
||||
struct nfs4_cb_recall dl_recall;
|
||||
/* For recall: */
|
||||
u32 dl_ident;
|
||||
stateid_t dl_stateid;
|
||||
struct knfsd_fh dl_fh;
|
||||
int dl_retries;
|
||||
};
|
||||
|
||||
#define dl_stateid dl_recall.cbr_stateid
|
||||
#define dl_fh dl_recall.cbr_fh
|
||||
|
||||
/* client delegation callback info */
|
||||
struct nfs4_callback {
|
||||
struct nfs4_cb_conn {
|
||||
/* SETCLIENTID info */
|
||||
u32 cb_addr;
|
||||
unsigned short cb_port;
|
||||
u32 cb_prog;
|
||||
u32 cb_ident;
|
||||
u32 cb_minorversion;
|
||||
u32 cb_ident; /* minorversion 0 only */
|
||||
/* RPC client info */
|
||||
atomic_t cb_set; /* successful CB_NULL call */
|
||||
struct rpc_clnt * cb_client;
|
||||
struct rpc_cred * cb_cred;
|
||||
};
|
||||
|
||||
/* Maximum number of slots per session. 128 is useful for long haul TCP */
|
||||
|
|
@ -122,6 +115,17 @@ struct nfsd4_slot {
|
|||
struct nfsd4_cache_entry sl_cache_entry;
|
||||
};
|
||||
|
||||
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_session {
|
||||
struct kref se_ref;
|
||||
struct list_head se_hash; /* hash by sessionid */
|
||||
|
|
@ -129,11 +133,8 @@ struct nfsd4_session {
|
|||
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_channel_attrs se_fchannel;
|
||||
struct nfsd4_channel_attrs se_bchannel;
|
||||
struct nfsd4_slot se_slots[]; /* forward channel slots */
|
||||
};
|
||||
|
||||
|
|
@ -185,7 +186,7 @@ struct nfs4_client {
|
|||
struct svc_cred cl_cred; /* setclientid principal */
|
||||
clientid_t cl_clientid; /* generated by server */
|
||||
nfs4_verifier cl_confirm; /* generated by server */
|
||||
struct nfs4_callback cl_callback; /* callback info */
|
||||
struct nfs4_cb_conn cl_cb_conn; /* callback info */
|
||||
atomic_t cl_count; /* ref count */
|
||||
u32 cl_firststate; /* recovery dir creation */
|
||||
|
||||
|
|
|
|||
|
|
@ -64,10 +64,13 @@ static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
|
|||
|
||||
struct nfsd4_change_info {
|
||||
u32 atomic;
|
||||
bool change_supported;
|
||||
u32 before_ctime_sec;
|
||||
u32 before_ctime_nsec;
|
||||
u64 before_change;
|
||||
u32 after_ctime_sec;
|
||||
u32 after_ctime_nsec;
|
||||
u64 after_change;
|
||||
};
|
||||
|
||||
struct nfsd4_access {
|
||||
|
|
@ -363,17 +366,6 @@ struct nfsd4_exchange_id {
|
|||
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;
|
||||
|
|
@ -503,10 +495,16 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
|
|||
{
|
||||
BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved);
|
||||
cinfo->atomic = 1;
|
||||
cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
|
||||
cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
|
||||
cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
|
||||
cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
|
||||
cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
|
||||
if (cinfo->change_supported) {
|
||||
cinfo->before_change = fhp->fh_pre_change;
|
||||
cinfo->after_change = fhp->fh_post_change;
|
||||
} else {
|
||||
cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
|
||||
cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
|
||||
cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
|
||||
cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
|
||||
}
|
||||
}
|
||||
|
||||
int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
|||
{
|
||||
struct pci_bus *pbus = pdev->bus;
|
||||
/* Find a PCI root bus */
|
||||
while (pbus->parent)
|
||||
while (!pci_is_root_bus(pbus))
|
||||
pbus = pbus->parent;
|
||||
return acpi_get_pci_rootbridge_handle(pci_domain_nr(pbus),
|
||||
pbus->number);
|
||||
|
|
@ -23,7 +23,7 @@ static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
|
|||
|
||||
static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
|
||||
{
|
||||
if (pbus->parent)
|
||||
if (!pci_is_root_bus(pbus))
|
||||
return DEVICE_ACPI_HANDLE(&(pbus->self->dev));
|
||||
return acpi_get_pci_rootbridge_handle(pci_domain_nr(pbus),
|
||||
pbus->number);
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ struct pci_cap_saved_state {
|
|||
struct pcie_link_state;
|
||||
struct pci_vpd;
|
||||
struct pci_sriov;
|
||||
struct pci_ats;
|
||||
|
||||
/*
|
||||
* The pci_dev structure is used to describe PCI devices.
|
||||
|
|
@ -293,6 +294,7 @@ struct pci_dev {
|
|||
struct pci_sriov *sriov; /* SR-IOV capability related */
|
||||
struct pci_dev *physfn; /* the PF this VF is associated with */
|
||||
};
|
||||
struct pci_ats *ats; /* Address Translation Service */
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
@ -607,8 +609,6 @@ extern void pci_sort_breadthfirst(void);
|
|||
struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
|
||||
unsigned int device,
|
||||
struct pci_dev *from);
|
||||
struct pci_dev __deprecated *pci_find_slot(unsigned int bus,
|
||||
unsigned int devfn);
|
||||
#endif /* CONFIG_PCI_LEGACY */
|
||||
|
||||
enum pci_lost_interrupt_reason {
|
||||
|
|
@ -647,6 +647,7 @@ int pci_bus_write_config_word(struct pci_bus *bus, unsigned int devfn,
|
|||
int where, u16 val);
|
||||
int pci_bus_write_config_dword(struct pci_bus *bus, unsigned int devfn,
|
||||
int where, u32 val);
|
||||
struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops);
|
||||
|
||||
static inline int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val)
|
||||
{
|
||||
|
|
@ -711,8 +712,8 @@ int pcix_get_mmrbc(struct pci_dev *dev);
|
|||
int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc);
|
||||
int pcie_get_readrq(struct pci_dev *dev);
|
||||
int pcie_set_readrq(struct pci_dev *dev, int rq);
|
||||
int __pci_reset_function(struct pci_dev *dev);
|
||||
int pci_reset_function(struct pci_dev *dev);
|
||||
int pci_execute_reset_function(struct pci_dev *dev);
|
||||
void pci_update_resource(struct pci_dev *dev, int resno);
|
||||
int __must_check pci_assign_resource(struct pci_dev *dev, int i);
|
||||
int pci_select_bars(struct pci_dev *dev, unsigned long flags);
|
||||
|
|
@ -732,7 +733,7 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state);
|
|||
pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
|
||||
bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
|
||||
void pci_pme_active(struct pci_dev *dev, bool enable);
|
||||
int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable);
|
||||
int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable);
|
||||
int pci_wake_from_d3(struct pci_dev *dev, bool enable);
|
||||
pci_power_t pci_target_state(struct pci_dev *dev);
|
||||
int pci_prepare_to_sleep(struct pci_dev *dev);
|
||||
|
|
@ -798,7 +799,7 @@ const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
|
|||
int pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max,
|
||||
int pass);
|
||||
|
||||
void pci_walk_bus(struct pci_bus *top, void (*cb)(struct pci_dev *, void *),
|
||||
void pci_walk_bus(struct pci_bus *top, int (*cb)(struct pci_dev *, void *),
|
||||
void *userdata);
|
||||
int pci_cfg_space_size_ext(struct pci_dev *dev);
|
||||
int pci_cfg_space_size(struct pci_dev *dev);
|
||||
|
|
@ -888,6 +889,17 @@ static inline int pcie_aspm_enabled(void)
|
|||
extern int pcie_aspm_enabled(void);
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_PCIE_ECRC
|
||||
static inline void pcie_set_ecrc_checking(struct pci_dev *dev)
|
||||
{
|
||||
return;
|
||||
}
|
||||
static inline void pcie_ecrc_get_policy(char *str) {};
|
||||
#else
|
||||
extern void pcie_set_ecrc_checking(struct pci_dev *dev);
|
||||
extern void pcie_ecrc_get_policy(char *str);
|
||||
#endif
|
||||
|
||||
#define pci_enable_msi(pdev) pci_enable_msi_block(pdev, 1)
|
||||
|
||||
#ifdef CONFIG_HT_IRQ
|
||||
|
|
@ -944,12 +956,6 @@ static inline struct pci_dev *pci_find_device(unsigned int vendor,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct pci_dev *pci_find_slot(unsigned int bus,
|
||||
unsigned int devfn)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct pci_dev *pci_get_device(unsigned int vendor,
|
||||
unsigned int device,
|
||||
struct pci_dev *from)
|
||||
|
|
@ -1105,6 +1111,10 @@ static inline struct pci_dev *pci_get_bus_and_slot(unsigned int bus,
|
|||
|
||||
#include <asm/pci.h>
|
||||
|
||||
#ifndef PCIBIOS_MAX_MEM_32
|
||||
#define PCIBIOS_MAX_MEM_32 (-1)
|
||||
#endif
|
||||
|
||||
/* these helpers provide future and backwards compatibility
|
||||
* for accessing popular PCI BAR info */
|
||||
#define pci_resource_start(dev, bar) ((dev)->resource[(bar)].start)
|
||||
|
|
@ -1261,5 +1271,10 @@ static inline irqreturn_t pci_sriov_migration(struct pci_dev *dev)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_HOTPLUG_PCI) || defined(CONFIG_HOTPLUG_PCI_MODULE)
|
||||
extern void pci_hp_create_module_link(struct pci_slot *pci_slot);
|
||||
extern void pci_hp_remove_module_link(struct pci_slot *pci_slot);
|
||||
#endif
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* LINUX_PCI_H */
|
||||
|
|
|
|||
|
|
@ -66,17 +66,10 @@ enum pcie_link_speed {
|
|||
PCIE_LNK_SPEED_UNKNOWN = 0xFF,
|
||||
};
|
||||
|
||||
struct hotplug_slot;
|
||||
struct hotplug_slot_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct hotplug_slot *, char *);
|
||||
ssize_t (*store)(struct hotplug_slot *, const char *, size_t);
|
||||
};
|
||||
#define to_hotplug_attr(n) container_of(n, struct hotplug_slot_attribute, attr);
|
||||
|
||||
/**
|
||||
* struct hotplug_slot_ops -the callbacks that the hotplug pci core can use
|
||||
* @owner: The module owner of this structure
|
||||
* @mod_name: The module name (KBUILD_MODNAME) of this structure
|
||||
* @enable_slot: Called when the user wants to enable a specific pci slot
|
||||
* @disable_slot: Called when the user wants to disable a specific pci slot
|
||||
* @set_attention_status: Called to set the specific slot's attention LED to
|
||||
|
|
@ -109,6 +102,7 @@ struct hotplug_slot_attribute {
|
|||
*/
|
||||
struct hotplug_slot_ops {
|
||||
struct module *owner;
|
||||
const char *mod_name;
|
||||
int (*enable_slot) (struct hotplug_slot *slot);
|
||||
int (*disable_slot) (struct hotplug_slot *slot);
|
||||
int (*set_attention_status) (struct hotplug_slot *slot, u8 value);
|
||||
|
|
@ -167,12 +161,21 @@ static inline const char *hotplug_slot_name(const struct hotplug_slot *slot)
|
|||
return pci_slot_name(slot->pci_slot);
|
||||
}
|
||||
|
||||
extern int pci_hp_register(struct hotplug_slot *, struct pci_bus *, int nr,
|
||||
const char *name);
|
||||
extern int __pci_hp_register(struct hotplug_slot *slot, struct pci_bus *pbus,
|
||||
int nr, const char *name,
|
||||
struct module *owner, const char *mod_name);
|
||||
extern int pci_hp_deregister(struct hotplug_slot *slot);
|
||||
extern int __must_check pci_hp_change_slot_info (struct hotplug_slot *slot,
|
||||
struct hotplug_slot_info *info);
|
||||
|
||||
static inline int pci_hp_register(struct hotplug_slot *slot,
|
||||
struct pci_bus *pbus,
|
||||
int devnr, const char *name)
|
||||
{
|
||||
return __pci_hp_register(slot, pbus, devnr, name,
|
||||
THIS_MODULE, KBUILD_MODNAME);
|
||||
}
|
||||
|
||||
/* PCI Setting Record (Type 0) */
|
||||
struct hpp_type0 {
|
||||
u32 revision;
|
||||
|
|
@ -226,7 +229,6 @@ struct hotplug_params {
|
|||
extern acpi_status acpi_get_hp_params_from_firmware(struct pci_bus *bus,
|
||||
struct hotplug_params *hpp);
|
||||
int acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev, u32 flags);
|
||||
int acpi_root_bridge(acpi_handle handle);
|
||||
int acpi_pci_check_ejectable(struct pci_bus *pbus, acpi_handle handle);
|
||||
int acpi_pci_detect_ejectable(struct pci_bus *pbus);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2645,6 +2645,7 @@
|
|||
#define PCI_DEVICE_ID_NETMOS_9835 0x9835
|
||||
#define PCI_DEVICE_ID_NETMOS_9845 0x9845
|
||||
#define PCI_DEVICE_ID_NETMOS_9855 0x9855
|
||||
#define PCI_DEVICE_ID_NETMOS_9901 0x9901
|
||||
|
||||
#define PCI_VENDOR_ID_3COM_2 0xa727
|
||||
|
||||
|
|
|
|||
|
|
@ -295,8 +295,9 @@
|
|||
#define PCI_MSI_ADDRESS_LO 4 /* Lower 32 bits */
|
||||
#define PCI_MSI_ADDRESS_HI 8 /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
|
||||
#define PCI_MSI_DATA_32 8 /* 16 bits of data for 32-bit devices */
|
||||
#define PCI_MSI_MASK_32 12 /* Mask bits register for 32-bit devices */
|
||||
#define PCI_MSI_DATA_64 12 /* 16 bits of data for 64-bit devices */
|
||||
#define PCI_MSI_MASK_BIT 16 /* Mask bits register */
|
||||
#define PCI_MSI_MASK_64 16 /* Mask bits register for 64-bit devices */
|
||||
|
||||
/* MSI-X registers (these are at offset PCI_MSIX_FLAGS) */
|
||||
#define PCI_MSIX_FLAGS 2
|
||||
|
|
@ -304,7 +305,6 @@
|
|||
#define PCI_MSIX_FLAGS_ENABLE (1 << 15)
|
||||
#define PCI_MSIX_FLAGS_MASKALL (1 << 14)
|
||||
#define PCI_MSIX_FLAGS_BIRMASK (7 << 0)
|
||||
#define PCI_MSIX_FLAGS_BITMASK (1 << 0)
|
||||
|
||||
/* CompactPCI Hotswap Register */
|
||||
|
||||
|
|
@ -502,6 +502,7 @@
|
|||
#define PCI_EXT_CAP_ID_DSN 3
|
||||
#define PCI_EXT_CAP_ID_PWR 4
|
||||
#define PCI_EXT_CAP_ID_ARI 14
|
||||
#define PCI_EXT_CAP_ID_ATS 15
|
||||
#define PCI_EXT_CAP_ID_SRIOV 16
|
||||
|
||||
/* Advanced Error Reporting */
|
||||
|
|
@ -620,6 +621,15 @@
|
|||
#define PCI_ARI_CTRL_ACS 0x0002 /* ACS Function Groups Enable */
|
||||
#define PCI_ARI_CTRL_FG(x) (((x) >> 4) & 7) /* Function Group */
|
||||
|
||||
/* Address Translation Service */
|
||||
#define PCI_ATS_CAP 0x04 /* ATS Capability Register */
|
||||
#define PCI_ATS_CAP_QDEP(x) ((x) & 0x1f) /* Invalidate Queue Depth */
|
||||
#define PCI_ATS_MAX_QDEP 32 /* Max Invalidate Queue Depth */
|
||||
#define PCI_ATS_CTRL 0x06 /* ATS Control Register */
|
||||
#define PCI_ATS_CTRL_ENABLE 0x8000 /* ATS Enable */
|
||||
#define PCI_ATS_CTRL_STU(x) ((x) & 0x1f) /* Smallest Translation Unit */
|
||||
#define PCI_ATS_MIN_STU 12 /* shift of minimum STU block */
|
||||
|
||||
/* Single Root I/O Virtualization */
|
||||
#define PCI_SRIOV_CAP 0x04 /* SR-IOV Capabilities */
|
||||
#define PCI_SRIOV_CAP_VFM 0x01 /* VF Migration Capable */
|
||||
|
|
|
|||
|
|
@ -61,7 +61,8 @@
|
|||
#define DEFINE_PER_CPU_SECTION(type, name, sec) \
|
||||
__PCPU_DUMMY_ATTRS char __pcpu_scope_##name; \
|
||||
__PCPU_DUMMY_ATTRS char __pcpu_unique_##name; \
|
||||
__PCPU_ATTRS(sec) __weak __typeof__(type) per_cpu__##name
|
||||
__PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES __weak \
|
||||
__typeof__(type) per_cpu__##name
|
||||
#else
|
||||
/*
|
||||
* Normal declaration and definition macros.
|
||||
|
|
@ -70,7 +71,8 @@
|
|||
extern __PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name
|
||||
|
||||
#define DEFINE_PER_CPU_SECTION(type, name, sec) \
|
||||
__PCPU_ATTRS(sec) __typeof__(type) per_cpu__##name
|
||||
__PCPU_ATTRS(sec) PER_CPU_DEF_ATTRIBUTES \
|
||||
__typeof__(type) per_cpu__##name
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -178,8 +178,10 @@ struct perf_counter_attr {
|
|||
mmap : 1, /* include mmap data */
|
||||
comm : 1, /* include comm data */
|
||||
freq : 1, /* use freq, not period */
|
||||
inherit_stat : 1, /* per task counts */
|
||||
enable_on_exec : 1, /* next exec enables */
|
||||
|
||||
__reserved_1 : 53;
|
||||
__reserved_1 : 51;
|
||||
|
||||
__u32 wakeup_events; /* wakeup every n events */
|
||||
__u32 __reserved_2;
|
||||
|
|
@ -232,6 +234,14 @@ struct perf_counter_mmap_page {
|
|||
__u32 lock; /* seqlock for synchronization */
|
||||
__u32 index; /* hardware counter identifier */
|
||||
__s64 offset; /* add to hardware counter value */
|
||||
__u64 time_enabled; /* time counter active */
|
||||
__u64 time_running; /* time counter on cpu */
|
||||
|
||||
/*
|
||||
* Hole for extension of the self monitor capabilities
|
||||
*/
|
||||
|
||||
__u64 __reserved[123]; /* align to 1k */
|
||||
|
||||
/*
|
||||
* Control data for the mmap() data buffer.
|
||||
|
|
@ -253,7 +263,6 @@ struct perf_counter_mmap_page {
|
|||
#define PERF_EVENT_MISC_KERNEL (1 << 0)
|
||||
#define PERF_EVENT_MISC_USER (2 << 0)
|
||||
#define PERF_EVENT_MISC_HYPERVISOR (3 << 0)
|
||||
#define PERF_EVENT_MISC_OVERFLOW (1 << 2)
|
||||
|
||||
struct perf_event_header {
|
||||
__u32 type;
|
||||
|
|
@ -327,9 +336,18 @@ enum perf_event_type {
|
|||
PERF_EVENT_FORK = 7,
|
||||
|
||||
/*
|
||||
* When header.misc & PERF_EVENT_MISC_OVERFLOW the event_type field
|
||||
* will be PERF_SAMPLE_*
|
||||
*
|
||||
* struct {
|
||||
* struct perf_event_header header;
|
||||
* u32 pid, tid;
|
||||
* u64 value;
|
||||
* { u64 time_enabled; } && PERF_FORMAT_ENABLED
|
||||
* { u64 time_running; } && PERF_FORMAT_RUNNING
|
||||
* { u64 parent_id; } && PERF_FORMAT_ID
|
||||
* };
|
||||
*/
|
||||
PERF_EVENT_READ = 8,
|
||||
|
||||
/*
|
||||
* struct {
|
||||
* struct perf_event_header header;
|
||||
*
|
||||
|
|
@ -337,8 +355,9 @@ enum perf_event_type {
|
|||
* { u32 pid, tid; } && PERF_SAMPLE_TID
|
||||
* { u64 time; } && PERF_SAMPLE_TIME
|
||||
* { u64 addr; } && PERF_SAMPLE_ADDR
|
||||
* { u64 config; } && PERF_SAMPLE_CONFIG
|
||||
* { u64 id; } && PERF_SAMPLE_ID
|
||||
* { u32 cpu, res; } && PERF_SAMPLE_CPU
|
||||
* { u64 period; } && PERF_SAMPLE_PERIOD
|
||||
*
|
||||
* { u64 nr;
|
||||
* { u64 id, val; } cnt[nr]; } && PERF_SAMPLE_GROUP
|
||||
|
|
@ -347,6 +366,9 @@ enum perf_event_type {
|
|||
* u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN
|
||||
* };
|
||||
*/
|
||||
PERF_EVENT_SAMPLE = 9,
|
||||
|
||||
PERF_EVENT_MAX, /* non-ABI */
|
||||
};
|
||||
|
||||
enum perf_callchain_context {
|
||||
|
|
@ -582,6 +604,7 @@ struct perf_counter_context {
|
|||
int nr_counters;
|
||||
int nr_active;
|
||||
int is_active;
|
||||
int nr_stat;
|
||||
atomic_t refcount;
|
||||
struct task_struct *task;
|
||||
|
||||
|
|
@ -669,7 +692,16 @@ static inline int is_software_counter(struct perf_counter *counter)
|
|||
(counter->attr.type != PERF_TYPE_HW_CACHE);
|
||||
}
|
||||
|
||||
extern void perf_swcounter_event(u32, u64, int, struct pt_regs *, u64);
|
||||
extern atomic_t perf_swcounter_enabled[PERF_COUNT_SW_MAX];
|
||||
|
||||
extern void __perf_swcounter_event(u32, u64, int, struct pt_regs *, u64);
|
||||
|
||||
static inline void
|
||||
perf_swcounter_event(u32 event, u64 nr, int nmi, struct pt_regs *regs, u64 addr)
|
||||
{
|
||||
if (atomic_read(&perf_swcounter_enabled[event]))
|
||||
__perf_swcounter_event(event, nr, nmi, regs, addr);
|
||||
}
|
||||
|
||||
extern void __perf_counter_mmap(struct vm_area_struct *vma);
|
||||
|
||||
|
|
|
|||
|
|
@ -83,4 +83,78 @@ extern int posix_acl_chmod_masq(struct posix_acl *, mode_t);
|
|||
extern struct posix_acl *get_posix_acl(struct inode *, int);
|
||||
extern int set_posix_acl(struct inode *, int, struct posix_acl *);
|
||||
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
static inline struct posix_acl *get_cached_acl(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl **p, *acl;
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
p = &inode->i_acl;
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
p = &inode->i_default_acl;
|
||||
break;
|
||||
default:
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
acl = ACCESS_ONCE(*p);
|
||||
if (acl) {
|
||||
spin_lock(&inode->i_lock);
|
||||
acl = *p;
|
||||
if (acl != ACL_NOT_CACHED)
|
||||
acl = posix_acl_dup(acl);
|
||||
spin_unlock(&inode->i_lock);
|
||||
}
|
||||
return acl;
|
||||
}
|
||||
|
||||
static inline void set_cached_acl(struct inode *inode,
|
||||
int type,
|
||||
struct posix_acl *acl)
|
||||
{
|
||||
struct posix_acl *old = NULL;
|
||||
spin_lock(&inode->i_lock);
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
old = inode->i_acl;
|
||||
inode->i_acl = posix_acl_dup(acl);
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
old = inode->i_default_acl;
|
||||
inode->i_default_acl = posix_acl_dup(acl);
|
||||
break;
|
||||
}
|
||||
spin_unlock(&inode->i_lock);
|
||||
if (old != ACL_NOT_CACHED)
|
||||
posix_acl_release(old);
|
||||
}
|
||||
|
||||
static inline void forget_cached_acl(struct inode *inode, int type)
|
||||
{
|
||||
struct posix_acl *old = NULL;
|
||||
spin_lock(&inode->i_lock);
|
||||
switch (type) {
|
||||
case ACL_TYPE_ACCESS:
|
||||
old = inode->i_acl;
|
||||
inode->i_acl = ACL_NOT_CACHED;
|
||||
break;
|
||||
case ACL_TYPE_DEFAULT:
|
||||
old = inode->i_default_acl;
|
||||
inode->i_default_acl = ACL_NOT_CACHED;
|
||||
break;
|
||||
}
|
||||
spin_unlock(&inode->i_lock);
|
||||
if (old != ACL_NOT_CACHED)
|
||||
posix_acl_release(old);
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline void cache_no_acl(struct inode *inode)
|
||||
{
|
||||
#ifdef CONFIG_FS_POSIX_ACL
|
||||
inode->i_acl = NULL;
|
||||
inode->i_default_acl = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif /* __LINUX_POSIX_ACL_H */
|
||||
|
|
|
|||
|
|
@ -56,15 +56,6 @@ int reiserfs_cache_default_acl(struct inode *dir);
|
|||
extern struct xattr_handler reiserfs_posix_acl_default_handler;
|
||||
extern struct xattr_handler reiserfs_posix_acl_access_handler;
|
||||
|
||||
static inline void reiserfs_init_acl_access(struct inode *inode)
|
||||
{
|
||||
REISERFS_I(inode)->i_acl_access = NULL;
|
||||
}
|
||||
|
||||
static inline void reiserfs_init_acl_default(struct inode *inode)
|
||||
{
|
||||
REISERFS_I(inode)->i_acl_default = NULL;
|
||||
}
|
||||
#else
|
||||
|
||||
#define reiserfs_cache_default_acl(inode) 0
|
||||
|
|
@ -86,12 +77,4 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th,
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void reiserfs_init_acl_access(struct inode *inode)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void reiserfs_init_acl_default(struct inode *inode)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -54,10 +54,6 @@ struct reiserfs_inode_info {
|
|||
unsigned int i_trans_id;
|
||||
struct reiserfs_journal_list *i_jl;
|
||||
struct mutex i_mmap;
|
||||
#ifdef CONFIG_REISERFS_FS_POSIX_ACL
|
||||
struct posix_acl *i_acl_access;
|
||||
struct posix_acl *i_acl_default;
|
||||
#endif
|
||||
#ifdef CONFIG_REISERFS_FS_XATTR
|
||||
struct rw_semaphore i_xattr_sem;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -160,8 +160,9 @@ struct rfkill * __must_check rfkill_alloc(const char *name,
|
|||
* the rfkill structure. Before calling this function the driver needs
|
||||
* to be ready to service method calls from rfkill.
|
||||
*
|
||||
* If the software blocked state is not set before registration,
|
||||
* set_block will be called to initialize it to a default value.
|
||||
* If rfkill_init_sw_state() is not called before registration,
|
||||
* set_block() will be called to initialize the software blocked state
|
||||
* to a default value.
|
||||
*
|
||||
* If the hardware blocked state is not set before registration,
|
||||
* it is assumed to be unblocked.
|
||||
|
|
@ -234,9 +235,11 @@ bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked);
|
|||
* rfkill drivers that get events when the soft-blocked state changes
|
||||
* (yes, some platforms directly act on input but allow changing again)
|
||||
* use this function to notify the rfkill core (and through that also
|
||||
* userspace) of the current state. It is not necessary to notify on
|
||||
* resume; since hibernation can always change the soft-blocked state,
|
||||
* the rfkill core will unconditionally restore the previous state.
|
||||
* userspace) of the current state.
|
||||
*
|
||||
* Drivers should also call this function after resume if the state has
|
||||
* been changed by the user. This only makes sense for "persistent"
|
||||
* devices (see rfkill_init_sw_state()).
|
||||
*
|
||||
* This function can be called in any context, even from within rfkill
|
||||
* callbacks.
|
||||
|
|
@ -246,6 +249,22 @@ bool __must_check rfkill_set_hw_state(struct rfkill *rfkill, bool blocked);
|
|||
*/
|
||||
bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked);
|
||||
|
||||
/**
|
||||
* rfkill_init_sw_state - Initialize persistent software block state
|
||||
* @rfkill: pointer to the rfkill class to modify.
|
||||
* @state: the current software block state to set
|
||||
*
|
||||
* rfkill drivers that preserve their software block state over power off
|
||||
* use this function to notify the rfkill core (and through that also
|
||||
* userspace) of their initial state. It should only be used before
|
||||
* registration.
|
||||
*
|
||||
* In addition, it marks the device as "persistent", an attribute which
|
||||
* can be read by userspace. Persistent devices are expected to preserve
|
||||
* their own state when suspended.
|
||||
*/
|
||||
void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked);
|
||||
|
||||
/**
|
||||
* rfkill_set_states - Set the internal rfkill block states
|
||||
* @rfkill: pointer to the rfkill class to modify.
|
||||
|
|
@ -307,6 +326,10 @@ static inline bool rfkill_set_sw_state(struct rfkill *rfkill, bool blocked)
|
|||
return blocked;
|
||||
}
|
||||
|
||||
static inline void rfkill_init_sw_state(struct rfkill *rfkill, bool blocked)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void rfkill_set_states(struct rfkill *rfkill, bool sw, bool hw)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,14 @@ int try_to_munlock(struct page *);
|
|||
#define anon_vma_prepare(vma) (0)
|
||||
#define anon_vma_link(vma) do {} while (0)
|
||||
|
||||
#define page_referenced(page, locked, cnt, flags) TestClearPageReferenced(page)
|
||||
static inline int page_referenced(struct page *page, int is_locked,
|
||||
struct mem_cgroup *cnt,
|
||||
unsigned long *vm_flags)
|
||||
{
|
||||
*vm_flags = 0;
|
||||
return TestClearPageReferenced(page);
|
||||
}
|
||||
|
||||
#define try_to_unmap(page, refs) SWAP_FAIL
|
||||
|
||||
static inline int page_mkclean(struct page *page)
|
||||
|
|
|
|||
|
|
@ -349,8 +349,20 @@ extern int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner);
|
|||
struct nsproxy;
|
||||
struct user_namespace;
|
||||
|
||||
/* Maximum number of active map areas.. This is a random (large) number */
|
||||
#define DEFAULT_MAX_MAP_COUNT 65536
|
||||
/*
|
||||
* Default maximum number of active map areas, this limits the number of vmas
|
||||
* per mm struct. Users can overwrite this number by sysctl but there is a
|
||||
* problem.
|
||||
*
|
||||
* When a program's coredump is generated as ELF format, a section is created
|
||||
* per a vma. In ELF, the number of sections is represented in unsigned short.
|
||||
* This means the number of sections should be smaller than 65535 at coredump.
|
||||
* Because the kernel adds some informative sections to a image of program at
|
||||
* generating coredump, we need some margin. The number of extra sections is
|
||||
* 1-3 now and depends on arch. We use "5" as safe margin, here.
|
||||
*/
|
||||
#define MAPCOUNT_ELF_CORE_MARGIN (5)
|
||||
#define DEFAULT_MAX_MAP_COUNT (USHORT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
|
|
|
|||
|
|
@ -171,6 +171,9 @@
|
|||
/* Timberdale UART */
|
||||
#define PORT_TIMBUART 87
|
||||
|
||||
/* Qualcomm MSM SoCs */
|
||||
#define PORT_MSM 88
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@
|
|||
#define UART_OMAP_MVER 0x14 /* Module version register */
|
||||
#define UART_OMAP_SYSC 0x15 /* System configuration register */
|
||||
#define UART_OMAP_SYSS 0x16 /* System status register */
|
||||
#define UART_OMAP_WER 0x17 /* Wake-up enable register */
|
||||
|
||||
#endif /* _LINUX_SERIAL_REG_H */
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,6 @@ struct shmem_inode_info {
|
|||
swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* first blocks */
|
||||
struct list_head swaplist; /* chain of maybes on swap */
|
||||
struct inode vfs_inode;
|
||||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
struct posix_acl *i_acl;
|
||||
struct posix_acl *i_default_acl;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct shmem_sb_info {
|
||||
|
|
@ -45,7 +41,6 @@ static inline struct shmem_inode_info *SHMEM_I(struct inode *inode)
|
|||
#ifdef CONFIG_TMPFS_POSIX_ACL
|
||||
int shmem_permission(struct inode *, int);
|
||||
int shmem_acl_init(struct inode *, struct inode *);
|
||||
void shmem_acl_destroy_inode(struct inode *);
|
||||
|
||||
extern struct xattr_handler shmem_xattr_acl_access_handler;
|
||||
extern struct xattr_handler shmem_xattr_acl_default_handler;
|
||||
|
|
@ -57,9 +52,6 @@ static inline int shmem_acl_init(struct inode *inode, struct inode *dir)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void shmem_acl_destroy_inode(struct inode *inode)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_TMPFS_POSIX_ACL */
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -80,6 +80,8 @@ struct spi_device {
|
|||
#define SPI_LSB_FIRST 0x08 /* per-word bits-on-wire */
|
||||
#define SPI_3WIRE 0x10 /* SI/SO signals shared */
|
||||
#define SPI_LOOP 0x20 /* loopback mode */
|
||||
#define SPI_NO_CS 0x40 /* 1 dev/bus, no chipselect */
|
||||
#define SPI_READY 0x80 /* slave pulls low to pause */
|
||||
u8 bits_per_word;
|
||||
int irq;
|
||||
void *controller_state;
|
||||
|
|
@ -248,6 +250,10 @@ struct spi_master {
|
|||
/* spi_device.mode flags understood by this controller driver */
|
||||
u16 mode_bits;
|
||||
|
||||
/* other constraints relevant to this driver */
|
||||
u16 flags;
|
||||
#define SPI_MASTER_HALF_DUPLEX BIT(0) /* can't do full duplex */
|
||||
|
||||
/* Setup mode and clock, etc (spi driver may call many times).
|
||||
*
|
||||
* IMPORTANT: this may be called when transfers to another
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@
|
|||
#define SPI_LSB_FIRST 0x08
|
||||
#define SPI_3WIRE 0x10
|
||||
#define SPI_LOOP 0x20
|
||||
#define SPI_NO_CS 0x40
|
||||
#define SPI_READY 0x80
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
|
|
|
|||
49
include/linux/sunrpc/bc_xprt.h
Normal file
49
include/linux/sunrpc/bc_xprt.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/******************************************************************************
|
||||
|
||||
(c) 2008 NetApp. All Rights Reserved.
|
||||
|
||||
NetApp provides this source code under the GPL v2 License.
|
||||
The GPL v2 license is available at
|
||||
http://opensource.org/licenses/gpl-license.php.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
* Functions to create and manage the backchannel
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_SUNRPC_BC_XPRT_H
|
||||
#define _LINUX_SUNRPC_BC_XPRT_H
|
||||
|
||||
#include <linux/sunrpc/svcsock.h>
|
||||
#include <linux/sunrpc/xprt.h>
|
||||
#include <linux/sunrpc/sched.h>
|
||||
|
||||
#ifdef CONFIG_NFS_V4_1
|
||||
struct rpc_rqst *xprt_alloc_bc_request(struct rpc_xprt *xprt);
|
||||
void xprt_free_bc_request(struct rpc_rqst *req);
|
||||
int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
|
||||
void xprt_destroy_backchannel(struct rpc_xprt *, int max_reqs);
|
||||
void bc_release_request(struct rpc_task *);
|
||||
int bc_send(struct rpc_rqst *req);
|
||||
#else /* CONFIG_NFS_V4_1 */
|
||||
static inline int xprt_setup_backchannel(struct rpc_xprt *xprt,
|
||||
unsigned int min_reqs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
#endif /* _LINUX_SUNRPC_BC_XPRT_H */
|
||||
|
||||
|
|
@ -143,6 +143,7 @@ int rpc_call_sync(struct rpc_clnt *clnt,
|
|||
const struct rpc_message *msg, int flags);
|
||||
struct rpc_task *rpc_call_null(struct rpc_clnt *clnt, struct rpc_cred *cred,
|
||||
int flags);
|
||||
void rpc_restart_call_prepare(struct rpc_task *);
|
||||
void rpc_restart_call(struct rpc_task *);
|
||||
void rpc_setbufsize(struct rpc_clnt *, unsigned int, unsigned int);
|
||||
size_t rpc_max_payload(struct rpc_clnt *);
|
||||
|
|
|
|||
|
|
@ -210,6 +210,8 @@ struct rpc_wait_queue {
|
|||
*/
|
||||
struct rpc_task *rpc_new_task(const struct rpc_task_setup *);
|
||||
struct rpc_task *rpc_run_task(const struct rpc_task_setup *);
|
||||
struct rpc_task *rpc_run_bc_task(struct rpc_rqst *req,
|
||||
const struct rpc_call_ops *ops);
|
||||
void rpc_put_task(struct rpc_task *);
|
||||
void rpc_exit_task(struct rpc_task *);
|
||||
void rpc_release_calldata(const struct rpc_call_ops *, void *);
|
||||
|
|
@ -237,6 +239,7 @@ void rpc_show_tasks(void);
|
|||
int rpc_init_mempool(void);
|
||||
void rpc_destroy_mempool(void);
|
||||
extern struct workqueue_struct *rpciod_workqueue;
|
||||
void rpc_prepare_task(struct rpc_task *task);
|
||||
|
||||
static inline void rpc_exit(struct rpc_task *task, int status)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -96,6 +96,15 @@ struct svc_serv {
|
|||
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 */
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
struct list_head sv_cb_list; /* queue for callback requests
|
||||
* that arrive over the same
|
||||
* connection */
|
||||
spinlock_t sv_cb_lock; /* protects the svc_cb_list */
|
||||
wait_queue_head_t sv_cb_waitq; /* sleep here if there are no
|
||||
* entries in the svc_cb_list */
|
||||
struct svc_xprt *bc_xprt;
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -411,6 +420,8 @@ 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 bc_svc_process(struct svc_serv *, struct rpc_rqst *,
|
||||
struct svc_rqst *);
|
||||
int svc_register(const struct svc_serv *, const int,
|
||||
const unsigned short, const unsigned short);
|
||||
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ int svc_port_is_privileged(struct sockaddr *sin);
|
|||
int svc_print_xprts(char *buf, int maxlen);
|
||||
struct svc_xprt *svc_find_xprt(struct svc_serv *serv, const char *xcl_name,
|
||||
const sa_family_t af, const unsigned short port);
|
||||
int svc_xprt_names(struct svc_serv *serv, char *buf, int buflen);
|
||||
int svc_xprt_names(struct svc_serv *serv, char *buf, const int buflen);
|
||||
|
||||
static inline void svc_xprt_get(struct svc_xprt *xprt)
|
||||
{
|
||||
|
|
@ -118,7 +118,7 @@ static inline unsigned short svc_addr_port(const struct sockaddr *sa)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline size_t svc_addr_len(struct sockaddr *sa)
|
||||
static inline size_t svc_addr_len(const struct sockaddr *sa)
|
||||
{
|
||||
switch (sa->sa_family) {
|
||||
case AF_INET:
|
||||
|
|
@ -126,7 +126,8 @@ static inline size_t svc_addr_len(struct sockaddr *sa)
|
|||
case AF_INET6:
|
||||
return sizeof(struct sockaddr_in6);
|
||||
}
|
||||
return -EAFNOSUPPORT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline unsigned short svc_xprt_local_port(const struct svc_xprt *xprt)
|
||||
|
|
|
|||
|
|
@ -38,10 +38,15 @@ int svc_recv(struct svc_rqst *, long);
|
|||
int svc_send(struct svc_rqst *);
|
||||
void svc_drop(struct svc_rqst *);
|
||||
void svc_sock_update_bufs(struct svc_serv *serv);
|
||||
int svc_sock_names(char *buf, struct svc_serv *serv, char *toclose);
|
||||
int svc_addsock(struct svc_serv *serv, int fd, char *name_return);
|
||||
int svc_sock_names(struct svc_serv *serv, char *buf,
|
||||
const size_t buflen,
|
||||
const char *toclose);
|
||||
int svc_addsock(struct svc_serv *serv, const int fd,
|
||||
char *name_return, const size_t len);
|
||||
void svc_init_xprt_sock(void);
|
||||
void svc_cleanup_xprt_sock(void);
|
||||
struct svc_xprt *svc_sock_create(struct svc_serv *serv, int prot);
|
||||
void svc_sock_destroy(struct svc_xprt *);
|
||||
|
||||
/*
|
||||
* svc_makesock socket characteristics
|
||||
|
|
|
|||
|
|
@ -67,7 +67,8 @@ struct rpc_rqst {
|
|||
struct rpc_task * rq_task; /* RPC task data */
|
||||
__be32 rq_xid; /* request XID */
|
||||
int rq_cong; /* has incremented xprt->cong */
|
||||
int rq_received; /* receive completed */
|
||||
int rq_reply_bytes_recvd; /* number of reply */
|
||||
/* bytes received */
|
||||
u32 rq_seqno; /* gss seq no. used on req. */
|
||||
int rq_enc_pages_num;
|
||||
struct page **rq_enc_pages; /* scratch pages for use by
|
||||
|
|
@ -97,6 +98,12 @@ struct rpc_rqst {
|
|||
|
||||
unsigned long rq_xtime; /* when transmitted */
|
||||
int rq_ntrans;
|
||||
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
struct list_head rq_bc_list; /* Callback service list */
|
||||
unsigned long rq_bc_pa_state; /* Backchannel prealloc state */
|
||||
struct list_head rq_bc_pa_list; /* Backchannel prealloc list */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
};
|
||||
#define rq_svec rq_snd_buf.head
|
||||
#define rq_slen rq_snd_buf.len
|
||||
|
|
@ -174,6 +181,15 @@ struct rpc_xprt {
|
|||
spinlock_t reserve_lock; /* lock slot table */
|
||||
u32 xid; /* Next XID value to use */
|
||||
struct rpc_task * snd_task; /* Task blocked in send */
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
struct svc_serv *bc_serv; /* The RPC service which will */
|
||||
/* process the callback */
|
||||
unsigned int bc_alloc_count; /* Total number of preallocs */
|
||||
spinlock_t bc_pa_lock; /* Protects the preallocated
|
||||
* items */
|
||||
struct list_head bc_pa_list; /* List of preallocated
|
||||
* backchannel rpc_rqst's */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
struct list_head recv;
|
||||
|
||||
struct {
|
||||
|
|
@ -192,6 +208,26 @@ struct rpc_xprt {
|
|||
const char *address_strings[RPC_DISPLAY_MAX];
|
||||
};
|
||||
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
/*
|
||||
* Backchannel flags
|
||||
*/
|
||||
#define RPC_BC_PA_IN_USE 0x0001 /* Preallocated backchannel */
|
||||
/* buffer in use */
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
#if defined(CONFIG_NFS_V4_1)
|
||||
static inline int bc_prealloc(struct rpc_rqst *req)
|
||||
{
|
||||
return test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state);
|
||||
}
|
||||
#else
|
||||
static inline int bc_prealloc(struct rpc_rqst *req)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
|
||||
struct xprt_create {
|
||||
int ident; /* XPRT_TRANSPORT identifier */
|
||||
struct sockaddr * srcaddr; /* optional local address */
|
||||
|
|
|
|||
|
|
@ -298,8 +298,8 @@ extern int try_to_free_swap(struct page *);
|
|||
struct backing_dev_info;
|
||||
|
||||
/* linux/mm/thrash.c */
|
||||
extern struct mm_struct * swap_token_mm;
|
||||
extern void grab_swap_token(void);
|
||||
extern struct mm_struct *swap_token_mm;
|
||||
extern void grab_swap_token(struct mm_struct *);
|
||||
extern void __put_swap_token(struct mm_struct *);
|
||||
|
||||
static inline int has_swap_token(struct mm_struct *mm)
|
||||
|
|
@ -419,10 +419,10 @@ static inline swp_entry_t get_swap_page(void)
|
|||
}
|
||||
|
||||
/* linux/mm/thrash.c */
|
||||
#define put_swap_token(x) do { } while(0)
|
||||
#define grab_swap_token() do { } while(0)
|
||||
#define has_swap_token(x) 0
|
||||
#define disable_swap_token() do { } while(0)
|
||||
#define put_swap_token(mm) do { } while (0)
|
||||
#define grab_swap_token(mm) do { } while (0)
|
||||
#define has_swap_token(mm) 0
|
||||
#define disable_swap_token() do { } while (0)
|
||||
|
||||
static inline void
|
||||
mem_cgroup_uncharge_swapcache(struct page *page, swp_entry_t ent)
|
||||
|
|
|
|||
|
|
@ -190,6 +190,8 @@ extern unsigned long get_next_timer_interrupt(unsigned long now);
|
|||
*/
|
||||
#ifdef CONFIG_TIMER_STATS
|
||||
|
||||
extern int timer_stats_active;
|
||||
|
||||
#define TIMER_STATS_FLAG_DEFERRABLE 0x1
|
||||
|
||||
extern void init_timer_stats(void);
|
||||
|
|
@ -203,6 +205,8 @@ extern void __timer_stats_timer_set_start_info(struct timer_list *timer,
|
|||
|
||||
static inline void timer_stats_timer_set_start_info(struct timer_list *timer)
|
||||
{
|
||||
if (likely(!timer_stats_active))
|
||||
return;
|
||||
__timer_stats_timer_set_start_info(timer, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ struct usbnet {
|
|||
|
||||
/* protocol/interface state */
|
||||
struct net_device *net;
|
||||
struct net_device_stats stats;
|
||||
int msg_enable;
|
||||
unsigned long data [5];
|
||||
u32 xid;
|
||||
|
|
|
|||
|
|
@ -348,6 +348,7 @@ struct v4l2_pix_format {
|
|||
#define V4L2_PIX_FMT_SQ905C v4l2_fourcc('9', '0', '5', 'C') /* compressed RGGB bayer */
|
||||
#define V4L2_PIX_FMT_PJPG v4l2_fourcc('P', 'J', 'P', 'G') /* Pixart 73xx JPEG */
|
||||
#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
|
||||
#define V4L2_PIX_FMT_OV511 v4l2_fourcc('O', '5', '1', '1') /* ov511 JPEG */
|
||||
#define V4L2_PIX_FMT_OV518 v4l2_fourcc('O', '5', '1', '8') /* ov518 JPEG */
|
||||
|
||||
/*
|
||||
|
|
@ -894,9 +895,10 @@ enum v4l2_colorfx {
|
|||
V4L2_COLORFX_BW = 1,
|
||||
V4L2_COLORFX_SEPIA = 2,
|
||||
};
|
||||
#define V4L2_CID_AUTOBRIGHTNESS (V4L2_CID_BASE+32)
|
||||
|
||||
/* last CID + 1 */
|
||||
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+32)
|
||||
#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33)
|
||||
|
||||
/* MPEG-class control IDs defined by V4L2 */
|
||||
#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900)
|
||||
|
|
|
|||
Loading…
Reference in a new issue