* RE: Alignment issues with freescale FEC driver
From: Andy Duan @ 2016-09-24 5:13 UTC (permalink / raw)
To: David Miller, eric@nelint.com
Cc: andrew@lunn.ch, edumazet@google.com, otavio@ossystems.com.br,
netdev@vger.kernel.org, troy.kisky@boundarydevices.com,
rmk+kernel@arm.linux.org.uk, cjb.sw.nospam@gmail.com,
linux-arm-kernel@lists.infradead.org
In-Reply-To: <20160923.224553.1824171056324385383.davem@davemloft.net>
From: David Miller <davem@davemloft.net> Sent: Saturday, September 24, 2016 10:46 AM
> To: eric@nelint.com
> Cc: andrew@lunn.ch; edumazet@google.com; Andy Duan
> <fugang.duan@nxp.com>; otavio@ossystems.com.br;
> netdev@vger.kernel.org; troy.kisky@boundarydevices.com;
> rmk+kernel@arm.linux.org.uk; cjb.sw.nospam@gmail.com; linux-arm-
> kernel@lists.infradead.org
> Subject: Re: Alignment issues with freescale FEC driver
>
> From: Eric Nelson <eric@nelint.com>
> Date: Fri, 23 Sep 2016 11:35:17 -0700
>
> > From the i.MX6DQ reference manual, bit 7 of ENET_RACC says this:
> >
> > "RX FIFO Shift-16
> >
> > When this field is set, the actual frame data starts at bit 16 of the
> > first word read from the RX FIFO aligning the Ethernet payload on a
> > 32-bit boundary."
> >
> > Same for the i.MX6UL.
> >
> > I'm not sure what it will take to use this, but it seems to be exactly
> > what we're looking for.
>
> +1
RACC[SHIFT16] just instructs the MAC to write two additional bytes in front of each frame received into the RX FIFO to align
the Ethernet payload on a 32-bit boundary.
Eric's patch "net: fec: support RRACC_SHIFT16 to align IP header" works fine.
For the alignment issues, that is introduced by commit 1b7bde6d6 and c259c132a in net-next tree. Before these commits, no alignment issue.
How to fix the issue:
Solution1: to enable HW RRACC_SHIFT16 feature (test pass):
Eric's patch "net: fec: support RRACC_SHIFT16 to align IP header".
Solution2: include the correct prefetch() header (test pass):
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -59,7 +59,7 @@
#include <linux/pinctrl/consumer.h>
#include <linux/pm_runtime.h>
#include <linux/busfreq-imx.h>
-#include <linux/prefetch.h>
+#include <asm/processor.h>
Solution3: use __netdev_alloc_skb_ip_align() instead of netdev_alloc_skb().
Or: still use the previous method before commit 1b7bde6d6:
skb = netdev_alloc_skb(ndev, pkt_len - 4 + NET_IP_ALIGN);
skb_reserve(skb, NET_IP_ALIGN);
Comparing these solutions:
From sw effort and performance, I think these are the similar. Enable RRACC_SHIFT16 doesn't take extra advantage.
Correct my if I am wrong. Thanks.
Regards,
Andy
^ permalink raw reply
* [PATCH 1/6] isdn/eicon: add function declarations
From: Baoyou Xie @ 2016-09-24 5:16 UTC (permalink / raw)
To: mac, isdn; +Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get a few warnings when building kernel with W=1:
drivers/isdn/hardware/eicon/diddfunc.c:95:12: warning: no previous prototype for 'diddfunc_init' [-Wmissing-prototypes]
drivers/isdn/hardware/eicon/s_4bri.c:128:6: warning: no previous prototype for 'start_qBri_hardware' [-Wmissing-prototypes]
drivers/isdn/hardware/eicon/idifunc.c:243:12: warning: no previous prototype for 'idifunc_init' [-Wmissing-prototypes]
drivers/isdn/hardware/eicon/capifunc.c:217:6: warning: no previous prototype for 'api_remove_complete' [-Wmissing-prototypes]
....
In fact, these functions need be declare in some header files.
So this patch adds function declarations in
drivers/isdn/hardware/eicon/di_defs.h,
drivers/isdn/hardware/eicon/capifunc.h,
drivers/isdn/hardware/eicon/xdi_adapter.h.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/hardware/eicon/capifunc.c | 3 --
drivers/isdn/hardware/eicon/capifunc.h | 1 +
drivers/isdn/hardware/eicon/di_defs.h | 46 +++++++++++++++++++++++++++++++
drivers/isdn/hardware/eicon/diva.c | 2 --
drivers/isdn/hardware/eicon/diva_didd.c | 5 ----
drivers/isdn/hardware/eicon/divacapi.h | 6 ++++
drivers/isdn/hardware/eicon/divamnt.c | 4 ---
drivers/isdn/hardware/eicon/divasi.c | 3 --
drivers/isdn/hardware/eicon/divasmain.c | 5 ----
drivers/isdn/hardware/eicon/divasproc.c | 2 --
drivers/isdn/hardware/eicon/idifunc.c | 2 --
drivers/isdn/hardware/eicon/message.c | 11 --------
drivers/isdn/hardware/eicon/mntfunc.c | 5 ----
drivers/isdn/hardware/eicon/os_4bri.c | 13 ---------
drivers/isdn/hardware/eicon/os_bri.c | 7 -----
drivers/isdn/hardware/eicon/os_pri.c | 6 ----
drivers/isdn/hardware/eicon/um_idi.c | 5 ----
drivers/isdn/hardware/eicon/xdi_adapter.h | 6 ++++
18 files changed, 59 insertions(+), 73 deletions(-)
diff --git a/drivers/isdn/hardware/eicon/capifunc.c b/drivers/isdn/hardware/eicon/capifunc.c
index 7a0bdbd..869b98e 100644
--- a/drivers/isdn/hardware/eicon/capifunc.c
+++ b/drivers/isdn/hardware/eicon/capifunc.c
@@ -55,9 +55,6 @@ static void diva_release_appl(struct capi_ctr *, __u16);
static char *diva_procinfo(struct capi_ctr *);
static u16 diva_send_message(struct capi_ctr *,
diva_os_message_buffer_s *);
-extern void diva_os_set_controller_struct(struct capi_ctr *);
-
-extern void DIVA_DIDD_Read(DESCRIPTOR *, int);
/*
* debug
diff --git a/drivers/isdn/hardware/eicon/capifunc.h b/drivers/isdn/hardware/eicon/capifunc.h
index e96c45b..4bd0f20 100644
--- a/drivers/isdn/hardware/eicon/capifunc.h
+++ b/drivers/isdn/hardware/eicon/capifunc.h
@@ -36,5 +36,6 @@ typedef struct _diva_card {
*/
int init_capifunc(void);
void finit_capifunc(void);
+void diva_os_set_controller_struct(struct capi_ctr *);
#endif /* __CAPIFUNC_H__ */
diff --git a/drivers/isdn/hardware/eicon/di_defs.h b/drivers/isdn/hardware/eicon/di_defs.h
index a5094d2..ed744aa 100644
--- a/drivers/isdn/hardware/eicon/di_defs.h
+++ b/drivers/isdn/hardware/eicon/di_defs.h
@@ -179,3 +179,49 @@ typedef void (IDI_CALL_LINK_T *didd_adapter_change_callback_t)(void IDI_CALL_ENT
#define DI_VOICE_OVER_IP 0x0800 /* Voice over IP support */
typedef void (IDI_CALL_LINK_T *_IDI_CALL)(void *, ENTITY *);
#endif
+
+int diddfunc_init(void);
+void diddfunc_finit(void);
+
+void DIVA_DIDD_Read(void *, int);
+
+int divasfunc_init(int dbgmask);
+void divasfunc_exit(void);
+irqreturn_t diva_os_irq_wrapper(int irq, void *context);
+void diva_xdi_display_adapter_features(int card);
+int create_divas_proc(void);
+void remove_divas_proc(void);
+void prepare_maestra_functions(PISDN_ADAPTER IoAdapter);
+void start_qBri_hardware(PISDN_ADAPTER IoAdapter);
+int qBri_FPGA_download(PISDN_ADAPTER IoAdapter);
+void prepare_qBri_functions(PISDN_ADAPTER IoAdapter);
+void prepare_qBri2_functions(PISDN_ADAPTER IoAdapter);
+
+void prepare_pri_functions(PISDN_ADAPTER IoAdapter);
+void prepare_pri2_functions(PISDN_ADAPTER IoAdapter);
+
+int diva_os_copy_to_user(void *os_handle, void __user *dst,
+ const void *src, int length);
+int diva_os_copy_from_user(void *os_handle, void *dst,
+ const void __user *src, int length);
+
+int mntfunc_init(int *, void **, unsigned long);
+void mntfunc_finit(void);
+int maint_read_write(void __user *buf, int count);
+
+void diva_os_wakeup_read(void *os_context);
+void diva_os_wakeup_close(void *os_context);
+
+int idifunc_init(void);
+void idifunc_finit(void);
+
+void diva_user_mode_idi_remove_adapter(int);
+int diva_user_mode_idi_create_adapter(const DESCRIPTOR *, int);
+
+void divas_get_version(char *);
+void diva_get_vserial_number(PISDN_ADAPTER IoAdapter, char *buf);
+
+byte MapController(byte);
+
+int fax_head_line_time(char *buffer);
+void api_remove_complete(void);
diff --git a/drivers/isdn/hardware/eicon/diva.c b/drivers/isdn/hardware/eicon/diva.c
index d91dd58..9693add 100644
--- a/drivers/isdn/hardware/eicon/diva.c
+++ b/drivers/isdn/hardware/eicon/diva.c
@@ -28,8 +28,6 @@
PISDN_ADAPTER IoAdapters[MAX_ADAPTER];
extern IDI_CALL Requests[MAX_ADAPTER];
-extern int create_adapter_proc(diva_os_xdi_adapter_t *a);
-extern void remove_adapter_proc(diva_os_xdi_adapter_t *a);
#define DivaIdiReqFunc(N) \
static void DivaIdiRequest##N(ENTITY *e) \
diff --git a/drivers/isdn/hardware/eicon/diva_didd.c b/drivers/isdn/hardware/eicon/diva_didd.c
index fab6ccf..b8e525f 100644
--- a/drivers/isdn/hardware/eicon/diva_didd.c
+++ b/drivers/isdn/hardware/eicon/diva_didd.c
@@ -39,11 +39,6 @@ MODULE_LICENSE("GPL");
#define DBG_MINIMUM (DL_LOG + DL_FTL + DL_ERR)
#define DBG_DEFAULT (DBG_MINIMUM + DL_XLOG + DL_REG)
-extern int diddfunc_init(void);
-extern void diddfunc_finit(void);
-
-extern void DIVA_DIDD_Read(void *, int);
-
static struct proc_dir_entry *proc_didd;
struct proc_dir_entry *proc_net_eicon = NULL;
diff --git a/drivers/isdn/hardware/eicon/divacapi.h b/drivers/isdn/hardware/eicon/divacapi.h
index a315a29..6a28149 100644
--- a/drivers/isdn/hardware/eicon/divacapi.h
+++ b/drivers/isdn/hardware/eicon/divacapi.h
@@ -1358,3 +1358,9 @@ extern word li_total_channels;
#define NCPI_MDM_DCD_ON_RECEIVED 0x80
/*------------------------------------------------------------------*/
+
+void sendf(APPL *, word, dword, word, byte *, ...);
+void *TransmitBufferSet(APPL *appl, dword ref);
+void *TransmitBufferGet(APPL *appl, void *p);
+void TransmitBufferFree(APPL *appl, void *p);
+void *ReceiveBufferGet(APPL *appl, int Num);
diff --git a/drivers/isdn/hardware/eicon/divamnt.c b/drivers/isdn/hardware/eicon/divamnt.c
index 0de29b7b..6a4fa56 100644
--- a/drivers/isdn/hardware/eicon/divamnt.c
+++ b/drivers/isdn/hardware/eicon/divamnt.c
@@ -46,10 +46,6 @@ char *DRIVERRELEASE_MNT = "2.0";
static wait_queue_head_t msgwaitq;
static unsigned long opened;
-extern int mntfunc_init(int *, void **, unsigned long);
-extern void mntfunc_finit(void);
-extern int maint_read_write(void __user *buf, int count);
-
/*
* helper functions
*/
diff --git a/drivers/isdn/hardware/eicon/divasi.c b/drivers/isdn/hardware/eicon/divasi.c
index 4103a8c..c2a6f1a 100644
--- a/drivers/isdn/hardware/eicon/divasi.c
+++ b/drivers/isdn/hardware/eicon/divasi.c
@@ -48,9 +48,6 @@ static char *DRIVERLNAME = "diva_idi";
static char *DEVNAME = "DivasIDI";
char *DRIVERRELEASE_IDI = "2.0";
-extern int idifunc_init(void);
-extern void idifunc_finit(void);
-
/*
* helper functions
*/
diff --git a/drivers/isdn/hardware/eicon/divasmain.c b/drivers/isdn/hardware/eicon/divasmain.c
index 32f3451..854ffb6 100644
--- a/drivers/isdn/hardware/eicon/divasmain.c
+++ b/drivers/isdn/hardware/eicon/divasmain.c
@@ -55,12 +55,7 @@ static char *DRIVERLNAME = "divas";
static char *DEVNAME = "Divas";
char *DRIVERRELEASE_DIVAS = "2.0";
-extern irqreturn_t diva_os_irq_wrapper(int irq, void *context);
-extern int create_divas_proc(void);
-extern void remove_divas_proc(void);
extern void diva_get_vserial_number(PISDN_ADAPTER IoAdapter, char *buf);
-extern int divasfunc_init(int dbgmask);
-extern void divasfunc_exit(void);
typedef struct _diva_os_thread_dpc {
struct tasklet_struct divas_task;
diff --git a/drivers/isdn/hardware/eicon/divasproc.c b/drivers/isdn/hardware/eicon/divasproc.c
index 56ce98a..9161393 100644
--- a/drivers/isdn/hardware/eicon/divasproc.c
+++ b/drivers/isdn/hardware/eicon/divasproc.c
@@ -34,8 +34,6 @@
extern PISDN_ADAPTER IoAdapters[MAX_ADAPTER];
-extern void divas_get_version(char *);
-extern void diva_get_vserial_number(PISDN_ADAPTER IoAdapter, char *buf);
/*********************************************************
** Functions for /proc interface / File operations
diff --git a/drivers/isdn/hardware/eicon/idifunc.c b/drivers/isdn/hardware/eicon/idifunc.c
index fef6586..bacab74 100644
--- a/drivers/isdn/hardware/eicon/idifunc.c
+++ b/drivers/isdn/hardware/eicon/idifunc.c
@@ -22,8 +22,6 @@
extern char *DRIVERRELEASE_IDI;
extern void DIVA_DIDD_Read(void *, int);
-extern int diva_user_mode_idi_create_adapter(const DESCRIPTOR *, int);
-extern void diva_user_mode_idi_remove_adapter(int);
static dword notify_handle;
static DESCRIPTOR DAdapter;
diff --git a/drivers/isdn/hardware/eicon/message.c b/drivers/isdn/hardware/eicon/message.c
index 1a1d997..8495bf15 100644
--- a/drivers/isdn/hardware/eicon/message.c
+++ b/drivers/isdn/hardware/eicon/message.c
@@ -84,7 +84,6 @@ static void api_save_msg(API_PARSE *in, byte *format, API_SAVE *out);
static void api_load_msg(API_SAVE *in, API_PARSE *out);
word api_remove_start(void);
-void api_remove_complete(void);
static void plci_remove(PLCI *);
static void diva_get_extended_adapter_features(DIVA_CAPI_ADAPTER *a);
@@ -224,20 +223,10 @@ static void diva_free_dma_descriptor(PLCI *plci, int nr);
/* external function prototypes */
/*------------------------------------------------------------------*/
-extern byte MapController(byte);
extern byte UnMapController(byte);
#define MapId(Id)(((Id) & 0xffffff00L) | MapController((byte)(Id)))
#define UnMapId(Id)(((Id) & 0xffffff00L) | UnMapController((byte)(Id)))
-void sendf(APPL *, word, dword, word, byte *, ...);
-void *TransmitBufferSet(APPL *appl, dword ref);
-void *TransmitBufferGet(APPL *appl, void *p);
-void TransmitBufferFree(APPL *appl, void *p);
-void *ReceiveBufferGet(APPL *appl, int Num);
-
-int fax_head_line_time(char *buffer);
-
-
/*------------------------------------------------------------------*/
/* Global data definitions */
/*------------------------------------------------------------------*/
diff --git a/drivers/isdn/hardware/eicon/mntfunc.c b/drivers/isdn/hardware/eicon/mntfunc.c
index 1cd9aff..e304a1d 100644
--- a/drivers/isdn/hardware/eicon/mntfunc.c
+++ b/drivers/isdn/hardware/eicon/mntfunc.c
@@ -29,11 +29,6 @@ static DESCRIPTOR MAdapter;
static DESCRIPTOR MaintDescriptor =
{ IDI_DIMAINT, 0, 0, (IDI_CALL) diva_maint_prtComp };
-extern int diva_os_copy_to_user(void *os_handle, void __user *dst,
- const void *src, int length);
-extern int diva_os_copy_from_user(void *os_handle, void *dst,
- const void __user *src, int length);
-
static void no_printf(unsigned char *x, ...)
{
/* dummy debug function */
diff --git a/drivers/isdn/hardware/eicon/os_4bri.c b/drivers/isdn/hardware/eicon/os_4bri.c
index 1891246..80470d6 100644
--- a/drivers/isdn/hardware/eicon/os_4bri.c
+++ b/drivers/isdn/hardware/eicon/os_4bri.c
@@ -22,19 +22,6 @@ static void *diva_xdiLoadFileFile = NULL;
static dword diva_xdiLoadFileLength = 0;
/*
-** IMPORTS
-*/
-extern void prepare_qBri_functions(PISDN_ADAPTER IoAdapter);
-extern void prepare_qBri2_functions(PISDN_ADAPTER IoAdapter);
-extern void diva_xdi_display_adapter_features(int card);
-extern void diva_add_slave_adapter(diva_os_xdi_adapter_t *a);
-
-extern int qBri_FPGA_download(PISDN_ADAPTER IoAdapter);
-extern void start_qBri_hardware(PISDN_ADAPTER IoAdapter);
-
-extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
-
-/*
** LOCALS
*/
static unsigned long _4bri_bar_length[4] = {
diff --git a/drivers/isdn/hardware/eicon/os_bri.c b/drivers/isdn/hardware/eicon/os_bri.c
index 20f2653..6570abf 100644
--- a/drivers/isdn/hardware/eicon/os_bri.c
+++ b/drivers/isdn/hardware/eicon/os_bri.c
@@ -19,13 +19,6 @@
#include "dsrv_bri.h"
/*
-** IMPORTS
-*/
-extern void prepare_maestra_functions(PISDN_ADAPTER IoAdapter);
-extern void diva_xdi_display_adapter_features(int card);
-extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
-
-/*
** LOCALS
*/
static int bri_bar_length[3] = {
diff --git a/drivers/isdn/hardware/eicon/os_pri.c b/drivers/isdn/hardware/eicon/os_pri.c
index da4957a..51a79a3 100644
--- a/drivers/isdn/hardware/eicon/os_pri.c
+++ b/drivers/isdn/hardware/eicon/os_pri.c
@@ -28,15 +28,9 @@
#define DIVA_PRI_NO_PCI_BIOS_WORKAROUND 1
-extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
-
/*
** IMPORTS
*/
-extern void prepare_pri_functions(PISDN_ADAPTER IoAdapter);
-extern void prepare_pri2_functions(PISDN_ADAPTER IoAdapter);
-extern void diva_xdi_display_adapter_features(int card);
-
static int diva_pri_cleanup_adapter(diva_os_xdi_adapter_t *a);
static int diva_pri_cmd_card_proc(struct _diva_os_xdi_adapter *a,
diva_xdi_um_cfg_cmd_t *cmd, int length);
diff --git a/drivers/isdn/hardware/eicon/um_idi.c b/drivers/isdn/hardware/eicon/um_idi.c
index e151971..676663a 100644
--- a/drivers/isdn/hardware/eicon/um_idi.c
+++ b/drivers/isdn/hardware/eicon/um_idi.c
@@ -14,11 +14,6 @@
#define DIVAS_MAX_XDI_ADAPTERS 64
/* --------------------------------------------------------------------------
- IMPORTS
- -------------------------------------------------------------------------- */
-extern void diva_os_wakeup_read(void *os_context);
-extern void diva_os_wakeup_close(void *os_context);
-/* --------------------------------------------------------------------------
LOCALS
-------------------------------------------------------------------------- */
static LIST_HEAD(adapter_q);
diff --git a/drivers/isdn/hardware/eicon/xdi_adapter.h b/drivers/isdn/hardware/eicon/xdi_adapter.h
index d303e65..7900741 100644
--- a/drivers/isdn/hardware/eicon/xdi_adapter.h
+++ b/drivers/isdn/hardware/eicon/xdi_adapter.h
@@ -67,4 +67,10 @@ typedef struct _diva_os_xdi_adapter {
dword dsp_mask;
} diva_os_xdi_adapter_t;
+void diva_add_slave_adapter(diva_os_xdi_adapter_t *a);
+int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
+
+int create_adapter_proc(diva_os_xdi_adapter_t *a);
+void remove_adapter_proc(diva_os_xdi_adapter_t *a);
+
#endif
--
2.7.4
^ permalink raw reply related
* [PATCH 2/6] isdn/hardware/eicon: add missing header dependencies
From: Baoyou Xie @ 2016-09-24 5:18 UTC (permalink / raw)
To: mac, isdn; +Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get 1 warning when building kernel with W=1:
drivers/isdn/hardware/eicon/diva.c:655:6: warning: no previous prototype for 'xdiFreeFile' [-Wmissing-prototypes]
In fact, this function is declared in
drivers/isdn/hardware/eicon/helpers.h,
so this patch adds missing header dependencies.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/hardware/eicon/diva.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/isdn/hardware/eicon/diva.c b/drivers/isdn/hardware/eicon/diva.c
index 9693add..ad32552 100644
--- a/drivers/isdn/hardware/eicon/diva.c
+++ b/drivers/isdn/hardware/eicon/diva.c
@@ -17,6 +17,7 @@
#include "xdi_adapter.h"
#include "diva_pci.h"
#include "diva.h"
+#include "helpers.h"
#ifdef CONFIG_ISDN_DIVAS_PRIPCI
#include "os_pri.h"
--
2.7.4
^ permalink raw reply related
* [PATCH 3/6] isdn/hisax: add function declarations
From: Baoyou Xie @ 2016-09-24 5:21 UTC (permalink / raw)
To: isdn, linux-kernel.bfrz, davem
Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get a few warnings when building kernel with W=1:
drivers/isdn/hisax/teles3.c:273:5: warning: no previous prototype for 'setup_teles3' [-Wmissing-prototypes]
drivers/isdn/hisax/s0box.c:213:5: warning: no previous prototype for 'setup_s0box' [-Wmissing-prototypes]
drivers/isdn/hisax/bkm_a4t.c:325:5: warning: no previous prototype for 'setup_bkm_a4t' [-Wmissing-prototypes]
drivers/isdn/hisax/w6692.c:996:5: warning: no previous prototype for 'setup_w6692' [-Wmissing-prototypes]
....
In fact, these functions need be declared in some header files.
So this patch adds function declarations in drivers/isdn/hisax/hisax.h.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/hisax/config.c | 60 ---------------------------------------------
drivers/isdn/hisax/hisax.h | 60 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 60 deletions(-)
diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c
index bf04d2a..5335c8b 100644
--- a/drivers/isdn/hisax/config.c
+++ b/drivers/isdn/hisax/config.c
@@ -460,42 +460,14 @@ __setup("hisax=", HiSax_setup);
extern int setup_teles0(struct IsdnCard *card);
#endif
-#if CARD_TELES3
-extern int setup_teles3(struct IsdnCard *card);
-#endif
-
-#if CARD_S0BOX
-extern int setup_s0box(struct IsdnCard *card);
-#endif
-
-#if CARD_TELESPCI
-extern int setup_telespci(struct IsdnCard *card);
-#endif
-
#if CARD_AVM_A1
extern int setup_avm_a1(struct IsdnCard *card);
#endif
-#if CARD_AVM_A1_PCMCIA
-extern int setup_avm_a1_pcmcia(struct IsdnCard *card);
-#endif
-
-#if CARD_FRITZPCI
-extern int setup_avm_pcipnp(struct IsdnCard *card);
-#endif
-
-#if CARD_ELSA
-extern int setup_elsa(struct IsdnCard *card);
-#endif
-
#if CARD_IX1MICROR2
extern int setup_ix1micro(struct IsdnCard *card);
#endif
-#if CARD_DIEHLDIVA
-extern int setup_diva(struct IsdnCard *card);
-#endif
-
#if CARD_ASUSCOM
extern int setup_asuscom(struct IsdnCard *card);
#endif
@@ -504,10 +476,6 @@ extern int setup_asuscom(struct IsdnCard *card);
extern int setup_TeleInt(struct IsdnCard *card);
#endif
-#if CARD_SEDLBAUER
-extern int setup_sedlbauer(struct IsdnCard *card);
-#endif
-
#if CARD_SPORTSTER
extern int setup_sportster(struct IsdnCard *card);
#endif
@@ -524,18 +492,6 @@ extern int setup_netjet_s(struct IsdnCard *card);
extern int setup_hfcs(struct IsdnCard *card);
#endif
-#if CARD_HFC_PCI
-extern int setup_hfcpci(struct IsdnCard *card);
-#endif
-
-#if CARD_HFC_SX
-extern int setup_hfcsx(struct IsdnCard *card);
-#endif
-
-#if CARD_NICCY
-extern int setup_niccy(struct IsdnCard *card);
-#endif
-
#if CARD_ISURF
extern int setup_isurf(struct IsdnCard *card);
#endif
@@ -544,22 +500,6 @@ extern int setup_isurf(struct IsdnCard *card);
extern int setup_saphir(struct IsdnCard *card);
#endif
-#if CARD_BKM_A4T
-extern int setup_bkm_a4t(struct IsdnCard *card);
-#endif
-
-#if CARD_SCT_QUADRO
-extern int setup_sct_quadro(struct IsdnCard *card);
-#endif
-
-#if CARD_GAZEL
-extern int setup_gazel(struct IsdnCard *card);
-#endif
-
-#if CARD_W6692
-extern int setup_w6692(struct IsdnCard *card);
-#endif
-
#if CARD_NETJET_U
extern int setup_netjet_u(struct IsdnCard *card);
#endif
diff --git a/drivers/isdn/hisax/hisax.h b/drivers/isdn/hisax/hisax.h
index 6ead6314..7e1d2a6 100644
--- a/drivers/isdn/hisax/hisax.h
+++ b/drivers/isdn/hisax/hisax.h
@@ -1350,3 +1350,63 @@ static inline struct pci_dev *hisax_find_pci_device(unsigned int vendor,
}
#endif
+
+#if CARD_TELES3
+int setup_teles3(struct IsdnCard *card);
+#endif
+
+#if CARD_TELESPCI
+int setup_telespci(struct IsdnCard *card);
+#endif
+
+#if CARD_S0BOX
+int setup_s0box(struct IsdnCard *card);
+#endif
+
+#if CARD_AVM_A1_PCMCIA
+int setup_avm_a1_pcmcia(struct IsdnCard *card);
+#endif
+
+#if CARD_FRITZPCI
+int setup_avm_pcipnp(struct IsdnCard *card);
+#endif
+
+#if CARD_ELSA
+int setup_elsa(struct IsdnCard *card);
+#endif
+
+#if CARD_DIEHLDIVA
+int setup_diva(struct IsdnCard *card);
+#endif
+
+#if CARD_SEDLBAUER
+int setup_sedlbauer(struct IsdnCard *card);
+#endif
+
+#if CARD_HFC_PCI
+int setup_hfcpci(struct IsdnCard *card);
+#endif
+
+#if CARD_HFC_SX
+int setup_hfcsx(struct IsdnCard *card);
+#endif
+
+#if CARD_NICCY
+int setup_niccy(struct IsdnCard *card);
+#endif
+
+#if CARD_BKM_A4T
+int setup_bkm_a4t(struct IsdnCard *card);
+#endif
+
+#if CARD_SCT_QUADRO
+int setup_sct_quadro(struct IsdnCard *card);
+#endif
+
+#if CARD_GAZEL
+int setup_gazel(struct IsdnCard *card);
+#endif
+
+#if CARD_W6692
+int setup_w6692(struct IsdnCard *card);
+#endif
--
2.7.4
^ permalink raw reply related
* [PATCH 4/6] isdn/hisax: clean function declaration in hscx.c up
From: Baoyou Xie @ 2016-09-24 5:24 UTC (permalink / raw)
To: isdn; +Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get 1 warning when building kernel with W=1:
drivers/isdn/hisax/hscx.c:175:1: warning: no previous prototype for 'open_hscxstate' [-Wmissing-prototypes]
In fact, this function is declared in
drivers/isdn/hisax/elsa_ser.c, but should be
declard in a header file, thus can be recognized in other file.
So this patch moves the declaration into drivers/isdn/hisax/hscx.h.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/hisax/elsa_ser.c | 2 +-
drivers/isdn/hisax/hscx.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/isdn/hisax/elsa_ser.c b/drivers/isdn/hisax/elsa_ser.c
index a2a358c..34ccc18 100644
--- a/drivers/isdn/hisax/elsa_ser.c
+++ b/drivers/isdn/hisax/elsa_ser.c
@@ -10,6 +10,7 @@
#include <linux/serial.h>
#include <linux/serial_reg.h>
#include <linux/slab.h>
+#include "hscx.h"
#define MAX_MODEM_BUF 256
#define WAKEUP_CHARS (MAX_MODEM_BUF / 2)
@@ -419,7 +420,6 @@ static void rs_interrupt_elsa(struct IsdnCardState *cs)
#endif
}
-extern int open_hscxstate(struct IsdnCardState *cs, struct BCState *bcs);
extern void modehscx(struct BCState *bcs, int mode, int bc);
extern void hscx_l2l1(struct PStack *st, int pr, void *arg);
diff --git a/drivers/isdn/hisax/hscx.h b/drivers/isdn/hisax/hscx.h
index 1148b4b..fa7bf16 100644
--- a/drivers/isdn/hisax/hscx.h
+++ b/drivers/isdn/hisax/hscx.h
@@ -39,3 +39,4 @@ extern void modehscx(struct BCState *bcs, int mode, int bc);
extern void clear_pending_hscx_ints(struct IsdnCardState *cs);
extern void inithscx(struct IsdnCardState *cs);
extern void inithscxisac(struct IsdnCardState *cs, int part);
+int open_hscxstate(struct IsdnCardState *cs, struct BCState *bcs);
--
2.7.4
^ permalink raw reply related
* [PATCH 5/6] mISDN: mark symbols static where possible
From: Baoyou Xie @ 2016-09-24 5:26 UTC (permalink / raw)
To: isdn, davem; +Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get a few warnings when building kernel with W=1:
drivers/isdn/mISDN/layer2.c:120:1: warning: no previous declaration for 'l2headersize' [-Wmissing-declarations]
drivers/isdn/mISDN/layer2.c:127:1: warning: no previous declaration for 'l2addrsize' [-Wmissing-declarations]
drivers/isdn/mISDN/layer2.c:379:1: warning: no previous declaration for 'cansend' [-Wmissing-declarations]
drivers/isdn/mISDN/layer2.c:679:1: warning: no previous declaration for 'stop_t200' [-Wmissing-declarations]
....
In fact, these functions are only used in the file in which they are
declared and don't need a declaration, but can be made static.
So this patch marks these functions with 'static'.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/mISDN/layer2.c | 44 ++++++++++++++++++++++----------------------
1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/drivers/isdn/mISDN/layer2.c b/drivers/isdn/mISDN/layer2.c
index 5eb380a..f6ab6027 100644
--- a/drivers/isdn/mISDN/layer2.c
+++ b/drivers/isdn/mISDN/layer2.c
@@ -116,14 +116,14 @@ l2m_debug(struct FsmInst *fi, char *fmt, ...)
va_end(va);
}
-inline u_int
+static inline u_int
l2headersize(struct layer2 *l2, int ui)
{
return ((test_bit(FLG_MOD128, &l2->flag) && (!ui)) ? 2 : 1) +
(test_bit(FLG_LAPD, &l2->flag) ? 2 : 1);
}
-inline u_int
+static inline u_int
l2addrsize(struct layer2 *l2)
{
return test_bit(FLG_LAPD, &l2->flag) ? 2 : 1;
@@ -375,7 +375,7 @@ ReleaseWin(struct layer2 *l2)
"isdnl2 freed %d skbuffs in release\n", cnt);
}
-inline unsigned int
+static inline unsigned int
cansend(struct layer2 *l2)
{
unsigned int p1;
@@ -387,7 +387,7 @@ cansend(struct layer2 *l2)
return (p1 < l2->window) && !test_bit(FLG_PEER_BUSY, &l2->flag);
}
-inline void
+static inline void
clear_exception(struct layer2 *l2)
{
test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
@@ -435,25 +435,25 @@ enqueue_ui(struct layer2 *l2, struct sk_buff *skb)
dev_kfree_skb(skb);
}
-inline int
+static inline int
IsUI(u_char *data)
{
return (data[0] & 0xef) == UI;
}
-inline int
+static inline int
IsUA(u_char *data)
{
return (data[0] & 0xef) == UA;
}
-inline int
+static inline int
IsDM(u_char *data)
{
return (data[0] & 0xef) == DM;
}
-inline int
+static inline int
IsDISC(u_char *data)
{
return (data[0] & 0xef) == DISC;
@@ -468,7 +468,7 @@ IsRR(u_char *data, struct layer2 *l2)
return (data[0] & 0xf) == 1;
}
-inline int
+static inline int
IsSFrame(u_char *data, struct layer2 *l2)
{
register u_char d = *data;
@@ -478,7 +478,7 @@ IsSFrame(u_char *data, struct layer2 *l2)
return ((d & 0xf3) == 1) && ((d & 0x0c) != 0x0c);
}
-inline int
+static inline int
IsSABME(u_char *data, struct layer2 *l2)
{
u_char d = data[0] & ~0x10;
@@ -486,20 +486,20 @@ IsSABME(u_char *data, struct layer2 *l2)
return test_bit(FLG_MOD128, &l2->flag) ? d == SABME : d == SABM;
}
-inline int
+static inline int
IsREJ(u_char *data, struct layer2 *l2)
{
return test_bit(FLG_MOD128, &l2->flag) ?
data[0] == REJ : (data[0] & 0xf) == REJ;
}
-inline int
+static inline int
IsFRMR(u_char *data)
{
return (data[0] & 0xef) == FRMR;
}
-inline int
+static inline int
IsRNR(u_char *data, struct layer2 *l2)
{
return test_bit(FLG_MOD128, &l2->flag) ?
@@ -645,13 +645,13 @@ send_uframe(struct layer2 *l2, struct sk_buff *skb, u_char cmd, u_char cr)
}
-inline u_char
+static inline u_char
get_PollFlag(struct layer2 *l2, struct sk_buff *skb)
{
return skb->data[l2addrsize(l2)] & 0x10;
}
-inline u_char
+static inline u_char
get_PollFlagFree(struct layer2 *l2, struct sk_buff *skb)
{
u_char PF;
@@ -661,28 +661,28 @@ get_PollFlagFree(struct layer2 *l2, struct sk_buff *skb)
return PF;
}
-inline void
+static inline void
start_t200(struct layer2 *l2, int i)
{
mISDN_FsmAddTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, i);
test_and_set_bit(FLG_T200_RUN, &l2->flag);
}
-inline void
+static inline void
restart_t200(struct layer2 *l2, int i)
{
mISDN_FsmRestartTimer(&l2->t200, l2->T200, EV_L2_T200, NULL, i);
test_and_set_bit(FLG_T200_RUN, &l2->flag);
}
-inline void
+static inline void
stop_t200(struct layer2 *l2, int i)
{
if (test_and_clear_bit(FLG_T200_RUN, &l2->flag))
mISDN_FsmDelTimer(&l2->t200, i);
}
-inline void
+static inline void
st5_dl_release_l2l3(struct layer2 *l2)
{
int pr;
@@ -694,7 +694,7 @@ st5_dl_release_l2l3(struct layer2 *l2)
l2up_create(l2, pr, 0, NULL);
}
-inline void
+static inline void
lapb_dl_release_l2l3(struct layer2 *l2, int f)
{
if (test_bit(FLG_LAPB, &l2->flag))
@@ -1129,7 +1129,7 @@ enquiry_cr(struct layer2 *l2, u_char typ, u_char cr, u_char pf)
enqueue_super(l2, skb);
}
-inline void
+static inline void
enquiry_response(struct layer2 *l2)
{
if (test_bit(FLG_OWN_BUSY, &l2->flag))
@@ -1139,7 +1139,7 @@ enquiry_response(struct layer2 *l2)
test_and_clear_bit(FLG_ACK_PEND, &l2->flag);
}
-inline void
+static inline void
transmit_enquiry(struct layer2 *l2)
{
if (test_bit(FLG_OWN_BUSY, &l2->flag))
--
2.7.4
^ permalink raw reply related
* [PATCH 6/6] mISDN: remove unused function
From: Baoyou Xie @ 2016-09-24 5:28 UTC (permalink / raw)
To: isdn, davem; +Cc: netdev, linux-kernel, arnd, baoyou.xie, xie.baoyou
We get 1 warning when building kernel with W=1:
drivers/isdn/mISDN/layer2.c:463:1: warning: no previous declaration for 'IsRR' [-Wmissing-declarations]
In fact, this function is called by no one and not exported,
so this patch removes it.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
---
drivers/isdn/mISDN/layer2.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/drivers/isdn/mISDN/layer2.c b/drivers/isdn/mISDN/layer2.c
index f6ab6027..2519510 100644
--- a/drivers/isdn/mISDN/layer2.c
+++ b/drivers/isdn/mISDN/layer2.c
@@ -459,15 +459,6 @@ IsDISC(u_char *data)
return (data[0] & 0xef) == DISC;
}
-inline int
-IsRR(u_char *data, struct layer2 *l2)
-{
- if (test_bit(FLG_MOD128, &l2->flag))
- return data[0] == RR;
- else
- return (data[0] & 0xf) == 1;
-}
-
static inline int
IsSFrame(u_char *data, struct layer2 *l2)
{
--
2.7.4
^ permalink raw reply related
* Re: [PATCH 1/2] bpf samples: fix compiler errors with sockex2 and sockex3
From: Alexei Starovoitov @ 2016-09-24 7:25 UTC (permalink / raw)
To: Naveen N. Rao
Cc: linux-kernel, linuxppc-dev, netdev, David S. Miller,
Michael Ellerman, Alexei Starovoitov, Daniel Borkmann,
Ananth N Mavinakayanahalli
In-Reply-To: <7b29fba6073924dc4c9e7d639eefb0b15a98660d.1474661952.git.naveen.n.rao@linux.vnet.ibm.com>
On Sat, Sep 24, 2016 at 02:10:04AM +0530, Naveen N. Rao wrote:
> These samples fail to compile as 'struct flow_keys' conflicts with
> definition in net/flow_dissector.h. Fix the same by renaming the
> structure used in the sample.
>
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thanks for the fix.
Acked-by: Alexei Starovoitov <ast@kernel.org>
^ permalink raw reply
* Re: [PATCH 2/2] bpf samples: update tracex5 sample to use __seccomp_filter
From: Alexei Starovoitov @ 2016-09-24 7:27 UTC (permalink / raw)
To: Naveen N. Rao
Cc: linux-kernel, linuxppc-dev, netdev, David S. Miller,
Michael Ellerman, Alexei Starovoitov, Daniel Borkmann,
Ananth N Mavinakayanahalli
In-Reply-To: <8e5ab9853508240e901260b1af36243c4d744083.1474661952.git.naveen.n.rao@linux.vnet.ibm.com>
On Sat, Sep 24, 2016 at 02:10:05AM +0530, Naveen N. Rao wrote:
> seccomp_phase1() does not exist anymore. Instead, update sample to use
> __seccomp_filter(). While at it, set max locked memory to unlimited.
>
> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
^ permalink raw reply
* Re: [PATCH 2/3] bpf powerpc: implement support for tail calls
From: Alexei Starovoitov @ 2016-09-24 7:30 UTC (permalink / raw)
To: Daniel Borkmann
Cc: Naveen N. Rao, linux-kernel, linuxppc-dev, netdev,
Michael Ellerman, Alexei Starovoitov, David S. Miller,
Ananth N Mavinakayanahalli
In-Reply-To: <57E5ADD2.7090308@iogearbox.net>
On Sat, Sep 24, 2016 at 12:33:54AM +0200, Daniel Borkmann wrote:
> On 09/23/2016 10:35 PM, Naveen N. Rao wrote:
> >Tail calls allow JIT'ed eBPF programs to call into other JIT'ed eBPF
> >programs. This can be achieved either by:
> >(1) retaining the stack setup by the first eBPF program and having all
> >subsequent eBPF programs re-using it, or,
> >(2) by unwinding/tearing down the stack and having each eBPF program
> >deal with its own stack as it sees fit.
> >
> >To ensure that this does not create loops, there is a limit to how many
> >tail calls can be done (currently 32). This requires the JIT'ed code to
> >maintain a count of the number of tail calls done so far.
> >
> >Approach (1) is simple, but requires every eBPF program to have (almost)
> >the same prologue/epilogue, regardless of whether they need it. This is
> >inefficient for small eBPF programs which may not sometimes need a
> >prologue at all. As such, to minimize impact of tail call
> >implementation, we use approach (2) here which needs each eBPF program
> >in the chain to use its own prologue/epilogue. This is not ideal when
> >many tail calls are involved and when all the eBPF programs in the chain
> >have similar prologue/epilogue. However, the impact is restricted to
> >programs that do tail calls. Individual eBPF programs are not affected.
> >
> >We maintain the tail call count in a fixed location on the stack and
> >updated tail call count values are passed in through this. The very
> >first eBPF program in a chain sets this up to 0 (the first 2
> >instructions). Subsequent tail calls skip the first two eBPF JIT
> >instructions to maintain the count. For programs that don't do tail
> >calls themselves, the first two instructions are NOPs.
> >
> >Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
>
> Thanks for adding support, Naveen, that's really great! I think 2) seems
> fine as well in this context as prologue size can vary quite a bit here,
> and depending on program types likelihood of tail call usage as well (but
> I wouldn't expect deep nesting). Thanks a lot!
Great stuff. In this circumstances approach 2 makes sense to me as well.
^ permalink raw reply
* Re: [RFC v2 00/10] Landlock LSM: Unprivileged sandboxing
From: Pavel Machek @ 2016-09-24 7:45 UTC (permalink / raw)
To: Mickaël Salaün
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, Alexei Starovoitov,
Andy Lutomirski, Arnd Bergmann, Casey Schaufler, Daniel Borkmann,
Daniel Mack, David Drysdale, David S . Miller, Elena Reshetova,
James Morris, Kees Cook, Paul Moore, Sargun Dhillon,
Serge E . Hallyn, Will Drewry,
kernel-hardening-ZwoEplunGu1jrUoiu81ncdBPR1lH4CV8,
linux-api-u79uwXL29TY76Z2rM5mHXA,
linux-security-module-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <57E16D07.4050301-WFhQfpSGs3bR7s880joybQ@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 1438 bytes --]
On Tue 2016-09-20 19:08:23, Mickaël Salaün wrote:
>
> On 15/09/2016 11:19, Pavel Machek wrote:
> > Hi!
> >
> >> This series is a proof of concept to fill some missing part of seccomp as the
> >> ability to check syscall argument pointers or creating more dynamic security
> >> policies. The goal of this new stackable Linux Security Module (LSM) called
> >> Landlock is to allow any process, including unprivileged ones, to create
> >> powerful security sandboxes comparable to the Seatbelt/XNU Sandbox or the
> >> OpenBSD Pledge. This kind of sandbox help to mitigate the security impact of
> >> bugs or unexpected/malicious behaviors in userland applications.
> >>
> >> The first RFC [1] was focused on extending seccomp while staying at the syscall
> >> level. This brought a working PoC but with some (mitigated) ToCToU race
> >> conditions due to the seccomp ptrace hole (now fixed) and the non-atomic
> >> syscall argument evaluation (hence the LSM hooks).
> >
> > Long and nice description follows. Should it go to Documentation/
> > somewhere?
> >
> > Because some documentation would be useful...
>
> Right, but I was looking for feedback before investing in documentation. :)
Heh. And I was hoping to learn what I'm reviewing. Too bad :-).
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]
^ permalink raw reply
* Re: [PATCH 6/6] mISDN: remove unused function
From: Arnd Bergmann @ 2016-09-24 8:42 UTC (permalink / raw)
To: Baoyou Xie; +Cc: isdn, davem, netdev, linux-kernel, xie.baoyou
In-Reply-To: <1474694882-25427-1-git-send-email-baoyou.xie@linaro.org>
On Saturday, September 24, 2016 1:28:02 PM CEST Baoyou Xie wrote:
> diff --git a/drivers/isdn/mISDN/layer2.c b/drivers/isdn/mISDN/layer2.c
> index f6ab6027..2519510 100644
> --- a/drivers/isdn/mISDN/layer2.c
> +++ b/drivers/isdn/mISDN/layer2.c
> @@ -459,15 +459,6 @@ IsDISC(u_char *data)
> return (data[0] & 0xef) == DISC;
> }
>
> -inline int
> -IsRR(u_char *data, struct layer2 *l2)
> -{
> - if (test_bit(FLG_MOD128, &l2->flag))
> - return data[0] == RR;
> - else
> - return (data[0] & 0xf) == 1;
> -}
> -
> static inline int
> IsSFrame(u_char *data, struct layer2 *l2)
> {
> --
>
This is not wrong, but it might be nicer to just
make this one as 'static inline' as well like the other
ones for consistency.
Note that static inline functions don't cause a warning
when they are unused.
Arnd
^ permalink raw reply
* Re: [PATCH 4/6] isdn/hisax: clean function declaration in hscx.c up
From: Arnd Bergmann @ 2016-09-24 8:45 UTC (permalink / raw)
To: Baoyou Xie; +Cc: isdn, netdev, linux-kernel, xie.baoyou
In-Reply-To: <1474694662-7527-1-git-send-email-baoyou.xie@linaro.org>
On Saturday, September 24, 2016 1:24:22 PM CEST Baoyou Xie wrote:
> }
>
> -extern int open_hscxstate(struct IsdnCardState *cs, struct BCState *bcs);
> extern void modehscx(struct BCState *bcs, int mode, int bc);
> extern void hscx_l2l1(struct PStack *st, int pr, void *arg);
>
The change makes sense, but I would remove the other two declarations
as well, as extern declarations don't belong into .c files.
As far as I can tell, modehscx() already has a declaration in hscx.h,
while hscx_l2l1() doesn't, and the declaration here should be
moved as well.
> diff --git a/drivers/isdn/hisax/hscx.h b/drivers/isdn/hisax/hscx.h
> index 1148b4b..fa7bf16 100644
> --- a/drivers/isdn/hisax/hscx.h
> +++ b/drivers/isdn/hisax/hscx.h
> @@ -39,3 +39,4 @@ extern void modehscx(struct BCState *bcs, int mode, int bc);
> extern void clear_pending_hscx_ints(struct IsdnCardState *cs);
> extern void inithscx(struct IsdnCardState *cs);
> extern void inithscxisac(struct IsdnCardState *cs, int part);
> +int open_hscxstate(struct IsdnCardState *cs, struct BCState *bcs);
For consistency, I would add 'extern' here. We normally leave that out,
but I think if there are lots of declarations in a header file that all
have it, it's better if they are all the same.
Arnd
^ permalink raw reply
* Re: [PATCH 3/6] isdn/hisax: add function declarations
From: Arnd Bergmann @ 2016-09-24 8:47 UTC (permalink / raw)
To: Baoyou Xie
Cc: isdn, linux-kernel.bfrz, davem, netdev, linux-kernel, xie.baoyou
In-Reply-To: <1474694507-7379-1-git-send-email-baoyou.xie@linaro.org>
On Saturday, September 24, 2016 1:21:47 PM CEST Baoyou Xie wrote:
> --- a/drivers/isdn/hisax/config.c
> +++ b/drivers/isdn/hisax/config.c
> @@ -460,42 +460,14 @@ __setup("hisax=", HiSax_setup);
> extern int setup_teles0(struct IsdnCard *card);
> #endif
>
> -#if CARD_TELES3
> -extern int setup_teles3(struct IsdnCard *card);
> -#endif
...
> -#if CARD_TELESPCI
> -extern int setup_telespci(struct IsdnCard *card);
> -#endif
> -
> #if CARD_AVM_A1
> extern int setup_avm_a1(struct IsdnCard *card);
> #endif
It seems odd that you remove some but not all declarations
here. Please do all of them at once.
> @@ -1350,3 +1350,63 @@ static inline struct pci_dev *hisax_find_pci_device(unsigned int vendor,
> }
>
> #endif
> +
> +#if CARD_TELES3
> +int setup_teles3(struct IsdnCard *card);
> +#endif
> +
> +#if CARD_TELESPCI
> +int setup_telespci(struct IsdnCard *card);
> +#endif
> +
When you add the declarations here, just leave out the #if guards,
and put all the declarations here unconditionally, as we normally
do in the kernel.
Arnd
^ permalink raw reply
* Re: [PATCH 1/6] isdn/eicon: add function declarations
From: Arnd Bergmann @ 2016-09-24 8:55 UTC (permalink / raw)
To: Baoyou Xie; +Cc: mac, isdn, netdev, linux-kernel, xie.baoyou
In-Reply-To: <1474694204-21563-1-git-send-email-baoyou.xie@linaro.org>
On Saturday, September 24, 2016 1:16:44 PM CEST Baoyou Xie wrote:
> We get a few warnings when building kernel with W=1:
> drivers/isdn/hardware/eicon/diddfunc.c:95:12: warning: no previous prototype for 'diddfunc_init' [-Wmissing-prototypes]
> drivers/isdn/hardware/eicon/s_4bri.c:128:6: warning: no previous prototype for 'start_qBri_hardware' [-Wmissing-prototypes]
> drivers/isdn/hardware/eicon/idifunc.c:243:12: warning: no previous prototype for 'idifunc_init' [-Wmissing-prototypes]
> drivers/isdn/hardware/eicon/capifunc.c:217:6: warning: no previous prototype for 'api_remove_complete' [-Wmissing-prototypes]
> ....
>
> In fact, these functions need be declare in some header files.
>
> So this patch adds function declarations in
> drivers/isdn/hardware/eicon/di_defs.h,
> drivers/isdn/hardware/eicon/capifunc.h,
> drivers/isdn/hardware/eicon/xdi_adapter.h.
>
> Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org>
Nice cleanup!
>
> diff --git a/drivers/isdn/hardware/eicon/capifunc.c b/drivers/isdn/hardware/eicon/capifunc.c
> index 7a0bdbd..869b98e 100644
> --- a/drivers/isdn/hardware/eicon/capifunc.c
> +++ b/drivers/isdn/hardware/eicon/capifunc.c
> @@ -55,9 +55,6 @@ static void diva_release_appl(struct capi_ctr *, __u16);
> static char *diva_procinfo(struct capi_ctr *);
> static u16 diva_send_message(struct capi_ctr *,
> diva_os_message_buffer_s *);
> -extern void diva_os_set_controller_struct(struct capi_ctr *);
> -
> -extern void DIVA_DIDD_Read(DESCRIPTOR *, int);
>
> /*
> * debug
There are a couple of other 'extern' declarations in this file,
please do them at all once.
Note that there are also some extern declarations for variables in
this .c files of this driver, so it makes sense to do the variables
and the function declarations at the same time.
> diff --git a/drivers/isdn/hardware/eicon/diva.c b/drivers/isdn/hardware/eicon/diva.c
> index d91dd58..9693add 100644
> --- a/drivers/isdn/hardware/eicon/diva.c
> +++ b/drivers/isdn/hardware/eicon/diva.c
> @@ -28,8 +28,6 @@
>
> PISDN_ADAPTER IoAdapters[MAX_ADAPTER];
> extern IDI_CALL Requests[MAX_ADAPTER];
> -extern int create_adapter_proc(diva_os_xdi_adapter_t *a);
> -extern void remove_adapter_proc(diva_os_xdi_adapter_t *a);
Requests[] is another such example. This is particularly bad,
because the name is extremely generic, and can cause conflicts
when another driver uses the same identifier for a global symbol.
Ideally it should be renamed with to 'diva_requests'.
> --- a/drivers/isdn/hardware/eicon/divasproc.c
> +++ b/drivers/isdn/hardware/eicon/divasproc.c
> @@ -34,8 +34,6 @@
>
>
> extern PISDN_ADAPTER IoAdapters[MAX_ADAPTER];
> -extern void divas_get_version(char *);
> -extern void diva_get_vserial_number(PISDN_ADAPTER IoAdapter, char *buf);
>
same for IoAdapters.
> static void diva_get_extended_adapter_features(DIVA_CAPI_ADAPTER *a);
> @@ -224,20 +223,10 @@ static void diva_free_dma_descriptor(PLCI *plci, int nr);
> /* external function prototypes */
> /*------------------------------------------------------------------*/
>
> -extern byte MapController(byte);
> extern byte UnMapController(byte);
The comment "external function prototypes" should be removed along with the
actual prototypes.
> #define MapId(Id)(((Id) & 0xffffff00L) | MapController((byte)(Id)))
> #define UnMapId(Id)(((Id) & 0xffffff00L) | UnMapController((byte)(Id)))
and probably the macros can get moved as well for consistency.
> -extern int diva_card_read_xlog(diva_os_xdi_adapter_t *a);
> -
> /*
> ** IMPORTS
> */
> -extern void prepare_pri_functions(PISDN_ADAPTER IoAdapter);
> -extern void prepare_pri2_functions(PISDN_ADAPTER IoAdapter);
> -extern void diva_xdi_display_adapter_features(int card);
> -
Another comment that should go.
Arnd
^ permalink raw reply
* RE RE
From: Mr.Campbell Neiman @ 2016-09-24 6:04 UTC (permalink / raw)
This message is the last notification about U USD14.5 million bearing our
Name as Beneficiary, all effort to reach you have not be successful,
Please if you Receive this message kindly respond back stating your Desire
to make the claim, Reconfirm your full name and age Mr. Mr.Campbell Neiman
^ permalink raw reply
* Re: [PATCH] brcmfmac: fix memory leak in brcmf_fill_bss_param
From: Kalle Valo @ 2016-09-24 10:27 UTC (permalink / raw)
To: Rafał Miłecki
Cc: Rafał Miłecki, Arend van Spriel, Franky Lin,
Hante Meuleman, Pieter-Paul Giesberts, Franky (Zhenhui) Lin,
linux-wireless, brcm80211-dev-list.pdl, netdev, linux-kernel
In-Reply-To: <20160921062327.28729-1-zajec5@gmail.com>
Rafał Miłecki <zajec5@gmail.com> writes:
> From: Rafał Miłecki <rafal@milecki.pl>
>
> This function is called from get_station callback which means that every
> time user space was getting/dumping station(s) we were leaking 2 KiB.
>
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
> Fixes: 1f0dc59a6de ("brcmfmac: rework .get_station() callback")
> Cc: stable@vger.kernel.org # 4.2+
> ---
> Kalle, ideally this should go as 4.8 fix, but I'm aware it's quite late.
> If you are not planning to send another pull request, just get it for
> the next release and let's let stable guys backport it.
An old memory leak is not severe enough for 4.8 at this stage, so I'll
queue this to 4.9.
BTW, either my Gnus or my SMTP server (I haven't bothered to check yet
why exactly) don't like the names with style of "(open list:NETWORKING
DRIVERS)" in the CC list, I have to edit them away everytime I reply.
Does anyone have any ideas why that's happening just to me?
--
Kalle Valo
^ permalink raw reply
* Re: [PATCH] mlx5: Add ndo_poll_controller() implementation
From: Saeed Mahameed @ 2016-09-24 10:51 UTC (permalink / raw)
To: Calvin Owens
Cc: Saeed Mahameed, Matan Barak, Leon Romanovsky, Linux Netdev List,
linux-kernel, kernel-team
In-Reply-To: <a1f1b99a1f13786722f9d30636173ad1a5b5b5ad.1474661274.git.calvinowens@fb.com>
On Fri, Sep 23, 2016 at 11:13 PM, Calvin Owens <calvinowens@fb.com> wrote:
> This implements ndo_poll_controller in net_device_ops for mlx5, which is
> necessary to use netconsole with this driver.
>
> Signed-off-by: Calvin Owens <calvinowens@fb.com>
> ---
> drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> index 2459c7f..439476f 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> @@ -2786,6 +2786,20 @@ static void mlx5e_tx_timeout(struct net_device *dev)
> schedule_work(&priv->tx_timeout_work);
> }
>
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> +/* Fake "interrupt" called by netpoll (eg netconsole) to send skbs without
> + * reenabling interrupts.
> + */
> +static void mlx5e_netpoll(struct net_device *dev)
> +{
> + struct mlx5e_priv *priv = netdev_priv(dev);
> + int i, nr_sq = priv->params.num_channels * priv->params.num_tc;
> +
> + for (i = 0; i < nr_sq; i++)
> + napi_schedule(priv->txq_to_sq_map[i]->cq.napi);
Hi Calvin,
Basically all CQs on the same channel are sharing the same napi, so
here you will end up calling napi_schedule more than once for each
napi (channel).
iterating over the SQs map is irrelevant here, all you need to do is
to iterate over the channels:
for (i = 0; i < priv->params.num_channels; i++)
napi_schedule(priv->channel[i]->napi);
Thanks,
Saeed.
> +}
> +#endif
> +
> static const struct net_device_ops mlx5e_netdev_ops_basic = {
> .ndo_open = mlx5e_open,
> .ndo_stop = mlx5e_close,
> @@ -2805,6 +2819,9 @@ static const struct net_device_ops mlx5e_netdev_ops_basic = {
> .ndo_rx_flow_steer = mlx5e_rx_flow_steer,
> #endif
> .ndo_tx_timeout = mlx5e_tx_timeout,
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> + .ndo_poll_controller = mlx5e_netpoll,
> +#endif
> };
>
> static const struct net_device_ops mlx5e_netdev_ops_sriov = {
> @@ -2836,6 +2853,9 @@ static const struct net_device_ops mlx5e_netdev_ops_sriov = {
> .ndo_set_vf_link_state = mlx5e_set_vf_link_state,
> .ndo_get_vf_stats = mlx5e_get_vf_stats,
> .ndo_tx_timeout = mlx5e_tx_timeout,
> +#ifdef CONFIG_NET_POLL_CONTROLLER
> + .ndo_poll_controller = mlx5e_netpoll,
> +#endif
> };
>
> static int mlx5e_check_required_hca_cap(struct mlx5_core_dev *mdev)
> --
> 2.9.3
>
^ permalink raw reply
* Re: [Intel-wired-lan] [PATCH net-next v2 1/2] i40e: remove superfluous I40E_DEBUG_USER statement
From: Stefan Assmann @ 2016-09-24 11:13 UTC (permalink / raw)
To: Alexander Duyck, David Miller; +Cc: intel-wired-lan, Netdev
In-Reply-To: <CAKgT0UfxYzn1uqHLU+=7V4=NnYQX8rxLosxLg4Orsg_qEpGTKw@mail.gmail.com>
On 24.09.2016 04:48, Alexander Duyck wrote:
> On Fri, Sep 23, 2016 at 6:30 AM, Stefan Assmann <sassmann@kpanic.de> wrote:
>> This debug statement is confusing and never set in the code. Any debug
>> output should be guarded by the proper I40E_DEBUG_* statement which can
>> be enabled via the debug module parameter or ethtool.
>> Remove or convert the I40E_DEBUG_USER cases to I40E_DEBUG_INIT.
>>
>> v2: re-add setting the debug_mask in i40e_set_msglevel() so that the
>> debug level can still be altered via ethtool msglvl.
>>
>> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
>> ---
>> drivers/net/ethernet/intel/i40e/i40e_common.c | 3 ---
>> drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 6 -----
>> drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 3 +--
>> drivers/net/ethernet/intel/i40e/i40e_main.c | 35 +++++++++++++-------------
>> drivers/net/ethernet/intel/i40e/i40e_type.h | 2 --
>> 5 files changed, 18 insertions(+), 31 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_common.c b/drivers/net/ethernet/intel/i40e/i40e_common.c
>> index 2154a34..8ccb09c 100644
>> --- a/drivers/net/ethernet/intel/i40e/i40e_common.c
>> +++ b/drivers/net/ethernet/intel/i40e/i40e_common.c
>> @@ -3207,9 +3207,6 @@ static void i40e_parse_discover_capabilities(struct i40e_hw *hw, void *buff,
>> break;
>> case I40E_AQ_CAP_ID_MSIX:
>> p->num_msix_vectors = number;
>> - i40e_debug(hw, I40E_DEBUG_INIT,
>> - "HW Capability: MSIX vector count = %d\n",
>> - p->num_msix_vectors);
>> break;
>> case I40E_AQ_CAP_ID_VF_MSIX:
>> p->num_msix_vectors_vf = number;
>
> I'm assuming this is dropped because you considered it redundant with
> the dump in i40e_get_capabilities. If so it would have been nice to
> see this called out in your patch description somewhere as it doesn't
> jive with the rest of the patch since you are stripping something that
> is using I40E_DEBUG_INIT.
Hi Alex,
agreed, it seemed redundant. I'll make a note about it in the next
version when we have decided how to proceed.
>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
>> index 05cf9a7..e9c6f1c 100644
>> --- a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
>> +++ b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c
>> @@ -1210,12 +1210,6 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
>> u32 level;
>> cnt = sscanf(&cmd_buf[10], "%i", &level);
>> if (cnt) {
>> - if (I40E_DEBUG_USER & level) {
>> - pf->hw.debug_mask = level;
>> - dev_info(&pf->pdev->dev,
>> - "set hw.debug_mask = 0x%08x\n",
>> - pf->hw.debug_mask);
>> - }
>> pf->msg_enable = level;
>> dev_info(&pf->pdev->dev, "set msg_enable = 0x%08x\n",
>> pf->msg_enable);
>
> From what I can tell the interface is completely redundant as ethtool
> can already do this. I'd say it is okay to just remove this command
> and section entirely from the debugfs interface.
Yes, I didn't want to stray too far from what the description said and
just removed the I40E_DEBUG_USER related code.
>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
>> index 1835186..02f55ab 100644
>> --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
>> +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
>> @@ -987,8 +987,7 @@ static void i40e_set_msglevel(struct net_device *netdev, u32 data)
>> struct i40e_netdev_priv *np = netdev_priv(netdev);
>> struct i40e_pf *pf = np->vsi->back;
>>
>> - if (I40E_DEBUG_USER & data)
>> - pf->hw.debug_mask = data;
>> + pf->hw.debug_mask = data;
>> pf->msg_enable = data;
>> }
>>
>
> So the way I view this is that I40E_DEBUG_USER appears to be a flag
> that is being used to differentiate between some proprietary flags and
> the standard msg level. The problem is that msg_enable and debug_mask
> are playing off of two completely different bit definitions. For
> example how much sense does it make for NETIF_F_MSG_TX_DONE to map to
> I40E_DEBUG_DCB. If anything what should probably happen here is
> instead of dropping the if there probably needs to be an else.
As you said the flags don't match, which is part of the problem. What
tipped me of starting to work on this is, that the debug module
parameter doesn't do a thing atm and I had to debug some stuff during
driver MSI-X initialization. So my main pain point here is to get the
debug parameter in a sane state.
> This is one of many things on my list of items to fix since I have
> come back to Intel. It is just a matter of finding the time.
> Basically what I would really prefer to see here is us move all of the
> flags in i40e_debug_mask so that we didn't have any overlap with the
> NETIF_F_MSG_* flags unless there is a relation between the two.
That sounds like a good idea and I'm happy to join in. So for now, I
could drop the I40E_DEBUG_USER changes and just focus on making the
debug parameter usable. All the non-standard debug output could be
handled by I40E_DEBUG_USER or whatever better name we could for the
flag. The current name doesn't really explain what it's meant for.
>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
>> index 61b0fc4..56369761 100644
>> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
>> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
>> @@ -6665,16 +6665,19 @@ static int i40e_get_capabilities(struct i40e_pf *pf)
>> }
>> } while (err);
>>
>> - if (pf->hw.debug_mask & I40E_DEBUG_USER)
>> - dev_info(&pf->pdev->dev,
>> - "pf=%d, num_vfs=%d, msix_pf=%d, msix_vf=%d, fd_g=%d, fd_b=%d, pf_max_q=%d num_vsi=%d\n",
>> - pf->hw.pf_id, pf->hw.func_caps.num_vfs,
>> - pf->hw.func_caps.num_msix_vectors,
>> - pf->hw.func_caps.num_msix_vectors_vf,
>> - pf->hw.func_caps.fd_filters_guaranteed,
>> - pf->hw.func_caps.fd_filters_best_effort,
>> - pf->hw.func_caps.num_tx_qp,
>> - pf->hw.func_caps.num_vsis);
>> + i40e_debug(&pf->hw, I40E_DEBUG_INIT,
>> + "HW Capabilities: PF-id[%d] num_vfs=%d, msix_pf=%d, msix_vf=%d\n",
>> + pf->hw.pf_id,
>> + pf->hw.func_caps.num_vfs,
>> + pf->hw.func_caps.num_msix_vectors,
>> + pf->hw.func_caps.num_msix_vectors_vf);
>> + i40e_debug(&pf->hw, I40E_DEBUG_INIT,
>> + "HW Capabilities: PF-id[%d] fd_g=%d, fd_b=%d, pf_max_qp=%d num_vsis=%d\n",
>> + pf->hw.pf_id,
>> + pf->hw.func_caps.fd_filters_guaranteed,
>> + pf->hw.func_caps.fd_filters_best_effort,
>> + pf->hw.func_caps.num_tx_qp,
>> + pf->hw.func_caps.num_vsis);
>>
>> #define DEF_NUM_VSI (1 + (pf->hw.func_caps.fcoe ? 1 : 0) \
>> + pf->hw.func_caps.num_vfs)
>
> I'd say don't bother with this. There isn't any point.
OK, I thought the same thing but wasn't sure if anybody relies on this
info.
>> @@ -8495,14 +8498,10 @@ static int i40e_sw_init(struct i40e_pf *pf)
>> int err = 0;
>> int size;
>>
>> - pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE,
>> - (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK));
>> - if (debug != -1 && debug != I40E_DEFAULT_MSG_ENABLE) {
>> - if (I40E_DEBUG_USER & debug)
>> - pf->hw.debug_mask = debug;
>> - pf->msg_enable = netif_msg_init((debug & ~I40E_DEBUG_USER),
>> - I40E_DEFAULT_MSG_ENABLE);
>> - }
>> + pf->msg_enable = netif_msg_init(debug,
>> + NETIF_MSG_DRV |
>> + NETIF_MSG_PROBE |
>> + NETIF_MSG_LINK);
>>
>> /* Set default capability flags */
>> pf->flags = I40E_FLAG_RX_CSUM_ENABLED |
>
> Okay so I think I now see why there is confusion about how debug is
> used. The documentation in the driver is wrong for how it worked. It
> wasn't being passed as a 0-16, somebody implemented this as a 32 bit
> bitmask. So the question becomes how to fix it. The problem is with
> the patch as it is so far we end up with pf->msg_enable being
> populated but pf->hw.debug_mask never being populated. The values you
> are passing as the default don't make any sense either since they
> don't really map to the same functionality in I40e. They map to
> DEBUG_INIT, DEBUG_RELEASE, and an unused bit.
>
>> diff --git a/drivers/net/ethernet/intel/i40e/i40e_type.h b/drivers/net/ethernet/intel/i40e/i40e_type.h
>> index bd5f13b..7e88e35 100644
>> --- a/drivers/net/ethernet/intel/i40e/i40e_type.h
>> +++ b/drivers/net/ethernet/intel/i40e/i40e_type.h
>> @@ -85,8 +85,6 @@ enum i40e_debug_mask {
>> I40E_DEBUG_AQ_COMMAND = 0x06000000,
>> I40E_DEBUG_AQ = 0x0F000000,
>>
>> - I40E_DEBUG_USER = 0xF0000000,
>> -
>> I40E_DEBUG_ALL = 0xFFFFFFFF
>> };
>>
>
> This end piece is where the problem really lies. The problem
> statement for this would essentially be that the i40e driver uses the
> debug module parameter in a non-standard way. It is using a tg3 style
> bitmask to populate the fields, but then documenting it and coding
> part of it like it is expecting the default debug usage. To top it
> off it is doing the same kind of nonsense with the ethtool msg level
> interface.
>
> The one piece we probably need with all this in order to really "fix"
> the issue and still maintain some sense of functionality would be to
> look at adding something that would populate pf->hw.debug_mask. I'm
> half tempted to say that we could try adding another module parameter
> named i40e_debug that we could use like tg3 does with tg3_debug and
> change the debugfs interface to only modify that instead of messing
> with the msg level, but the fact is that would probably just be more
> confusing. For now what I would suggest doing is just splitting
> msg_enable and pf->hw.debug_mask and for now just default the value of
> pf->hw.debug_mask to I40E_DEFAULT_MSG_ENABLE. That way in a week or
> two after netdev/netconf we will hopefully had a chance to hash this
> all out and can find a better way to solve this.
I really appreciate your feedback. What you're suggesting makes sense.
Let's split the generic (msg_enable) debug information provided by the
debug parameter from driver specific debug information. Not sure I'd
like to see another module parameter, but that doesn't have to be
decided right away.
If you agree, I'll rewrite the patches to make a clear separation
between debug_mask and msg_enable, making the debug parameter actually
usable.
And we'll sort out the rest along the way.
Stefan
^ permalink raw reply
* Re: [PATCH net-next V3 0/5] mlx4 VF vlan protocol 802.1ad support
From: David Miller @ 2016-09-24 12:11 UTC (permalink / raw)
To: tariqt
Cc: netdev, eranbe, moshe, ogerlitz, john.fastabend, ariel.elior,
sathya.perla, ajit.khaparde, sriharsha.basavapatna, somnath.kotur,
jeffrey.t.kirsher, saeedm, Yuval.Mintz, Dept-GELinuxNICDev,
linux-net-drivers, ecree, bkenward
In-Reply-To: <1474535476-10662-1-git-send-email-tariqt@mellanox.com>
From: Tariq Toukan <tariqt@mellanox.com>
Date: Thu, 22 Sep 2016 12:11:11 +0300
> This patchset adds VF VLAN protocol 802.1ad support to the
> mlx4 driver.
> We extended the VF VLAN API with an additional parameter
> for VLAN protocol, and kept 802.1Q as drivers' default.
>
> We prepared a userspace support (ip link tool).
> The patch will be submitted to the iproute2 mailing list.
>
> The ip link tool VF VLAN protocol parameter is optional (default: 802.1Q).
> A configuration command of VF VLAN that is used prior to this patchset
> will result in same functionality as today's (VST with VLAN protocol 802.1Q).
>
> The series generated against net-next commit:
> 688dc5369a63 "Merge branch 'mlx4-next'"
>
> All maintainers of the modified modules are in cc.
Series applied, thanks.
^ permalink raw reply
* Re: [net-next v2 00/10][pull request] 40GbE Intel Wired LAN Driver Updates 2016-09-22
From: David Miller @ 2016-09-24 12:15 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, nhorman, sassmann, jogreene, guru.anbalagane
In-Reply-To: <1474609542-121940-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Thu, 22 Sep 2016 22:45:32 -0700
> This series contains updates to i40e and i40evf only.
Pulled, thanks Jeff.
^ permalink raw reply
* Re: pull request (net-next): ipsec-next 2016-09-23
From: David Miller @ 2016-09-24 12:19 UTC (permalink / raw)
To: steffen.klassert; +Cc: herbert, netdev
In-Reply-To: <1474614882-25253-1-git-send-email-steffen.klassert@secunet.com>
From: Steffen Klassert <steffen.klassert@secunet.com>
Date: Fri, 23 Sep 2016 09:14:40 +0200
> Only two patches this time:
>
> 1) Fix a comment reference to struct xfrm_replay_state_esn.
> From Richard Guy Briggs.
>
> 2) Convert xfrm_state_lookup to rcu, we don't need the
> xfrm_state_lock anymore in the input path.
> From Florian Westphal.
>
> Please pull or let me know if there are problems.
Pulled, thanks Steffen.
^ permalink raw reply
* Re: [net-next 00/10][pull request] 10GbE Intel Wired LAN Driver Updates 2016-09-23
From: David Miller @ 2016-09-24 12:22 UTC (permalink / raw)
To: jeffrey.t.kirsher; +Cc: netdev, nhorman, sassmann, jogreene, guru.anbalagane
In-Reply-To: <1474617103-59530-1-git-send-email-jeffrey.t.kirsher@intel.com>
From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Fri, 23 Sep 2016 00:51:33 -0700
> This series contains updates to ixgbe and ixgbevf.
Pulled, thanks Jeff.
^ permalink raw reply
* Re: [PATCH net-next 00/15] rxrpc: Bug fixes and tracepoints
From: David Miller @ 2016-09-24 12:24 UTC (permalink / raw)
To: dhowells; +Cc: netdev, linux-afs, linux-kernel
In-Reply-To: <147464371753.5090.1634919599283321856.stgit@warthog.procyon.org.uk>
From: David Howells <dhowells@redhat.com>
Date: Fri, 23 Sep 2016 16:15:17 +0100
> Here are a bunch of bug fixes:
...
> Tagged thusly:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git
> rxrpc-rewrite-20160923
Pulled, thanks David.
^ permalink raw reply
* Re: [PATCH net-next v2] Documentation: devicetree: revise ethernet device-tree binding about TRGMII
From: David Miller @ 2016-09-24 12:26 UTC (permalink / raw)
To: sean.wang
Cc: sergei.shtylyov, nbd, netdev, linux-kernel, devicetree,
linux-mediatek, john, keyhaede, objelf
In-Reply-To: <1474610649-18582-1-git-send-email-sean.wang@mediatek.com>
From: <sean.wang@mediatek.com>
Date: Fri, 23 Sep 2016 14:04:09 +0800
> From: Sean Wang <sean.wang@mediatek.com>
>
> add phy-mode "trgmii" to
> Documentation/devicetree/bindings/net/ethernet.txt
>
> Cc: devicetree@vger.kernel.org
> Reported-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
> Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Applied.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox