[PATCH 2/2] scsi: lpfc: Add logging functions to reduce object size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Make functions from logging macros.

Reduces overall object size ~14% (120KB) (x86-64, defconfig, with LPFC)

$ size -t drivers/scsi/lpfc/built-in.a.old
 888552	   8910	   2900	 900362	  dbd0a	(TOTALS)
$ size -t drivers/scsi/lpfc/built-in.a.new
 766757	   8910	   2900	 778567	  be147	(TOTALS)

Miscellanea:

o Add header #ifdef guards where unused in .h files

Signed-off-by: Joe Perches <joe@xxxxxxxxxxx>
---
 drivers/scsi/lpfc/Makefile       |   2 +-
 drivers/scsi/lpfc/lpfc.h         |   5 ++
 drivers/scsi/lpfc/lpfc_attr.h    |   5 ++
 drivers/scsi/lpfc/lpfc_bsg.h     |   6 ++
 drivers/scsi/lpfc/lpfc_compat.h  |   5 ++
 drivers/scsi/lpfc/lpfc_crtn.h    |   5 ++
 drivers/scsi/lpfc/lpfc_disc.h    |   5 ++
 drivers/scsi/lpfc/lpfc_hw.h      |   5 ++
 drivers/scsi/lpfc/lpfc_hw4.h     |   5 ++
 drivers/scsi/lpfc/lpfc_ids.h     |   5 ++
 drivers/scsi/lpfc/lpfc_logmsg.c  | 112 +++++++++++++++++++++++++++++++
 drivers/scsi/lpfc/lpfc_logmsg.h  |  72 ++++++--------------
 drivers/scsi/lpfc/lpfc_nl.h      |   4 ++
 drivers/scsi/lpfc/lpfc_nvme.h    |   5 ++
 drivers/scsi/lpfc/lpfc_scsi.h    |   4 ++
 drivers/scsi/lpfc/lpfc_sli.h     |   5 ++
 drivers/scsi/lpfc/lpfc_sli4.h    |   5 ++
 drivers/scsi/lpfc/lpfc_version.h |   5 ++
 18 files changed, 207 insertions(+), 53 deletions(-)
 create mode 100644 drivers/scsi/lpfc/lpfc_logmsg.c

diff --git a/drivers/scsi/lpfc/Makefile b/drivers/scsi/lpfc/Makefile
index 092a971d066b..ebe0d3ddee27 100644
--- a/drivers/scsi/lpfc/Makefile
+++ b/drivers/scsi/lpfc/Makefile
@@ -33,4 +33,4 @@ obj-$(CONFIG_SCSI_LPFC) := lpfc.o
 lpfc-objs := lpfc_mem.o lpfc_sli.o lpfc_ct.o lpfc_els.o \
 	lpfc_hbadisc.o	lpfc_init.o lpfc_mbox.o lpfc_nportdisc.o   \
 	lpfc_scsi.o lpfc_attr.o lpfc_vport.o lpfc_debugfs.o lpfc_bsg.o \
-	lpfc_nvme.o lpfc_nvmet.o
+	lpfc_nvme.o lpfc_nvmet.o lpfc_logmsg.o
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index 549adfaa97ce..571f35826947 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -21,6 +21,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC
+#define _H_LPFC
+
 #include <scsi/scsi_host.h>
 #include <linux/ktime.h>
 #include <linux/workqueue.h>
