Merge branches 'tracing/ftrace', 'tracing/syscalls' and 'linus' into tracing/core
Conflicts: arch/parisc/kernel/irq.c
This commit is contained in:
@@ -77,6 +77,14 @@
|
||||
#define TRACE_PRINTKS()
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
#define TRACE_SYSCALLS() VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \
|
||||
*(__syscalls_metadata) \
|
||||
VMLINUX_SYMBOL(__stop_syscalls_metadata) = .;
|
||||
#else
|
||||
#define TRACE_SYSCALLS()
|
||||
#endif
|
||||
|
||||
/* .data section */
|
||||
#define DATA_DATA \
|
||||
*(.data) \
|
||||
@@ -99,7 +107,8 @@
|
||||
LIKELY_PROFILE() \
|
||||
BRANCH_PROFILE() \
|
||||
TRACE_PRINTKS() \
|
||||
FTRACE_EVENTS()
|
||||
FTRACE_EVENTS() \
|
||||
TRACE_SYSCALLS()
|
||||
|
||||
#define RO_DATA(align) \
|
||||
. = ALIGN((align)); \
|
||||
|
||||
+2
-2
@@ -531,7 +531,7 @@ 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 *, struct bio_set *);
|
||||
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_slab(void);
|
||||
@@ -542,7 +542,7 @@ extern void bio_integrity_init_slab(void);
|
||||
#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_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)
|
||||
|
||||
@@ -52,7 +52,15 @@
|
||||
#define __deprecated __attribute__((deprecated))
|
||||
#define __packed __attribute__((packed))
|
||||
#define __weak __attribute__((weak))
|
||||
#define __naked __attribute__((naked))
|
||||
|
||||
/*
|
||||
* it doesn't make sense on ARM (currently the only user of __naked) to trace
|
||||
* naked functions because then mcount is called without stack and frame pointer
|
||||
* being set up and there is no chance to restore the lr register to the value
|
||||
* before mcount was called.
|
||||
*/
|
||||
#define __naked __attribute__((naked)) notrace
|
||||
|
||||
#define __noreturn __attribute__((noreturn))
|
||||
|
||||
/*
|
||||
|
||||
+11
-3
@@ -505,13 +505,21 @@ static inline void trace_hw_branch_oops(void) {}
|
||||
/*
|
||||
* A syscall entry in the ftrace syscalls array.
|
||||
*
|
||||
* @syscall_nr: syscall number
|
||||
* @name: name of the syscall
|
||||
* @nb_args: number of parameters it takes
|
||||
* @types: list of types as strings
|
||||
* @args: list of args as strings (args[i] matches types[i])
|
||||
*/
|
||||
struct syscall_trace_entry {
|
||||
int syscall_nr;
|
||||
struct syscall_metadata {
|
||||
const char *name;
|
||||
int nb_args;
|
||||
const char **types;
|
||||
const char **args;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
extern void arch_init_ftrace_syscalls(void);
|
||||
extern struct syscall_metadata *syscall_nr_to_meta(int nr);
|
||||
extern void start_ftrace_syscalls(void);
|
||||
extern void stop_ftrace_syscalls(void);
|
||||
extern void ftrace_syscall_enter(struct pt_regs *regs);
|
||||
|
||||
@@ -797,6 +797,7 @@ typedef struct hwif_s {
|
||||
struct scatterlist *sg_table;
|
||||
int sg_max_nents; /* Maximum number of entries in it */
|
||||
int sg_nents; /* Current number of entries in it */
|
||||
int orig_sg_nents;
|
||||
int sg_dma_direction; /* dma transfer direction */
|
||||
|
||||
/* data phase of the active command (currently only valid for PIO/DMA) */
|
||||
|
||||
@@ -346,6 +346,7 @@ static inline int __nlm_cmp_addr4(const struct sockaddr *sap1,
|
||||
return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
|
||||
static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
|
||||
const struct sockaddr *sap2)
|
||||
{
|
||||
@@ -353,6 +354,13 @@ static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
|
||||
const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2;
|
||||
return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr);
|
||||
}
|
||||
#else /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
|
||||
static inline int __nlm_cmp_addr6(const struct sockaddr *sap1,
|
||||
const struct sockaddr *sap2)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* !(CONFIG_IPV6 || CONFIG_IPV6_MODULE) */
|
||||
|
||||
/*
|
||||
* Compare two host addresses
|
||||
|
||||
@@ -406,6 +406,8 @@ struct nfs3_setaclargs {
|
||||
int mask;
|
||||
struct posix_acl * acl_access;
|
||||
struct posix_acl * acl_default;
|
||||
size_t len;
|
||||
unsigned int npages;
|
||||
struct page ** pages;
|
||||
};
|
||||
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
#define NFSACL_MAXPAGES ((2*(8+12*NFS_ACL_MAX_ENTRIES) + PAGE_SIZE-1) \
|
||||
>> PAGE_SHIFT)
|
||||
|
||||
#define NFS_ACL_MAX_ENTRIES_INLINE (5)
|
||||
#define NFS_ACL_INLINE_BUFSIZE ((2*(2+3*NFS_ACL_MAX_ENTRIES_INLINE)) << 2)
|
||||
|
||||
static inline unsigned int
|
||||
nfsacl_size(struct posix_acl *acl_access, struct posix_acl *acl_default)
|
||||
{
|
||||
|
||||
@@ -65,6 +65,7 @@ struct old_linux_dirent;
|
||||
#include <asm/signal.h>
|
||||
#include <linux/quota.h>
|
||||
#include <linux/key.h>
|
||||
#include <linux/ftrace.h>
|
||||
|
||||
#define __SC_DECL1(t1, a1) t1 a1
|
||||
#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__)
|
||||
@@ -95,7 +96,46 @@ struct old_linux_dirent;
|
||||
#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
|
||||
#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
#define __SC_STR_ADECL1(t, a) #a
|
||||
#define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__)
|
||||
#define __SC_STR_ADECL3(t, a, ...) #a, __SC_STR_ADECL2(__VA_ARGS__)
|
||||
#define __SC_STR_ADECL4(t, a, ...) #a, __SC_STR_ADECL3(__VA_ARGS__)
|
||||
#define __SC_STR_ADECL5(t, a, ...) #a, __SC_STR_ADECL4(__VA_ARGS__)
|
||||
#define __SC_STR_ADECL6(t, a, ...) #a, __SC_STR_ADECL5(__VA_ARGS__)
|
||||
|
||||
#define __SC_STR_TDECL1(t, a) #t
|
||||
#define __SC_STR_TDECL2(t, a, ...) #t, __SC_STR_TDECL1(__VA_ARGS__)
|
||||
#define __SC_STR_TDECL3(t, a, ...) #t, __SC_STR_TDECL2(__VA_ARGS__)
|
||||
#define __SC_STR_TDECL4(t, a, ...) #t, __SC_STR_TDECL3(__VA_ARGS__)
|
||||
#define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__)
|
||||
#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__)
|
||||
|
||||
#define SYSCALL_METADATA(sname, nb) \
|
||||
static const struct syscall_metadata __used \
|
||||
__attribute__((__aligned__(4))) \
|
||||
__attribute__((section("__syscalls_metadata"))) \
|
||||
__syscall_meta_##sname = { \
|
||||
.name = "sys"#sname, \
|
||||
.nb_args = nb, \
|
||||
.types = types_##sname, \
|
||||
.args = args_##sname, \
|
||||
}
|
||||
|
||||
#define SYSCALL_DEFINE0(sname) \
|
||||
static const struct syscall_metadata __used \
|
||||
__attribute__((__aligned__(4))) \
|
||||
__attribute__((section("__syscalls_metadata"))) \
|
||||
__syscall_meta_##sname = { \
|
||||
.name = "sys_"#sname, \
|
||||
.nb_args = 0, \
|
||||
}; \
|
||||
asmlinkage long sys_##sname(void)
|
||||
|
||||
#else
|
||||
#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
|
||||
#endif
|
||||
|
||||
#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
|
||||
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
|
||||
@@ -117,10 +157,26 @@ struct old_linux_dirent;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FTRACE_SYSCALLS
|
||||
#define SYSCALL_DEFINEx(x, sname, ...) \
|
||||
static const char *types_##sname[] = { \
|
||||
__SC_STR_TDECL##x(__VA_ARGS__) \
|
||||
}; \
|
||||
static const char *args_##sname[] = { \
|
||||
__SC_STR_ADECL##x(__VA_ARGS__) \
|
||||
}; \
|
||||
SYSCALL_METADATA(sname, x); \
|
||||
__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
|
||||
#else
|
||||
#define SYSCALL_DEFINEx(x, sname, ...) \
|
||||
__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
|
||||
|
||||
#define SYSCALL_DEFINE(name) static inline long SYSC_##name
|
||||
#define SYSCALL_DEFINEx(x, name, ...) \
|
||||
|
||||
#define __SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
static inline long SYSC##name(__SC_DECL##x(__VA_ARGS__)); \
|
||||
asmlinkage long SyS##name(__SC_LONG##x(__VA_ARGS__)) \
|
||||
@@ -134,7 +190,7 @@ struct old_linux_dirent;
|
||||
#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */
|
||||
|
||||
#define SYSCALL_DEFINE(name) asmlinkage long sys_##name
|
||||
#define SYSCALL_DEFINEx(x, name, ...) \
|
||||
#define __SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
|
||||
|
||||
#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */
|
||||
|
||||
@@ -31,10 +31,6 @@
|
||||
#define ETH_P_FCOE 0x8906 /* FCOE ether type */
|
||||
#endif
|
||||
|
||||
#ifndef ETH_P_8021Q
|
||||
#define ETH_P_8021Q 0x8100
|
||||
#endif
|
||||
|
||||
/*
|
||||
* FC_FCOE_OUI hasn't been standardized yet. XXX TBD.
|
||||
*/
|
||||
|
||||
@@ -337,4 +337,9 @@ enum fc_pf_rjt_reason {
|
||||
FC_RJT_VENDOR = 0xff, /* vendor specific reject */
|
||||
};
|
||||
|
||||
/* default timeout values */
|
||||
|
||||
#define FC_DEF_E_D_TOV 2000UL
|
||||
#define FC_DEF_R_A_TOV 10000UL
|
||||
|
||||
#endif /* _FC_FS_H_ */
|
||||
|
||||
+80
-58
@@ -68,9 +68,6 @@
|
||||
/*
|
||||
* FC HBA status
|
||||
*/
|
||||
#define FC_PAUSE (1 << 1)
|
||||
#define FC_LINK_UP (1 << 0)
|
||||
|
||||
enum fc_lport_state {
|
||||
LPORT_ST_NONE = 0,
|
||||
LPORT_ST_FLOGI,
|
||||
@@ -339,31 +336,17 @@ struct fc_exch {
|
||||
|
||||
struct libfc_function_template {
|
||||
|
||||
/**
|
||||
* Mandatory Fields
|
||||
*
|
||||
* These handlers must be implemented by the LLD.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Interface to send a FC frame
|
||||
*
|
||||
* STATUS: REQUIRED
|
||||
*/
|
||||
int (*frame_send)(struct fc_lport *lp, struct fc_frame *fp);
|
||||
|
||||
/**
|
||||
* Optional Fields
|
||||
*
|
||||
* The LLD may choose to implement any of the following handlers.
|
||||
* If LLD doesn't specify hander and leaves its pointer NULL then
|
||||
* the default libfc function will be used for that handler.
|
||||
*/
|
||||
|
||||
/**
|
||||
* ELS/CT interfaces
|
||||
*/
|
||||
|
||||
/*
|
||||
* elsct_send - sends ELS/CT frame
|
||||
* Interface to send ELS/CT frames
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
struct fc_seq *(*elsct_send)(struct fc_lport *lport,
|
||||
struct fc_rport *rport,
|
||||
@@ -373,9 +356,6 @@ struct libfc_function_template {
|
||||
struct fc_frame *fp,
|
||||
void *arg),
|
||||
void *arg, u32 timer_msec);
|
||||
/**
|
||||
* Exhance Manager interfaces
|
||||
*/
|
||||
|
||||
/*
|
||||
* Send the FC frame payload using a new exchange and sequence.
|
||||
@@ -407,6 +387,8 @@ struct libfc_function_template {
|
||||
* timer_msec argument is specified. The timer is canceled when
|
||||
* it fires or when the exchange is done. The exchange timeout handler
|
||||
* is registered by EM layer.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
struct fc_seq *(*exch_seq_send)(struct fc_lport *lp,
|
||||
struct fc_frame *fp,
|
||||
@@ -418,14 +400,18 @@ struct libfc_function_template {
|
||||
void *arg, unsigned int timer_msec);
|
||||
|
||||
/*
|
||||
* send a frame using existing sequence and exchange.
|
||||
* Send a frame using an existing sequence and exchange.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*seq_send)(struct fc_lport *lp, struct fc_seq *sp,
|
||||
struct fc_frame *fp);
|
||||
|
||||
/*
|
||||
* Send ELS response using mainly infomation
|
||||
* in exchange and sequence in EM layer.
|
||||
* Send an ELS response using infomation from a previous
|
||||
* exchange and sequence.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*seq_els_rsp_send)(struct fc_seq *sp, enum fc_els_cmd els_cmd,
|
||||
struct fc_seq_els_data *els_data);
|
||||
@@ -437,6 +423,8 @@ struct libfc_function_template {
|
||||
* A timer_msec can be specified for abort timeout, if non-zero
|
||||
* timer_msec value is specified then exchange resp handler
|
||||
* will be called with timeout error if no response to abort.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*seq_exch_abort)(const struct fc_seq *req_sp,
|
||||
unsigned int timer_msec);
|
||||
@@ -444,6 +432,8 @@ struct libfc_function_template {
|
||||
/*
|
||||
* Indicate that an exchange/sequence tuple is complete and the memory
|
||||
* allocated for the related objects may be freed.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*exch_done)(struct fc_seq *sp);
|
||||
|
||||
@@ -451,6 +441,8 @@ struct libfc_function_template {
|
||||
* Assigns a EM and a free XID for an new exchange and then
|
||||
* allocates a new exchange and sequence pair.
|
||||
* The fp can be used to determine free XID.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
struct fc_exch *(*exch_get)(struct fc_lport *lp, struct fc_frame *fp);
|
||||
|
||||
@@ -458,12 +450,16 @@ struct libfc_function_template {
|
||||
* Release previously assigned XID by exch_get API.
|
||||
* The LLD may implement this if XID is assigned by LLD
|
||||
* in exch_get().
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*exch_put)(struct fc_lport *lp, struct fc_exch_mgr *mp,
|
||||
u16 ex_id);
|
||||
|
||||
/*
|
||||
* Start a new sequence on the same exchange/sequence tuple.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
struct fc_seq *(*seq_start_next)(struct fc_seq *sp);
|
||||
|
||||
@@ -471,26 +467,38 @@ struct libfc_function_template {
|
||||
* Reset an exchange manager, completing all sequences and exchanges.
|
||||
* If s_id is non-zero, reset only exchanges originating from that FID.
|
||||
* If d_id is non-zero, reset only exchanges sending to that FID.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*exch_mgr_reset)(struct fc_exch_mgr *,
|
||||
void (*exch_mgr_reset)(struct fc_lport *,
|
||||
u32 s_id, u32 d_id);
|
||||
|
||||
void (*rport_flush_queue)(void);
|
||||
/**
|
||||
* Local Port interfaces
|
||||
/*
|
||||
* Flush the rport work queue. Generally used before shutdown.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*rport_flush_queue)(void);
|
||||
|
||||
/*
|
||||
* Receive a frame to a local port.
|
||||
* Receive a frame for a local port.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*lport_recv)(struct fc_lport *lp, struct fc_seq *sp,
|
||||
struct fc_frame *fp);
|
||||
|
||||
/*
|
||||
* Reset the local port.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*lport_reset)(struct fc_lport *);
|
||||
|
||||
/**
|
||||
* Remote Port interfaces
|
||||
/*
|
||||
* Create a remote port
|
||||
*/
|
||||
struct fc_rport *(*rport_create)(struct fc_disc_port *);
|
||||
|
||||
/*
|
||||
* Initiates the RP state machine. It is called from the LP module.
|
||||
@@ -500,26 +508,33 @@ struct libfc_function_template {
|
||||
* - PLOGI
|
||||
* - PRLI
|
||||
* - RTV
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*rport_login)(struct fc_rport *rport);
|
||||
|
||||
/*
|
||||
* Logoff, and remove the rport from the transport if
|
||||
* it had been added. This will send a LOGO to the target.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*rport_logoff)(struct fc_rport *rport);
|
||||
|
||||
/*
|
||||
* Recieve a request from a remote port.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*rport_recv_req)(struct fc_seq *, struct fc_frame *,
|
||||
struct fc_rport *);
|
||||
|
||||
struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32);
|
||||
|
||||
/**
|
||||
* FCP interfaces
|
||||
/*
|
||||
* lookup an rport by it's port ID.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
struct fc_rport *(*rport_lookup)(const struct fc_lport *, u32);
|
||||
|
||||
/*
|
||||
* Send a fcp cmd from fsp pkt.
|
||||
@@ -527,30 +542,38 @@ struct libfc_function_template {
|
||||
*
|
||||
* The resp handler is called when FCP_RSP received.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
int (*fcp_cmd_send)(struct fc_lport *lp, struct fc_fcp_pkt *fsp,
|
||||
void (*resp)(struct fc_seq *, struct fc_frame *fp,
|
||||
void *arg));
|
||||
|
||||
/*
|
||||
* Used at least durring linkdown and reset
|
||||
* Cleanup the FCP layer, used durring link down and reset
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*fcp_cleanup)(struct fc_lport *lp);
|
||||
|
||||
/*
|
||||
* Abort all I/O on a local port
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*fcp_abort_io)(struct fc_lport *lp);
|
||||
|
||||
/**
|
||||
* Discovery interfaces
|
||||
/*
|
||||
* Receive a request for the discovery layer.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
|
||||
void (*disc_recv_req)(struct fc_seq *,
|
||||
struct fc_frame *, struct fc_lport *);
|
||||
|
||||
/*
|
||||
* Start discovery for a local port.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*disc_start)(void (*disc_callback)(struct fc_lport *,
|
||||
enum fc_disc_event),
|
||||
@@ -559,6 +582,8 @@ struct libfc_function_template {
|
||||
/*
|
||||
* Stop discovery for a given lport. This will remove
|
||||
* all discovered rports
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*disc_stop) (struct fc_lport *);
|
||||
|
||||
@@ -566,6 +591,8 @@ struct libfc_function_template {
|
||||
* Stop discovery for a given lport. This will block
|
||||
* until all discovered rports are deleted from the
|
||||
* FC transport class
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
void (*disc_stop_final) (struct fc_lport *);
|
||||
};
|
||||
@@ -603,7 +630,8 @@ struct fc_lport {
|
||||
|
||||
/* Operational Information */
|
||||
struct libfc_function_template tt;
|
||||
u16 link_status;
|
||||
u8 link_up;
|
||||
u8 qfull;
|
||||
enum fc_lport_state state;
|
||||
unsigned long boot_time;
|
||||
|
||||
@@ -637,7 +665,7 @@ struct fc_lport {
|
||||
struct delayed_work disc_work;
|
||||
};
|
||||
|
||||
/**
|
||||
/*
|
||||
* FC_LPORT HELPER FUNCTIONS
|
||||
*****************************/
|
||||
static inline void *lport_priv(const struct fc_lport *lp)
|
||||
@@ -669,7 +697,7 @@ static inline void fc_lport_state_enter(struct fc_lport *lp,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* LOCAL PORT LAYER
|
||||
*****************************/
|
||||
int fc_lport_init(struct fc_lport *lp);
|
||||
@@ -703,12 +731,6 @@ void fc_linkup(struct fc_lport *);
|
||||
*/
|
||||
void fc_linkdown(struct fc_lport *);
|
||||
|
||||
/*
|
||||
* Pause and unpause traffic.
|
||||
*/
|
||||
void fc_pause(struct fc_lport *);
|
||||
void fc_unpause(struct fc_lport *);
|
||||
|
||||
/*
|
||||
* Configure the local port.
|
||||
*/
|
||||
@@ -725,19 +747,19 @@ int fc_lport_reset(struct fc_lport *);
|
||||
int fc_set_mfs(struct fc_lport *lp, u32 mfs);
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* REMOTE PORT LAYER
|
||||
*****************************/
|
||||
int fc_rport_init(struct fc_lport *lp);
|
||||
void fc_rport_terminate_io(struct fc_rport *rp);
|
||||
|
||||
/**
|
||||
/*
|
||||
* DISCOVERY LAYER
|
||||
*****************************/
|
||||
int fc_disc_init(struct fc_lport *lp);
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* SCSI LAYER
|
||||
*****************************/
|
||||
/*
|
||||
@@ -798,7 +820,7 @@ int fc_change_queue_type(struct scsi_device *sdev, int tag_type);
|
||||
*/
|
||||
void fc_fcp_destroy(struct fc_lport *);
|
||||
|
||||
/**
|
||||
/*
|
||||
* ELS/CT interface
|
||||
*****************************/
|
||||
/*
|
||||
@@ -807,7 +829,7 @@ void fc_fcp_destroy(struct fc_lport *);
|
||||
int fc_elsct_init(struct fc_lport *lp);
|
||||
|
||||
|
||||
/**
|
||||
/*
|
||||
* EXCHANGE MANAGER LAYER
|
||||
*****************************/
|
||||
/*
|
||||
@@ -916,7 +938,7 @@ struct fc_seq *fc_seq_start_next(struct fc_seq *sp);
|
||||
* If s_id is non-zero, reset only exchanges originating from that FID.
|
||||
* If d_id is non-zero, reset only exchanges sending to that FID.
|
||||
*/
|
||||
void fc_exch_mgr_reset(struct fc_exch_mgr *, u32 s_id, u32 d_id);
|
||||
void fc_exch_mgr_reset(struct fc_lport *, u32 s_id, u32 d_id);
|
||||
|
||||
/*
|
||||
* Functions for fc_functions_template
|
||||
|
||||
@@ -46,6 +46,7 @@ struct fcoe_softc {
|
||||
struct net_device *phys_dev; /* device with ethtool_ops */
|
||||
struct packet_type fcoe_packet_type;
|
||||
struct sk_buff_head fcoe_pending_queue;
|
||||
u8 fcoe_pending_queue_active;
|
||||
|
||||
u8 dest_addr[ETH_ALEN];
|
||||
u8 ctl_src_addr[ETH_ALEN];
|
||||
@@ -58,16 +59,10 @@ struct fcoe_softc {
|
||||
u8 address_mode;
|
||||
};
|
||||
|
||||
static inline struct fcoe_softc *fcoe_softc(
|
||||
const struct fc_lport *lp)
|
||||
{
|
||||
return (struct fcoe_softc *)lport_priv(lp);
|
||||
}
|
||||
|
||||
static inline struct net_device *fcoe_netdev(
|
||||
const struct fc_lport *lp)
|
||||
{
|
||||
return fcoe_softc(lp)->real_dev;
|
||||
return ((struct fcoe_softc *)lport_priv(lp))->real_dev;
|
||||
}
|
||||
|
||||
static inline struct fcoe_hdr *skb_fcoe_header(const struct sk_buff *skb)
|
||||
|
||||
Reference in New Issue
Block a user