Merge commit 'v2.6.27' into timers/hpet
This commit is contained in:
@@ -745,7 +745,7 @@ static inline int ata_ok(u8 status)
|
||||
static inline int lba_28_ok(u64 block, u32 n_block)
|
||||
{
|
||||
/* check the ending block number */
|
||||
return ((block + n_block - 1) < ((u64)1 << 28)) && (n_block <= 256);
|
||||
return ((block + n_block) < ((u64)1 << 28)) && (n_block <= 256);
|
||||
}
|
||||
|
||||
static inline int lba_48_ok(u64 block, u32 n_block)
|
||||
|
@@ -843,8 +843,6 @@ extern int blkdev_issue_flush(struct block_device *, sector_t *);
|
||||
*/
|
||||
extern int blk_verify_command(struct blk_cmd_filter *filter,
|
||||
unsigned char *cmd, int has_write_perm);
|
||||
extern int blk_register_filter(struct gendisk *disk);
|
||||
extern void blk_unregister_filter(struct gendisk *disk);
|
||||
extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter);
|
||||
|
||||
#define MAX_PHYS_SEGMENTS 128
|
||||
|
80
include/linux/cnt32_to_63.h
Normal file
80
include/linux/cnt32_to_63.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Extend a 32-bit counter to 63 bits
|
||||
*
|
||||
* Author: Nicolas Pitre
|
||||
* Created: December 3, 2006
|
||||
* Copyright: MontaVista Software, Inc.
|
||||
*
|
||||
* 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_CNT32_TO_63_H__
|
||||
#define __LINUX_CNT32_TO_63_H__
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
/* this is used only to give gcc a clue about good code generation */
|
||||
union cnt32_to_63 {
|
||||
struct {
|
||||
#if defined(__LITTLE_ENDIAN)
|
||||
u32 lo, hi;
|
||||
#elif defined(__BIG_ENDIAN)
|
||||
u32 hi, lo;
|
||||
#endif
|
||||
};
|
||||
u64 val;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* cnt32_to_63 - Expand a 32-bit counter to a 63-bit counter
|
||||
* @cnt_lo: The low part of the counter
|
||||
*
|
||||
* Many hardware clock counters are only 32 bits wide and therefore have
|
||||
* a relatively short period making wrap-arounds rather frequent. This
|
||||
* is a problem when implementing sched_clock() for example, where a 64-bit
|
||||
* non-wrapping monotonic value is expected to be returned.
|
||||
*
|
||||
* To overcome that limitation, let's extend a 32-bit counter to 63 bits
|
||||
* in a completely lock free fashion. Bits 0 to 31 of the clock are provided
|
||||
* by the hardware while bits 32 to 62 are stored in memory. The top bit in
|
||||
* memory is used to synchronize with the hardware clock half-period. When
|
||||
* the top bit of both counters (hardware and in memory) differ then the
|
||||
* memory is updated with a new value, incrementing it when the hardware
|
||||
* counter wraps around.
|
||||
*
|
||||
* Because a word store in memory is atomic then the incremented value will
|
||||
* always be in synch with the top bit indicating to any potential concurrent
|
||||
* reader if the value in memory is up to date or not with regards to the
|
||||
* needed increment. And any race in updating the value in memory is harmless
|
||||
* as the same value would simply be stored more than once.
|
||||
*
|
||||
* The only restriction for the algorithm to work properly is that this
|
||||
* code must be executed at least once per each half period of the 32-bit
|
||||
* counter to properly update the state bit in memory. This is usually not a
|
||||
* problem in practice, but if it is then a kernel timer could be scheduled
|
||||
* to manage for this code to be executed often enough.
|
||||
*
|
||||
* Note that the top bit (bit 63) in the returned value should be considered
|
||||
* as garbage. It is not cleared here because callers are likely to use a
|
||||
* multiplier on the returned value which can get rid of the top bit
|
||||
* implicitly by making the multiplier even, therefore saving on a runtime
|
||||
* clear-bit instruction. Otherwise caller must remember to clear the top
|
||||
* bit explicitly.
|
||||
*/
|
||||
#define cnt32_to_63(cnt_lo) \
|
||||
({ \
|
||||
static volatile u32 __m_cnt_hi; \
|
||||
union cnt32_to_63 __x; \
|
||||
__x.hi = __m_cnt_hi; \
|
||||
__x.lo = (cnt_lo); \
|
||||
if (unlikely((s32)(__x.hi ^ __x.lo) < 0)) \
|
||||
__m_cnt_hi = __x.hi = (__x.hi ^ 0x80000000) + (__x.hi >> 31); \
|
||||
__x.val; \
|
||||
})
|
||||
|
||||
#endif
|
@@ -47,14 +47,22 @@ enum hrtimer_restart {
|
||||
* HRTIMER_CB_IRQSAFE: Callback may run in hardirq context
|
||||
* HRTIMER_CB_IRQSAFE_NO_RESTART: Callback may run in hardirq context and
|
||||
* does not restart the timer
|
||||
* HRTIMER_CB_IRQSAFE_NO_SOFTIRQ: Callback must run in hardirq context
|
||||
* Special mode for tick emultation
|
||||
* HRTIMER_CB_IRQSAFE_PERCPU: Callback must run in hardirq context
|
||||
* Special mode for tick emulation and
|
||||
* scheduler timer. Such timers are per
|
||||
* cpu and not allowed to be migrated on
|
||||
* cpu unplug.
|
||||
* HRTIMER_CB_IRQSAFE_UNLOCKED: Callback should run in hardirq context
|
||||
* with timer->base lock unlocked
|
||||
* used for timers which call wakeup to
|
||||
* avoid lock order problems with rq->lock
|
||||
*/
|
||||
enum hrtimer_cb_mode {
|
||||
HRTIMER_CB_SOFTIRQ,
|
||||
HRTIMER_CB_IRQSAFE,
|
||||
HRTIMER_CB_IRQSAFE_NO_RESTART,
|
||||
HRTIMER_CB_IRQSAFE_NO_SOFTIRQ,
|
||||
HRTIMER_CB_IRQSAFE_PERCPU,
|
||||
HRTIMER_CB_IRQSAFE_UNLOCKED,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -67,9 +75,10 @@ enum hrtimer_cb_mode {
|
||||
* 0x02 callback function running
|
||||
* 0x04 callback pending (high resolution mode)
|
||||
*
|
||||
* Special case:
|
||||
* Special cases:
|
||||
* 0x03 callback function running and enqueued
|
||||
* (was requeued on another CPU)
|
||||
* 0x09 timer was migrated on CPU hotunplug
|
||||
* The "callback function running and enqueued" status is only possible on
|
||||
* SMP. It happens for example when a posix timer expired and the callback
|
||||
* queued a signal. Between dropping the lock which protects the posix timer
|
||||
@@ -87,6 +96,7 @@ enum hrtimer_cb_mode {
|
||||
#define HRTIMER_STATE_ENQUEUED 0x01
|
||||
#define HRTIMER_STATE_CALLBACK 0x02
|
||||
#define HRTIMER_STATE_PENDING 0x04
|
||||
#define HRTIMER_STATE_MIGRATE 0x08
|
||||
|
||||
/**
|
||||
* struct hrtimer - the basic hrtimer structure
|
||||
|
@@ -366,7 +366,9 @@ enum {
|
||||
/* Currently on a filemark */
|
||||
IDE_AFLAG_FILEMARK = (1 << 25),
|
||||
/* 0 = no tape is loaded, so we don't rewind after ejecting */
|
||||
IDE_AFLAG_MEDIUM_PRESENT = (1 << 26)
|
||||
IDE_AFLAG_MEDIUM_PRESENT = (1 << 26),
|
||||
|
||||
IDE_AFLAG_NO_AUTOCLOSE = (1 << 27),
|
||||
};
|
||||
|
||||
struct ide_drive_s {
|
||||
|
@@ -159,9 +159,9 @@ extern struct resource * __devm_request_region(struct device *dev,
|
||||
struct resource *parent, resource_size_t start,
|
||||
resource_size_t n, const char *name);
|
||||
|
||||
#define devm_release_region(start,n) \
|
||||
#define devm_release_region(dev, start, n) \
|
||||
__devm_release_region(dev, &ioport_resource, (start), (n))
|
||||
#define devm_release_mem_region(start,n) \
|
||||
#define devm_release_mem_region(dev, start, n) \
|
||||
__devm_release_region(dev, &iomem_resource, (start), (n))
|
||||
|
||||
extern void __devm_release_region(struct device *dev, struct resource *parent,
|
||||
|
@@ -21,30 +21,30 @@
|
||||
struct ms_status_register {
|
||||
unsigned char reserved;
|
||||
unsigned char interrupt;
|
||||
#define MEMSTICK_INT_CMDNAK 0x0001
|
||||
#define MEMSTICK_INT_IOREQ 0x0008
|
||||
#define MEMSTICK_INT_IOBREQ 0x0010
|
||||
#define MEMSTICK_INT_BREQ 0x0020
|
||||
#define MEMSTICK_INT_ERR 0x0040
|
||||
#define MEMSTICK_INT_CED 0x0080
|
||||
#define MEMSTICK_INT_CMDNAK 0x01
|
||||
#define MEMSTICK_INT_IOREQ 0x08
|
||||
#define MEMSTICK_INT_IOBREQ 0x10
|
||||
#define MEMSTICK_INT_BREQ 0x20
|
||||
#define MEMSTICK_INT_ERR 0x40
|
||||
#define MEMSTICK_INT_CED 0x80
|
||||
|
||||
unsigned char status0;
|
||||
#define MEMSTICK_STATUS0_WP 0x0001
|
||||
#define MEMSTICK_STATUS0_SL 0x0002
|
||||
#define MEMSTICK_STATUS0_BF 0x0010
|
||||
#define MEMSTICK_STATUS0_BE 0x0020
|
||||
#define MEMSTICK_STATUS0_FB0 0x0040
|
||||
#define MEMSTICK_STATUS0_MB 0x0080
|
||||
#define MEMSTICK_STATUS0_WP 0x01
|
||||
#define MEMSTICK_STATUS0_SL 0x02
|
||||
#define MEMSTICK_STATUS0_BF 0x10
|
||||
#define MEMSTICK_STATUS0_BE 0x20
|
||||
#define MEMSTICK_STATUS0_FB0 0x40
|
||||
#define MEMSTICK_STATUS0_MB 0x80
|
||||
|
||||
unsigned char status1;
|
||||
#define MEMSTICK_STATUS1_UCFG 0x0001
|
||||
#define MEMSTICK_STATUS1_FGER 0x0002
|
||||
#define MEMSTICK_STATUS1_UCEX 0x0004
|
||||
#define MEMSTICK_STATUS1_EXER 0x0008
|
||||
#define MEMSTICK_STATUS1_UCDT 0x0010
|
||||
#define MEMSTICK_STATUS1_DTER 0x0020
|
||||
#define MEMSTICK_STATUS1_FBI 0x0040
|
||||
#define MEMSTICK_STATUS1_MB 0x0080
|
||||
#define MEMSTICK_STATUS1_UCFG 0x01
|
||||
#define MEMSTICK_STATUS1_FGER 0x02
|
||||
#define MEMSTICK_STATUS1_UCEX 0x04
|
||||
#define MEMSTICK_STATUS1_EXER 0x08
|
||||
#define MEMSTICK_STATUS1_UCDT 0x10
|
||||
#define MEMSTICK_STATUS1_DTER 0x20
|
||||
#define MEMSTICK_STATUS1_FB1 0x40
|
||||
#define MEMSTICK_STATUS1_MB 0x80
|
||||
} __attribute__((packed));
|
||||
|
||||
struct ms_id_register {
|
||||
@@ -56,32 +56,32 @@ struct ms_id_register {
|
||||
|
||||
struct ms_param_register {
|
||||
unsigned char system;
|
||||
#define MEMSTICK_SYS_ATEN 0xc0
|
||||
#define MEMSTICK_SYS_BAMD 0x80
|
||||
#define MEMSTICK_SYS_PAM 0x08
|
||||
#define MEMSTICK_SYS_BAMD 0x80
|
||||
|
||||
unsigned char block_address_msb;
|
||||
unsigned short block_address;
|
||||
unsigned char cp;
|
||||
#define MEMSTICK_CP_BLOCK 0x0000
|
||||
#define MEMSTICK_CP_PAGE 0x0020
|
||||
#define MEMSTICK_CP_EXTRA 0x0040
|
||||
#define MEMSTICK_CP_OVERWRITE 0x0080
|
||||
#define MEMSTICK_CP_BLOCK 0x00
|
||||
#define MEMSTICK_CP_PAGE 0x20
|
||||
#define MEMSTICK_CP_EXTRA 0x40
|
||||
#define MEMSTICK_CP_OVERWRITE 0x80
|
||||
|
||||
unsigned char page_address;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct ms_extra_data_register {
|
||||
unsigned char overwrite_flag;
|
||||
#define MEMSTICK_OVERWRITE_UPDATA 0x0010
|
||||
#define MEMSTICK_OVERWRITE_PAGE 0x0060
|
||||
#define MEMSTICK_OVERWRITE_BLOCK 0x0080
|
||||
#define MEMSTICK_OVERWRITE_UDST 0x10
|
||||
#define MEMSTICK_OVERWRITE_PGST1 0x20
|
||||
#define MEMSTICK_OVERWRITE_PGST0 0x40
|
||||
#define MEMSTICK_OVERWRITE_BKST 0x80
|
||||
|
||||
unsigned char management_flag;
|
||||
#define MEMSTICK_MANAGEMENT_SYSTEM 0x0004
|
||||
#define MEMSTICK_MANAGEMENT_TRANS_TABLE 0x0008
|
||||
#define MEMSTICK_MANAGEMENT_COPY 0x0010
|
||||
#define MEMSTICK_MANAGEMENT_ACCESS 0x0020
|
||||
#define MEMSTICK_MANAGEMENT_SYSFLG 0x04
|
||||
#define MEMSTICK_MANAGEMENT_ATFLG 0x08
|
||||
#define MEMSTICK_MANAGEMENT_SCMS1 0x10
|
||||
#define MEMSTICK_MANAGEMENT_SCMS0 0x20
|
||||
|
||||
unsigned short logical_address;
|
||||
} __attribute__((packed));
|
||||
@@ -96,9 +96,9 @@ struct ms_register {
|
||||
|
||||
struct mspro_param_register {
|
||||
unsigned char system;
|
||||
#define MEMSTICK_SYS_SERIAL 0x80
|
||||
#define MEMSTICK_SYS_PAR4 0x00
|
||||
#define MEMSTICK_SYS_PAR8 0x40
|
||||
#define MEMSTICK_SYS_SERIAL 0x80
|
||||
|
||||
unsigned short data_count;
|
||||
unsigned int data_address;
|
||||
@@ -147,7 +147,7 @@ struct ms_register_addr {
|
||||
unsigned char w_length;
|
||||
} __attribute__((packed));
|
||||
|
||||
enum {
|
||||
enum memstick_tpc {
|
||||
MS_TPC_READ_MG_STATUS = 0x01,
|
||||
MS_TPC_READ_LONG_DATA = 0x02,
|
||||
MS_TPC_READ_SHORT_DATA = 0x03,
|
||||
@@ -167,7 +167,7 @@ enum {
|
||||
MS_TPC_SET_CMD = 0x0e
|
||||
};
|
||||
|
||||
enum {
|
||||
enum memstick_command {
|
||||
MS_CMD_BLOCK_END = 0x33,
|
||||
MS_CMD_RESET = 0x3c,
|
||||
MS_CMD_BLOCK_WRITE = 0x55,
|
||||
@@ -201,8 +201,6 @@ enum {
|
||||
|
||||
/*** Driver structures and functions ***/
|
||||
|
||||
#define MEMSTICK_PART_SHIFT 3
|
||||
|
||||
enum memstick_param { MEMSTICK_POWER = 1, MEMSTICK_INTERFACE };
|
||||
|
||||
#define MEMSTICK_POWER_OFF 0
|
||||
@@ -215,24 +213,27 @@ enum memstick_param { MEMSTICK_POWER = 1, MEMSTICK_INTERFACE };
|
||||
struct memstick_host;
|
||||
struct memstick_driver;
|
||||
|
||||
struct memstick_device_id {
|
||||
unsigned char match_flags;
|
||||
#define MEMSTICK_MATCH_ALL 0x01
|
||||
|
||||
unsigned char type;
|
||||
#define MEMSTICK_TYPE_LEGACY 0xff
|
||||
#define MEMSTICK_TYPE_DUO 0x00
|
||||
#define MEMSTICK_TYPE_PRO 0x01
|
||||
|
||||
unsigned char category;
|
||||
#define MEMSTICK_CATEGORY_STORAGE 0xff
|
||||
#define MEMSTICK_CATEGORY_STORAGE_DUO 0x00
|
||||
#define MEMSTICK_CATEGORY_IO 0x01
|
||||
#define MEMSTICK_CATEGORY_IO_PRO 0x10
|
||||
|
||||
#define MEMSTICK_CLASS_GENERIC 0xff
|
||||
#define MEMSTICK_CLASS_GENERIC_DUO 0x00
|
||||
|
||||
|
||||
struct memstick_device_id {
|
||||
unsigned char match_flags;
|
||||
unsigned char type;
|
||||
unsigned char category;
|
||||
unsigned char class;
|
||||
#define MEMSTICK_CLASS_FLASH 0xff
|
||||
#define MEMSTICK_CLASS_DUO 0x00
|
||||
#define MEMSTICK_CLASS_ROM 0x01
|
||||
#define MEMSTICK_CLASS_RO 0x02
|
||||
#define MEMSTICK_CLASS_WP 0x03
|
||||
};
|
||||
|
||||
struct memstick_request {
|
||||
@@ -319,9 +320,9 @@ void memstick_suspend_host(struct memstick_host *host);
|
||||
void memstick_resume_host(struct memstick_host *host);
|
||||
|
||||
void memstick_init_req_sg(struct memstick_request *mrq, unsigned char tpc,
|
||||
struct scatterlist *sg);
|
||||
const struct scatterlist *sg);
|
||||
void memstick_init_req(struct memstick_request *mrq, unsigned char tpc,
|
||||
void *buf, size_t length);
|
||||
const void *buf, size_t length);
|
||||
int memstick_next_req(struct memstick_host *host,
|
||||
struct memstick_request **mrq);
|
||||
void memstick_new_req(struct memstick_host *host);
|
||||
|
@@ -141,6 +141,10 @@ enum {
|
||||
MLX4_STAT_RATE_OFFSET = 5
|
||||
};
|
||||
|
||||
enum {
|
||||
MLX4_MTT_FLAG_PRESENT = 1
|
||||
};
|
||||
|
||||
static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)
|
||||
{
|
||||
return (major << 32) | (minor << 16) | subminor;
|
||||
|
@@ -751,8 +751,9 @@ static inline int zonelist_node_idx(struct zoneref *zoneref)
|
||||
*
|
||||
* This function returns the next zone at or below a given zone index that is
|
||||
* within the allowed nodemask using a cursor as the starting point for the
|
||||
* search. The zoneref returned is a cursor that is used as the next starting
|
||||
* point for future calls to next_zones_zonelist().
|
||||
* search. The zoneref returned is a cursor that represents the current zone
|
||||
* being examined. It should be advanced by one before calling
|
||||
* next_zones_zonelist again.
|
||||
*/
|
||||
struct zoneref *next_zones_zonelist(struct zoneref *z,
|
||||
enum zone_type highest_zoneidx,
|
||||
@@ -768,9 +769,8 @@ struct zoneref *next_zones_zonelist(struct zoneref *z,
|
||||
*
|
||||
* This function returns the first zone at or below a given zone index that is
|
||||
* within the allowed nodemask. The zoneref returned is a cursor that can be
|
||||
* used to iterate the zonelist with next_zones_zonelist. The cursor should
|
||||
* not be used by the caller as it does not match the value of the zone
|
||||
* returned.
|
||||
* used to iterate the zonelist with next_zones_zonelist by advancing it by
|
||||
* one before calling.
|
||||
*/
|
||||
static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
|
||||
enum zone_type highest_zoneidx,
|
||||
@@ -795,7 +795,7 @@ static inline struct zoneref *first_zones_zonelist(struct zonelist *zonelist,
|
||||
#define for_each_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \
|
||||
for (z = first_zones_zonelist(zlist, highidx, nodemask, &zone); \
|
||||
zone; \
|
||||
z = next_zones_zonelist(z, highidx, nodemask, &zone)) \
|
||||
z = next_zones_zonelist(++z, highidx, nodemask, &zone)) \
|
||||
|
||||
/**
|
||||
* for_each_zone_zonelist - helper macro to iterate over valid zones in a zonelist at or below a given zone index
|
||||
|
@@ -534,7 +534,7 @@ extern void pci_sort_breadthfirst(void);
|
||||
#ifdef CONFIG_PCI_LEGACY
|
||||
struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
|
||||
unsigned int device,
|
||||
const struct pci_dev *from);
|
||||
struct pci_dev *from);
|
||||
struct pci_dev __deprecated *pci_find_slot(unsigned int bus,
|
||||
unsigned int devfn);
|
||||
#endif /* CONFIG_PCI_LEGACY */
|
||||
@@ -550,7 +550,7 @@ struct pci_dev *pci_get_device(unsigned int vendor, unsigned int device,
|
||||
struct pci_dev *from);
|
||||
struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
|
||||
unsigned int ss_vendor, unsigned int ss_device,
|
||||
const struct pci_dev *from);
|
||||
struct pci_dev *from);
|
||||
struct pci_dev *pci_get_slot(struct pci_bus *bus, unsigned int devfn);
|
||||
struct pci_dev *pci_get_bus_and_slot(unsigned int bus, unsigned int devfn);
|
||||
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from);
|
||||
@@ -816,7 +816,7 @@ _PCI_NOP_ALL(write,)
|
||||
|
||||
static inline struct pci_dev *pci_find_device(unsigned int vendor,
|
||||
unsigned int device,
|
||||
const struct pci_dev *from)
|
||||
struct pci_dev *from)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@@ -838,7 +838,7 @@ static inline struct pci_dev *pci_get_subsys(unsigned int vendor,
|
||||
unsigned int device,
|
||||
unsigned int ss_vendor,
|
||||
unsigned int ss_device,
|
||||
const struct pci_dev *from)
|
||||
struct pci_dev *from)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -21,7 +21,14 @@ struct pnp_dev;
|
||||
/*
|
||||
* Resource Management
|
||||
*/
|
||||
#ifdef CONFIG_PNP
|
||||
struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
|
||||
#else
|
||||
static inline struct resource *pnp_get_resource(struct pnp_dev *dev, unsigned int type, unsigned int num)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int pnp_resource_valid(struct resource *res)
|
||||
{
|
||||
|
@@ -6,6 +6,7 @@ extern int ramfs_get_sb(struct file_system_type *fs_type,
|
||||
int flags, const char *dev_name, void *data, struct vfsmount *mnt);
|
||||
|
||||
#ifndef CONFIG_MMU
|
||||
extern int ramfs_nommu_expand_for_mapping(struct inode *inode, size_t newsize);
|
||||
extern unsigned long ramfs_nommu_get_unmapped_area(struct file *file,
|
||||
unsigned long addr,
|
||||
unsigned long len,
|
||||
|
@@ -11,7 +11,9 @@
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/magic.h>
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/time.h>
|
||||
#endif
|
||||
|
||||
enum smb_protocol {
|
||||
SMB_PROTOCOL_NONE,
|
||||
|
@@ -1,6 +1,8 @@
|
||||
#ifndef __LINUX_STACKTRACE_H
|
||||
#define __LINUX_STACKTRACE_H
|
||||
|
||||
struct task_struct;
|
||||
|
||||
#ifdef CONFIG_STACKTRACE
|
||||
struct stack_trace {
|
||||
unsigned int nr_entries, max_entries;
|
||||
|
Reference in New Issue
Block a user