@@ -1409,3 +1412,5 @@ static const char *routine(enum enum_name table_key)			\
 	}								\
 	return name;							\
 }
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_attr.h b/drivers/scsi/lpfc/lpfc_attr.h
index 9659a8fff971..94a7e2231ec6 100644
--- a/drivers/scsi/lpfc/lpfc_attr.h
+++ b/drivers/scsi/lpfc/lpfc_attr.h
@@ -21,6 +21,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_ATTR
+#define _H_LPFC_ATTR
+
 #define LPFC_ATTR(name, defval, minval, maxval, desc) \
 static uint lpfc_##name = defval;\
 module_param(lpfc_##name, uint, S_IRUGO);\
@@ -126,3 +129,5 @@ lpfc_vport_param_set(name, defval, minval, maxval)\
 lpfc_vport_param_store(name)\
 static DEVICE_ATTR(lpfc_##name, S_IRUGO | S_IWUSR,\
 		   lpfc_##name##_show, lpfc_##name##_store)
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_bsg.h b/drivers/scsi/lpfc/lpfc_bsg.h
index 2dc71243775d..5f64584647db 100644
--- a/drivers/scsi/lpfc/lpfc_bsg.h
+++ b/drivers/scsi/lpfc/lpfc_bsg.h
@@ -19,6 +19,10 @@
  * more details, a copy of which can be found in the file COPYING  *
  * included with this package.                                     *
  *******************************************************************/
+
+#ifndef _H_LPFC_BSG
+#define _H_LPFC_BSG
+
 /* bsg definitions
  * No pointers to user data are allowed, all application buffers and sizes will
  * derived through the bsg interface.
@@ -389,3 +393,5 @@ struct get_trunk_info_req {
 /* driver only */
 #define SLI_CONFIG_NOT_HANDLED		0
 #define SLI_CONFIG_HANDLED		1
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_compat.h b/drivers/scsi/lpfc/lpfc_compat.h
index 43cf46a3a71f..d6ccde39269a 100644
--- a/drivers/scsi/lpfc/lpfc_compat.h
+++ b/drivers/scsi/lpfc/lpfc_compat.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_COMPAT
+#define _H_LPFC_COMPAT
+
 /*
  * This file provides macros to aid compilation in the Linux 2.4 kernel
  * over various platform architectures.
@@ -96,3 +99,5 @@ lpfc_memcpy_from_slim( void *dest, void __iomem *src, unsigned int bytes)
 }
 
 #endif	/* __BIG_ENDIAN */
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 782f6f76f18a..dd8553ecf091 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_CRTN
+#define _H_LPFC_CRTN
+
 typedef int (*node_filter)(struct lpfc_nodelist *, void *);
 
 struct fc_rport;
@@ -600,3 +603,5 @@ extern int lpfc_enable_nvmet_cnt;
 extern unsigned long long lpfc_enable_nvmet[];
 extern int lpfc_no_hba_reset_cnt;
 extern unsigned long lpfc_no_hba_reset[];
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_disc.h b/drivers/scsi/lpfc/lpfc_disc.h
index 482e4a888dae..9d3f49e007fa 100644
--- a/drivers/scsi/lpfc/lpfc_disc.h
+++ b/drivers/scsi/lpfc/lpfc_disc.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_DISC
+#define _H_LPFC_DISC
+
 #define FC_MAX_HOLD_RSCN     32	      /* max number of deferred RSCNs */
 #define FC_MAX_NS_RSP        64512    /* max size NameServer rsp */
 #define FC_MAXLOOP           126      /* max devices supported on a fc loop */
@@ -299,3 +302,5 @@ struct lpfc_node_rrq {
 #define NLP_EVT_DEVICE_RECOVERY   0xc	/* Device existence unknown */
 #define NLP_EVT_MAX_EVENT         0xd
 #define NLP_EVT_NOTHING_PENDING   0xff
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_hw.h b/drivers/scsi/lpfc/lpfc_hw.h
index c20034b3101c..c56a9fd0a1eb 100644
--- a/drivers/scsi/lpfc/lpfc_hw.h
+++ b/drivers/scsi/lpfc/lpfc_hw.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_HW
+#define _H_LPFC_HW
+
 #define FDMI_DID        0xfffffaU
 #define NameServer_DID  0xfffffcU
 #define Fabric_Cntl_DID 0xfffffdU
@@ -4265,3 +4268,5 @@ lpfc_error_lost_link(IOCB_t *iocbp)
 #define SETVAR_MLORST 0x103007
 
 #define BPL_ALIGN_SZ 8 /* 8 byte alignment for bpl and mbufs */
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_hw4.h b/drivers/scsi/lpfc/lpfc_hw4.h
index c4ba8273a63f..d9e6bf53f520 100644
--- a/drivers/scsi/lpfc/lpfc_hw4.h
+++ b/drivers/scsi/lpfc/lpfc_hw4.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_HW4
+#define _H_LPFC_HW4
+
 #include <uapi/scsi/fc/fc_els.h>
 
 /* Macros to deal with bit fields. Each bit field must have 3 #defines
@@ -4912,3 +4915,5 @@ struct lpfc_grp_hdr {
 #define LPFC_FW_DUMP	1
 #define LPFC_FW_RESET	2
 #define LPFC_DV_RESET	3
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_ids.h b/drivers/scsi/lpfc/lpfc_ids.h
index d48414e295a0..2abb7b098a3d 100644
--- a/drivers/scsi/lpfc/lpfc_ids.h
+++ b/drivers/scsi/lpfc/lpfc_ids.h
@@ -21,6 +21,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_IDS
+#define _H_LPFC_IDS
+
 #include <linux/pci.h>
 
 const struct pci_device_id lpfc_id_table[] = {
@@ -124,3 +127,5 @@ const struct pci_device_id lpfc_id_table[] = {
 		PCI_ANY_ID, PCI_ANY_ID, },
 	{ 0 }
 };
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_logmsg.c b/drivers/scsi/lpfc/lpfc_logmsg.c
new file mode 100644
index 000000000000..37449fb566c4
--- /dev/null
+++ b/drivers/scsi/lpfc/lpfc_logmsg.c
@@ -0,0 +1,112 @@
+#include <linux/kernel.h>
+#include <linux/wait.h>
+#include <linux/timer.h>
+#include <linux/kref.h>
+#include <linux/pci.h>
+
+#include <scsi/scsi_transport_fc.h>
+
+#include "lpfc_hw4.h"
+#include "lpfc_hw.h"
+#include "lpfc_sli.h"
+#include "lpfc_sli4.h"
+#include "lpfc_nl.h"
+#include "lpfc_disc.h"
+#include "lpfc.h"
+#include "lpfc_logmsg.h"
+
+/* generate message by verbose log setting or severity */
+void lpfc_vlog_msg(struct lpfc_vport *vport,
+		   const char *level, uint32_t mask,
+		   const char *fmt, ...)
+{
+	if ((mask & vport->cfg_log_verbose) || level[1] <= '4') {
+		struct va_format vaf;
+		va_list args;
+
+		va_start(args, fmt);
+		vaf.fmt = fmt;
+		vaf.va = &args;
+
+		dev_printk(level, &vport->phba->pcidev->dev,
+			   "%d:(%d):%pV",
+			   vport->phba->brd_no, vport->vpi, &vaf);
+
+		va_end(args);
+	}
+}
+
+void lpfc_printf_vlog(struct lpfc_vport *vport,
+		      const char *level, uint32_t mask,
+		      const char *fmt, ...)
+{
+	struct va_format vaf;
+	va_list args;
+
+	va_start(args, fmt);
+	vaf.fmt = fmt;
+	vaf.va = &args;
+
+	if ((mask & vport->cfg_log_verbose) || level[1] <= '3') {
+		if (mask & LOG_TRACE_EVENT)
+			lpfc_dmp_dbg(vport->phba);
+		dev_printk(level, &vport->phba->pcidev->dev,
+			   "%d:(%d):%pV",
+			   vport->phba->brd_no, vport->vpi, &vaf);
+	} else if (!vport->cfg_log_verbose) {
+		lpfc_dbg_print(vport->phba,
+			       "%d:(%d):%pV",
+			       vport->phba->brd_no, vport->vpi, &vaf);
+	}
+
+	va_end(args);
+}
+
+void lpfc_log_msg(struct lpfc_hba *phba,
+		  const char *level, uint32_t mask,
+		  const char *fmt, ...)
+{
+	uint32_t log_verbose = phba->pport ?
+		phba->pport->cfg_log_verbose :
+		phba->cfg_log_verbose;
+
+	if ((mask & log_verbose) || level[1] <= '4') {
+		struct va_format vaf;
+		va_list args;
+
+		va_start(args, fmt);
+		vaf.fmt = fmt;
+		vaf.va = &args;
+
+		dev_printk(level, &phba->pcidev->dev,
+			   "%d:%pV", phba->brd_no, &vaf);
+
+		va_end(args);
+	}
+}
+
+void lpfc_printf_log(struct lpfc_hba *phba,
+		     const char *level, uint32_t mask,
+		     const char *fmt, ...)
+{
+	uint32_t log_verbose = phba->pport ?
+		phba->pport->cfg_log_verbose :
+		phba->cfg_log_verbose;
+	struct va_format vaf;
+	va_list args;
+
+	va_start(args, fmt);
+	vaf.fmt = fmt;
+	vaf.va = &args;
+
+	if ((mask & log_verbose) || level[1] <= '3') {
+		if (mask & LOG_TRACE_EVENT)
+			lpfc_dmp_dbg(phba);
+		dev_printk(level, &phba->pcidev->dev,
+			   "%d:%pV", phba->brd_no, &vaf);
+	} else if (!phba->cfg_log_verbose) {
+		lpfc_dbg_print(phba, "%d:%pV", phba->brd_no, &vaf);
+	}
+
+	va_end(args);
+}
diff --git a/drivers/scsi/lpfc/lpfc_logmsg.h b/drivers/scsi/lpfc/lpfc_logmsg.h
index c57adcdda258..2ff412cb6702 100644
--- a/drivers/scsi/lpfc/lpfc_logmsg.h
+++ b/drivers/scsi/lpfc/lpfc_logmsg.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_LOGMSG
+#define _H_LPFC_LOGMSG
+
 #define LOG_ELS		0x00000001	/* ELS events */
 #define LOG_DISCOVERY	0x00000002	/* Link discovery events */
 #define LOG_MBOX	0x00000004	/* Mailbox events */
@@ -52,56 +55,21 @@ __printf(2, 3)
 void lpfc_dbg_print(struct lpfc_hba *phba, const char *fmt, ...);
 
 /* generate message by verbose log setting or severity */
-#define lpfc_vlog_msg(vport, level, mask, fmt, ...)			\
-do {									\
-	if (((mask) & (vport)->cfg_log_verbose) || (level[1] <= '4'))	\
-		dev_printk(level, &((vport)->phba->pcidev)->dev,	\
-			   "%d:(%d):" fmt,				\
-			   (vport)->phba->brd_no, vport->vpi,		\
-			   ##__VA_ARGS__);				\
-} while (0)
-
-#define lpfc_log_msg(phba, level, mask, fmt, ...)			\
-do {									\
-	uint32_t log_verbose = (phba)->pport ?				\
-		(phba)->pport->cfg_log_verbose :			\
-		(phba)->cfg_log_verbose;				\
-	if (((mask) & log_verbose) || (level[1] <= '4'))		\
-		dev_printk(level, &((phba)->pcidev)->dev,		\
-			   "%d:" fmt,					\
-			   phba->brd_no, ##__VA_ARGS__);		\
-} while (0)
-
-#define lpfc_printf_vlog(vport, level, mask, fmt, ...)			\
-do {									\
-	if (((mask) & (vport)->cfg_log_verbose) || (level[1] <= '3')) { \
-		if ((mask) & LOG_TRACE_EVENT)				\
-			lpfc_dmp_dbg((vport)->phba);			\
-		dev_printk(level, &((vport)->phba->pcidev)->dev,	\
-			   "%d:(%d):" fmt,				\
-			   (vport)->phba->brd_no, vport->vpi,		\
-			   ##__VA_ARGS__);				\
-	} else if (!(vport)->cfg_log_verbose) {				\
-		lpfc_dbg_print((vport)->phba,				\
-			       "%d:(%d):" fmt,				\
-			       (vport)->phba->brd_no, (vport)->vpi,	\
-			       ##__VA_ARGS__);				\
-	}								\
-} while (0)
+__printf(4, 5)
+void lpfc_vlog_msg(struct lpfc_vport *vport,
+		   const char *level, uint32_t mask,
+		   const char *fmt, ...);
+__printf(4, 5)
+void lpfc_printf_vlog(struct lpfc_vport *vport,
+		      const char *level, uint32_t mask,
+		      const char *fmt, ...);
+__printf(4, 5)
+void lpfc_log_msg(struct lpfc_hba *phba,
+		  const char *level, uint32_t mask,
+		  const char *fmt, ...);
+__printf(4, 5)
+void lpfc_printf_log(struct lpfc_hba *phba,
+		     const char *level, uint32_t mask,
+		     const char *fmt, ...);
 
-#define lpfc_printf_log(phba, level, mask, fmt, ...)			\
-do {									\
-	uint32_t log_verbose = (phba)->pport ?				\
-		(phba)->pport->cfg_log_verbose :			\
-		(phba)->cfg_log_verbose;				\
-	if (((mask) & log_verbose) || (level[1] <= '3')) {		\
-		if ((mask) & LOG_TRACE_EVENT)				\
-			lpfc_dmp_dbg(phba);				\
-		dev_printk(level, &((phba)->pcidev)->dev,		\
-			   "%d:" fmt,					\
-			   phba->brd_no, ##__VA_ARGS__);		\
-	} else if (!(phba)->cfg_log_verbose) {				\
-		lpfc_dbg_print(phba, "%d:" fmt,				\
-			       phba->brd_no, ##__VA_ARGS__);		\
-	}								\
-} while (0)
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_nl.h b/drivers/scsi/lpfc/lpfc_nl.h
index 95d60ab5ebf9..eefbcd032dfe 100644
--- a/drivers/scsi/lpfc/lpfc_nl.h
+++ b/drivers/scsi/lpfc/lpfc_nl.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_NL
+#define _H_LPFC_NL
+
 /* Event definitions for RegisterForEvent */
 #define FC_REG_LINK_EVENT		0x0001	/* link up / down events */
 #define FC_REG_RSCN_EVENT		0x0002	/* RSCN events */
@@ -179,3 +182,4 @@ struct temp_event {
 	uint32_t data;
 };
 
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_nvme.h b/drivers/scsi/lpfc/lpfc_nvme.h
index 4a4c3f780e1f..09696510c3b3 100644
--- a/drivers/scsi/lpfc/lpfc_nvme.h
+++ b/drivers/scsi/lpfc/lpfc_nvme.h
@@ -21,6 +21,9 @@
  * included with this package.                                     *
  ********************************************************************/
 
+#ifndef _H_LPFC_NVME
+#define _H_LPFC_NVME
+
 #include <linux/nvme.h>
 #include <linux/nvme-fc-driver.h>
 #include <linux/nvme-fc.h>
@@ -254,3 +257,5 @@ int __lpfc_nvme_xmt_ls_rsp(struct lpfc_async_xchg_ctx *axchg,
 				struct lpfc_wcqe_complete *wcqe));
 void __lpfc_nvme_xmt_ls_rsp_cmp(struct lpfc_hba *phba,
 		struct lpfc_iocbq *cmdwqe, struct lpfc_wcqe_complete *wcqe);
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_scsi.h b/drivers/scsi/lpfc/lpfc_scsi.h
index f76667b7da7b..7115a3fb6acf 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.h
+++ b/drivers/scsi/lpfc/lpfc_scsi.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_SCSI
+#define _H_LPFC_SCSI
+
 #include <asm/byteorder.h>
 
 struct lpfc_hba;
@@ -147,3 +150,4 @@ struct lpfc_scsicmd_bkt {
 /* For sysfs/debugfs tmp string max len */
 #define LPFC_MAX_SCSI_INFO_TMP_LEN	79
 
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_sli.h b/drivers/scsi/lpfc/lpfc_sli.h
index 93d976ea8c5d..f24f875e1fe8 100644
--- a/drivers/scsi/lpfc/lpfc_sli.h
+++ b/drivers/scsi/lpfc/lpfc_sli.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_SLI
+#define _H_LPFC_SLI
+
 #if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_SCSI_LPFC_DEBUG_FS)
 #define CONFIG_SCSI_LPFC_DEBUG_FS
 #endif
@@ -449,3 +452,5 @@ struct lpfc_io_buf {
 	uint64_t ts_data_io;
 #endif
 };
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_sli4.h b/drivers/scsi/lpfc/lpfc_sli4.h
index a966cdeb52ee..9096b2c941e7 100644
--- a/drivers/scsi/lpfc/lpfc_sli4.h
+++ b/drivers/scsi/lpfc/lpfc_sli4.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_SLI4
+#define _H_LPFC_SLI4
+
 #include <linux/irq_poll.h>
 #include <linux/cpufreq.h>
 
@@ -1160,3 +1163,5 @@ static inline void *lpfc_sli4_qe(struct lpfc_queue *q, uint16_t idx)
 	return q->q_pgs[idx / q->entry_cnt_per_pg] +
 		(q->entry_size * (idx % q->entry_cnt_per_pg));
 }
+
+#endif
diff --git a/drivers/scsi/lpfc/lpfc_version.h b/drivers/scsi/lpfc/lpfc_version.h
index 20adec4387f0..259c4a72db74 100644
--- a/drivers/scsi/lpfc/lpfc_version.h
+++ b/drivers/scsi/lpfc/lpfc_version.h
@@ -20,6 +20,9 @@
  * included with this package.                                     *
  *******************************************************************/
 
+#ifndef _H_LPFC_VERSION
+#define _H_LPFC_VERSION
+
 #define LPFC_DRIVER_VERSION "12.8.0.3"
 #define LPFC_DRIVER_NAME		"lpfc"
 
@@ -35,3 +38,5 @@
 #define LPFC_COPYRIGHT "Copyright (C) 2017-2019 Broadcom. All Rights " \
 		"Reserved. The term \"Broadcom\" refers to Broadcom Inc. " \
 		"and/or its subsidiaries."
+
+#endif
-- 
2.26.0




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux