diff --git a/SOURCES/addmissing.patch b/SOURCES/addmissing.patch new file mode 100644 index 0000000..95ad87a --- /dev/null +++ b/SOURCES/addmissing.patch @@ -0,0 +1,27 @@ +diff -up linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/ptrace.h.addmissing linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/ptrace.h +--- linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/ptrace.h.addmissing 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/ptrace.h 2015-11-21 23:33:16.430036291 -0500 +@@ -109,6 +109,23 @@ static inline int user_mode_vm(struct pt + #endif + } + ++/* ++ * This is the fastest way to check whether regs come from user space. ++ * It is unsafe if regs might come from vm86 mode, though -- in vm86 ++ * mode, all bits of CS and SS are completely under the user's control. ++ * The CPU considers vm86 mode to be CPL 3 regardless of CS and SS. ++ * ++ * Do NOT use this function unless you have already ruled out the ++ * possibility that regs came from vm86 mode. ++ * ++ * We check for RPL != 0 instead of RPL == 3 because we don't use rings ++ * 1 or 2 and this is more efficient. ++ */ ++static inline int user_mode_ignore_vm86(struct pt_regs *regs) ++{ ++ return (regs->cs & SEGMENT_RPL_MASK) != 0; ++} ++ + static inline int v8086_mode(struct pt_regs *regs) + { + #ifdef CONFIG_X86_32 diff --git a/SOURCES/centos-linux-3.10-0001-get-rid-of-propagate_umount-mistakenly-treating-slav.patch b/SOURCES/centos-linux-3.10-0001-get-rid-of-propagate_umount-mistakenly-treating-slav.patch new file mode 100644 index 0000000..c8daef1 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0001-get-rid-of-propagate_umount-mistakenly-treating-slav.patch @@ -0,0 +1,63 @@ +From ba4666388f1a69487e0a64e3626564d37feef2c0 Mon Sep 17 00:00:00 2001 +From: "T.kabe" +Date: Fri, 3 Mar 2017 14:29:26 +0900 +Subject: [PATCH 1/4] get rid of propagate_umount() mistakenly treating slaves as busy. + +[upstream commit 88b368f27a094277143d8ecd5a056116f6a41520] +Author: Al Viro +Date: Mon Aug 18 15:09:26 2014 -0400 + + get rid of propagate_umount() mistakenly treating slaves as busy. + + The check in __propagate_umount() ("has somebody explicitly mounted + something on that slave?") is done *before* taking the already doomed + victims out of the child lists. + + Cc: stable@vger.kernel.org + Signed-off-by: Al Viro +--- + fs/namespace.c | 4 +++- + fs/pnode.c | 4 +++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/fs/namespace.c b/fs/namespace.c +index 9440b6a..0053bfc 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -1195,6 +1195,9 @@ void umount_tree(struct mount *mnt, int propagate) + for (p = mnt; p; p = next_mnt(p, mnt)) + list_move(&p->mnt_hash, &tmp_list); + ++ list_for_each_entry(p, &tmp_list, mnt_hash) ++ list_del_init(&p->mnt_child); ++ + if (propagate) + propagate_umount(&tmp_list); + +@@ -1203,7 +1206,6 @@ void umount_tree(struct mount *mnt, int propagate) + list_del_init(&p->mnt_list); + __touch_mnt_namespace(p->mnt_ns); + p->mnt_ns = NULL; +- list_del_init(&p->mnt_child); + if (mnt_has_parent(p)) { + p->mnt_parent->mnt_ghosts++; + put_mountpoint(p->mnt_mp); +diff --git a/fs/pnode.c b/fs/pnode.c +index 54bd043..983cf93 100644 +--- a/fs/pnode.c ++++ b/fs/pnode.c +@@ -390,8 +390,10 @@ static void __propagate_umount(struct mount *mnt) + * umount the child only if the child has no + * other children + */ +- if (child && list_empty(&child->mnt_mounts)) ++ if (child && list_empty(&child->mnt_mounts)) { ++ list_del_init(&child->mnt_child); + list_move_tail(&child->mnt_hash, &mnt->mnt_hash); ++ } + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0001-scsi-megaraid_sas-Add-new-pci-device-Ids-for-SAS3.5-.patch b/SOURCES/centos-linux-3.10-0001-scsi-megaraid_sas-Add-new-pci-device-Ids-for-SAS3.5-.patch new file mode 100644 index 0000000..2a5bafe --- /dev/null +++ b/SOURCES/centos-linux-3.10-0001-scsi-megaraid_sas-Add-new-pci-device-Ids-for-SAS3.5-.patch @@ -0,0 +1,200 @@ +From 748b88ff6deca4fda640b16ca021857b33aa5ca6 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:43 -0500 +Subject: [PATCH 01/11] scsi: megaraid_sas: Add new pci device Ids for SAS3.5 + Generic Megaraid Controllers + +This patch contains new pci device ids for SAS3.5 Generic Megaraid Controllers + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 12 +++++++++--- + drivers/scsi/megaraid/megaraid_sas_base.c | 14 +++++++++++++- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 30 ++++++++++++++++++++++------- + 3 files changed, 45 insertions(+), 11 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index ba52d14..e5ac6b1 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -56,6 +56,11 @@ + #define PCI_DEVICE_ID_LSI_INTRUDER_24 0x00cf + #define PCI_DEVICE_ID_LSI_CUTLASS_52 0x0052 + #define PCI_DEVICE_ID_LSI_CUTLASS_53 0x0053 ++#define PCI_DEVICE_ID_LSI_VENTURA 0x0014 ++#define PCI_DEVICE_ID_LSI_HARPOON 0x0016 ++#define PCI_DEVICE_ID_LSI_TOMCAT 0x0017 ++#define PCI_DEVICE_ID_LSI_VENTURA_4PORT 0x001B ++#define PCI_DEVICE_ID_LSI_CRUSADER_4PORT 0x001C + + /* + * Intel HBA SSDIDs +@@ -100,7 +105,7 @@ + */ + + /* +- * MFI stands for MegaRAID SAS FW Interface. This is just a moniker for ++ * MFI stands for MegaRAID SAS FW Interface. This is just a moniker for + * protocol between the software and firmware. Commands are issued using + * "message frames" + */ +@@ -1435,7 +1440,7 @@ enum FW_BOOT_CONTEXT { + * register set for both 1068 and 1078 controllers + * structure extended for 1078 registers + */ +- ++ + struct megasas_register_set { + u32 doorbell; /*0000h*/ + u32 fusion_seq_offset; /*0004h*/ +@@ -1478,7 +1483,7 @@ struct megasas_register_set { + + u32 inbound_high_queue_port ; /*00C4h*/ + +- u32 reserved_5; /*00C8h*/ ++ u32 inbound_single_queue_port; /*00C8h*/ + u32 res_6[11]; /*CCh*/ + u32 host_diag; + u32 seq_offset; +@@ -2143,6 +2148,7 @@ struct megasas_instance { + u8 is_rdpq; + bool dev_handle; + bool fw_sync_cache_support; ++ bool is_ventura; + }; + struct MR_LD_VF_MAP { + u32 size; +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index ac01648..a73e6f6 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -155,6 +155,12 @@ static struct pci_device_id megasas_pci_table[] = { + /* Intruder 24 port*/ + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_CUTLASS_52)}, + {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_CUTLASS_53)}, ++ /* VENTURA */ ++ {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_VENTURA)}, ++ {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_HARPOON)}, ++ {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_TOMCAT)}, ++ {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_VENTURA_4PORT)}, ++ {PCI_DEVICE(PCI_VENDOR_ID_LSI_LOGIC, PCI_DEVICE_ID_LSI_CRUSADER_4PORT)}, + {} + }; + +@@ -5765,6 +5771,12 @@ static int megasas_probe_one(struct pci_dev *pdev, + instance->pdev = pdev; + + switch (instance->pdev->device) { ++ case PCI_DEVICE_ID_LSI_VENTURA: ++ case PCI_DEVICE_ID_LSI_HARPOON: ++ case PCI_DEVICE_ID_LSI_TOMCAT: ++ case PCI_DEVICE_ID_LSI_VENTURA_4PORT: ++ case PCI_DEVICE_ID_LSI_CRUSADER_4PORT: ++ instance->is_ventura = true; + case PCI_DEVICE_ID_LSI_FUSION: + case PCI_DEVICE_ID_LSI_PLASMA: + case PCI_DEVICE_ID_LSI_INVADER: +@@ -5789,7 +5801,7 @@ static int megasas_probe_one(struct pci_dev *pdev, + if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) || + (instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA)) + fusion->adapter_type = THUNDERBOLT_SERIES; +- else ++ else if (!instance->is_ventura) + fusion->adapter_type = INVADER_SERIES; + } + break; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 7ecd0b4..5ad8a07 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -189,15 +189,29 @@ inline void megasas_return_cmd_fusion(struct megasas_instance *instance, + */ + static void + megasas_fire_cmd_fusion(struct megasas_instance *instance, +- union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc) ++ union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc, bool is_32bit) + { ++ struct megasas_register_set __iomem *regs = instance->reg_set; ++ unsigned long flags; ++ ++ if (is_32bit) ++ writel(le32_to_cpu(req_desc->u.low), ++ &(regs)->inbound_single_queue_port); ++ else if (instance->is_ventura) { ++ spin_lock_irqsave(&instance->hba_lock, flags); ++ writel(le32_to_cpu(req_desc->u.low), ++ &(regs)->inbound_low_queue_port); ++ writel(le32_to_cpu(req_desc->u.high), ++ &(regs)->inbound_high_queue_port); ++ mmiowb(); ++ spin_unlock_irqrestore(&instance->hba_lock, flags); ++ } else { + #if defined(writeq) && defined(CONFIG_64BIT) + u64 req_data = (((u64)le32_to_cpu(req_desc->u.high) << 32) | + le32_to_cpu(req_desc->u.low)); + + writeq(req_data, &instance->reg_set->inbound_low_queue_port); + #else +- unsigned long flags; + + spin_lock_irqsave(&instance->hba_lock, flags); + writel(le32_to_cpu(req_desc->u.low), +@@ -207,6 +221,7 @@ megasas_fire_cmd_fusion(struct megasas_instance *instance, + mmiowb(); + spin_unlock_irqrestore(&instance->hba_lock, flags); + #endif ++ } + } + + /** +@@ -850,7 +865,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance) + break; + } + +- megasas_fire_cmd_fusion(instance, &req_desc); ++ megasas_fire_cmd_fusion(instance, &req_desc, false); + + wait_and_poll(instance, cmd, MFI_POLL_TIMEOUT_SECS); + +@@ -2224,7 +2239,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + */ + atomic_inc(&instance->fw_outstanding); + +- megasas_fire_cmd_fusion(instance, req_desc); ++ megasas_fire_cmd_fusion(instance, req_desc, instance->is_ventura); + + return 0; + } +@@ -2592,7 +2607,7 @@ megasas_issue_dcmd_fusion(struct megasas_instance *instance, + return DCMD_NOT_FIRED; + } + +- megasas_fire_cmd_fusion(instance, req_desc); ++ megasas_fire_cmd_fusion(instance, req_desc, instance->is_ventura); + return DCMD_SUCCESS; + } + +@@ -2884,7 +2899,8 @@ void megasas_refire_mgmt_cmd(struct megasas_instance *instance) + cpu_to_le32(MR_DCMD_SYSTEM_PD_MAP_GET_INFO))) + && !(cmd_mfi->flags & DRV_DCMD_SKIP_REFIRE); + if (refire_cmd) +- megasas_fire_cmd_fusion(instance, req_desc); ++ megasas_fire_cmd_fusion(instance, req_desc, ++ instance->is_ventura); + else + megasas_return_cmd(instance, cmd_mfi); + } +@@ -3063,7 +3079,7 @@ megasas_issue_tm(struct megasas_instance *instance, u16 device_handle, + mr_request->tmReqFlags.isTMForLD = 1; + + init_completion(&cmd_fusion->done); +- megasas_fire_cmd_fusion(instance, req_desc); ++ megasas_fire_cmd_fusion(instance, req_desc, instance->is_ventura); + + timeleft = wait_for_completion_timeout(&cmd_fusion->done, 50 * HZ); + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0001-scsi-mpt3sas-Fix-for-improper-info-displayed-in-var-.patch b/SOURCES/centos-linux-3.10-0001-scsi-mpt3sas-Fix-for-improper-info-displayed-in-var-.patch new file mode 100644 index 0000000..089f8f8 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0001-scsi-mpt3sas-Fix-for-improper-info-displayed-in-var-.patch @@ -0,0 +1,59 @@ +From 5c528134dc5242845930c8eb33abd97bb0ef5bc2 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:32 +0530 +Subject: [PATCH 01/11] scsi: mpt3sas: Fix for improper info displayed in var + log, while blocking or unblocking the device. + +Return value and Device_handle Arguments passed in correct order + to match with its format string. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 1911152..9c61476 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -2888,7 +2888,7 @@ _scsih_internal_device_block(struct scsi_device *sdev, + if (r == -EINVAL) + sdev_printk(KERN_WARNING, sdev, + "device_block failed with return(%d) for handle(0x%04x)\n", +- sas_device_priv_data->sas_target->handle, r); ++ r, sas_device_priv_data->sas_target->handle); + } + + /** +@@ -2918,20 +2918,20 @@ _scsih_internal_device_unblock(struct scsi_device *sdev, + sdev_printk(KERN_WARNING, sdev, + "device_unblock failed with return(%d) for handle(0x%04x) " + "performing a block followed by an unblock\n", +- sas_device_priv_data->sas_target->handle, r); ++ r, sas_device_priv_data->sas_target->handle); + sas_device_priv_data->block = 1; + r = scsi_internal_device_block(sdev); + if (r) + sdev_printk(KERN_WARNING, sdev, "retried device_block " + "failed with return(%d) for handle(0x%04x)\n", +- sas_device_priv_data->sas_target->handle, r); ++ r, sas_device_priv_data->sas_target->handle); + + sas_device_priv_data->block = 0; + r = scsi_internal_device_unblock(sdev, SDEV_RUNNING); + if (r) + sdev_printk(KERN_WARNING, sdev, "retried device_unblock" + " failed with return(%d) for handle(0x%04x)\n", +- sas_device_priv_data->sas_target->handle, r); ++ r, sas_device_priv_data->sas_target->handle); + } + } + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0002-scsi-megaraid_sas-128-MSIX-Support.patch b/SOURCES/centos-linux-3.10-0002-scsi-megaraid_sas-128-MSIX-Support.patch new file mode 100644 index 0000000..8fdd89c --- /dev/null +++ b/SOURCES/centos-linux-3.10-0002-scsi-megaraid_sas-128-MSIX-Support.patch @@ -0,0 +1,103 @@ +From 13ac44ddfb8f0cfc407bb91713384e9961f6e762 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:44 -0500 +Subject: [PATCH 02/11] scsi: megaraid_sas: 128 MSIX Support + +SAS3.5 Generic Megaraid based Controllers will have the support for 128 MSI-X vectors, +resulting in the need to support 128 reply queues + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 1 + + drivers/scsi/megaraid/megaraid_sas_base.c | 24 +++++++++++++++++------- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 4 ++-- + 3 files changed, 20 insertions(+), 9 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index e5ac6b1..ccef47b 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -2149,6 +2149,7 @@ struct megasas_instance { + bool dev_handle; + bool fw_sync_cache_support; + bool is_ventura; ++ bool msix_combined; + }; + struct MR_LD_VF_MAP { + u32 size; +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index a73e6f6..c78d7ee 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -5119,13 +5119,7 @@ static int megasas_init_fw(struct megasas_instance *instance) + goto fail_ready_state; + } + +- /* +- * MSI-X host index 0 is common for all adapter. +- * It is used for all MPT based Adapters. +- */ +- instance->reply_post_host_index_addr[0] = +- (u32 __iomem *)((u8 __iomem *)instance->reg_set + +- MPI2_REPLY_POST_HOST_INDEX_OFFSET); ++ + + /* Check if MSI-X is supported while in ready state */ + msix_enable = (instance->instancet->read_fw_status_reg(reg_set) & +@@ -5143,6 +5137,9 @@ static int megasas_init_fw(struct megasas_instance *instance) + instance->msix_vectors = ((scratch_pad_2 + & MR_MAX_REPLY_QUEUES_EXT_OFFSET) + >> MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT) + 1; ++ if (instance->msix_vectors > 16) ++ instance->msix_combined = true; ++ + if (rdpq_enable) + instance->is_rdpq = (scratch_pad_2 & MR_RDPQ_MODE_OFFSET) ? + 1 : 0; +@@ -5176,6 +5173,19 @@ static int megasas_init_fw(struct megasas_instance *instance) + else + instance->msix_vectors = 0; + } ++ /* ++ * MSI-X host index 0 is common for all adapter. ++ * It is used for all MPT based Adapters. ++ */ ++ if (instance->msix_combined) { ++ instance->reply_post_host_index_addr[0] = ++ (u32 *)((u8 *)instance->reg_set + ++ MPI2_SUP_REPLY_POST_HOST_INDEX_OFFSET); ++ } else { ++ instance->reply_post_host_index_addr[0] = ++ (u32 *)((u8 *)instance->reg_set + ++ MPI2_REPLY_POST_HOST_INDEX_OFFSET); ++ } + + dev_info(&instance->pdev->dev, + "firmware supports msix\t: (%d)", fw_msix_count); +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 5ad8a07..c64b85a 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -2391,7 +2391,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + * pending to be completed + */ + if (threshold_reply_count >= THRESHOLD_REPLY_COUNT) { +- if (fusion->adapter_type == INVADER_SERIES) ++ if (instance->msix_combined) + writel(((MSIxIndex & 0x7) << 24) | + fusion->last_reply_idx[MSIxIndex], + instance->reply_post_host_index_addr[MSIxIndex/8]); +@@ -2407,7 +2407,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + return IRQ_NONE; + + wmb(); +- if (fusion->adapter_type == INVADER_SERIES) ++ if (instance->msix_combined) + writel(((MSIxIndex & 0x7) << 24) | + fusion->last_reply_idx[MSIxIndex], + instance->reply_post_host_index_addr[MSIxIndex/8]); +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0002-scsi-mpt3sas-Fix-for-incorrect-numbers-for-MSIX-vect.patch b/SOURCES/centos-linux-3.10-0002-scsi-mpt3sas-Fix-for-incorrect-numbers-for-MSIX-vect.patch new file mode 100644 index 0000000..f008615 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0002-scsi-mpt3sas-Fix-for-incorrect-numbers-for-MSIX-vect.patch @@ -0,0 +1,68 @@ +From 79caef2412a36c3ed223be7e35395b41e99c6c4c Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:33 +0530 +Subject: [PATCH 02/11] scsi: mpt3sas: Fix for incorrect numbers for MSIX + vectors enabled when non RDPQ card is enumerated first. + +No. of MSIX vectors supported = min (Total no. of CPU cores, +MSIX vectors supported by card) + +when RDPQ is disabled "max_msix_vectors" module parameter which was +declared as global was set to '8' and hence if there are more than one card +in system among which if RDPQ disabled card is enumerated first then only 8 +MSIX vectors was getting enabled for all the cards(including RDPQ enabled +card,which can support more than 8 MSIX vectors). + +Used local variable instead of global variable ,if RDPQ is disabled this +local variable is set to '8' else it is set to "max_msix_vectors" (by +default this is set to -1, whose value can be set by user during driver +load time).So now regardless of whether RDPQ disabled card is enumerated +first or RDPQ enabled card is enumerated first , MSIX vectors enabled +depends on the cards capability. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c +index c77c31c..2319db8 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c +@@ -1960,7 +1960,7 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc) + { + struct msix_entry *entries, *a; + int r; +- int i; ++ int i, local_max_msix_vectors; + u8 try_msix = 0; + + if (msix_disable == -1 || msix_disable == 0) +@@ -1980,13 +1980,15 @@ _base_enable_msix(struct MPT3SAS_ADAPTER *ioc) + ioc->cpu_count, max_msix_vectors); + + if (!ioc->rdpq_array_enable && max_msix_vectors == -1) +- max_msix_vectors = 8; ++ local_max_msix_vectors = 8; ++ else ++ local_max_msix_vectors = max_msix_vectors; + +- if (max_msix_vectors > 0) { +- ioc->reply_queue_count = min_t(int, max_msix_vectors, ++ if (local_max_msix_vectors > 0) { ++ ioc->reply_queue_count = min_t(int, local_max_msix_vectors, + ioc->reply_queue_count); + ioc->msix_vector_count = ioc->reply_queue_count; +- } else if (max_msix_vectors == 0) ++ } else if (local_max_msix_vectors == 0) + goto try_ioapic; + + if (ioc->msix_vector_count < ioc->cpu_count) +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0002-vfs-Keep-a-list-of-mounts-on-a-mount-point.patch b/SOURCES/centos-linux-3.10-0002-vfs-Keep-a-list-of-mounts-on-a-mount-point.patch new file mode 100644 index 0000000..02e6381 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0002-vfs-Keep-a-list-of-mounts-on-a-mount-point.patch @@ -0,0 +1,99 @@ +From 9cc2c0f41c403a05989bc3ca2af650247d452f65 Mon Sep 17 00:00:00 2001 +From: "T.kabe" +Date: Mon, 6 Mar 2017 15:18:55 +0900 +Subject: [PATCH 2/4] vfs: Keep a list of mounts on a mount point + +[upstream commit 0a5eb7c8189922e86a840972cd0b57e41de6f031] +Author: Eric W. Biederman +Date: Sun Sep 22 19:37:01 2013 -0700 + + vfs: Keep a list of mounts on a mount point + + To spot any possible problems call BUG if a mountpoint + is put when it's list of mounts is not empty. + + AV: use hlist instead of list_head + + Reviewed-by: Miklos Szeredi + Signed-off-by: Eric W. Biederman + Signed-off-by: Al Viro +--- + fs/mount.h | 2 ++ + fs/namespace.c | 6 ++++++ + 2 files changed, 8 insertions(+) + +diff --git a/fs/mount.h b/fs/mount.h +index b870800..92fecbe 100644 +--- a/fs/mount.h ++++ b/fs/mount.h +@@ -21,6 +21,7 @@ struct mnt_pcp { + struct mountpoint { + struct list_head m_hash; + struct dentry *m_dentry; ++ struct hlist_head m_list; + int m_count; + }; + +@@ -47,6 +48,7 @@ struct mount { + struct mount *mnt_master; /* slave is on master->mnt_slave_list */ + struct mnt_namespace *mnt_ns; /* containing namespace */ + struct mountpoint *mnt_mp; /* where is it mounted */ ++ struct hlist_node mnt_mp_list; /* list mounts with the same mountpoint */ + #ifdef CONFIG_FSNOTIFY + struct hlist_head mnt_fsnotify_marks; + __u32 mnt_fsnotify_mask; +diff --git a/fs/namespace.c b/fs/namespace.c +index 0053bfc..c238481 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -197,6 +197,7 @@ static struct mount *alloc_vfsmnt(const char *name) + INIT_LIST_HEAD(&mnt->mnt_share); + INIT_LIST_HEAD(&mnt->mnt_slave_list); + INIT_LIST_HEAD(&mnt->mnt_slave); ++ INIT_HLIST_NODE(&mnt->mnt_mp_list); + #ifdef CONFIG_FSNOTIFY + INIT_HLIST_HEAD(&mnt->mnt_fsnotify_marks); + #endif +@@ -636,6 +637,7 @@ static struct mountpoint *new_mountpoint(struct dentry *dentry) + mp->m_dentry = dentry; + mp->m_count = 1; + list_add(&mp->m_hash, chain); ++ INIT_HLIST_HEAD(&mp->m_list); + return mp; + } + +@@ -643,6 +645,7 @@ static void put_mountpoint(struct mountpoint *mp) + { + if (!--mp->m_count) { + struct dentry *dentry = mp->m_dentry; ++ BUG_ON(!hlist_empty(&mp->m_list)); + spin_lock(&dentry->d_lock); + dentry->d_flags &= ~DCACHE_MOUNTED; + spin_unlock(&dentry->d_lock); +@@ -689,6 +692,7 @@ static void detach_mnt(struct mount *mnt, struct path *old_path) + mnt->mnt_mountpoint = mnt->mnt.mnt_root; + list_del_init(&mnt->mnt_child); + list_del_init(&mnt->mnt_hash); ++ hlist_del_init(&mnt->mnt_mp_list); + put_mountpoint(mnt->mnt_mp); + mnt->mnt_mp = NULL; + } +@@ -705,6 +709,7 @@ void mnt_set_mountpoint(struct mount *mnt, + child_mnt->mnt_mountpoint = dget(mp->m_dentry); + child_mnt->mnt_parent = mnt; + child_mnt->mnt_mp = mp; ++ hlist_add_head(&child_mnt->mnt_mp_list, &mp->m_list); + } + + /* +@@ -1207,6 +1212,7 @@ void umount_tree(struct mount *mnt, int propagate) + __touch_mnt_namespace(p->mnt_ns); + p->mnt_ns = NULL; + if (mnt_has_parent(p)) { ++ hlist_del_init(&p->mnt_mp_list); + p->mnt_parent->mnt_ghosts++; + put_mountpoint(p->mnt_mp); + p->mnt_mp = NULL; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0003-scsi-megaraid_sas-EEDP-Escape-Mode-Support-for-SAS3..patch b/SOURCES/centos-linux-3.10-0003-scsi-megaraid_sas-EEDP-Escape-Mode-Support-for-SAS3..patch new file mode 100644 index 0000000..b1e5687 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0003-scsi-megaraid_sas-EEDP-Escape-Mode-Support-for-SAS3..patch @@ -0,0 +1,51 @@ +From b004a9938ed1a8bb2007d0442512c6802c3a6bd1 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:45 -0500 +Subject: [PATCH 03/11] scsi: megaraid_sas: EEDP Escape Mode Support for SAS3.5 + Generic Megaraid Controllers + +An UNMAP command on a PI formatted device will leave the Logical Block Application +Tag and Logical Block Reference Tag as all F's (for those LBAs that are unmapped). +To avoid IO errors if those LBAs are subsequently read before they are written with +valid tag fields, the MPI SCSI IO requests need to set the EEDPFlags element EEDP +Escape Mode field, Bits [7:6] appropriately. A value of 2 should be set to disable +all PI checks if the Logical Block Application Tag is 0xFFFF for PI types 1 and 2. +A value of 3 should be set to disable all PI checks if the Logical Block Application +Tag is 0xFFFF and the Logical Block Reference Tag is 0xFFFFFFFF for PI type 3. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 1 + + drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index c64b85a..27c6a1f 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -1589,6 +1589,7 @@ megasas_set_pd_lba(struct MPI2_RAID_SCSI_IO_REQUEST *io_request, u8 cdb_len, + MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG | + MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP | + MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG | ++ MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE | + MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD); + } else { + io_request->EEDPFlags = cpu_to_le16( +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index 80eaee2..3cd3d0a 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -175,6 +175,8 @@ enum REGION_TYPE { + #define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG (0x0200) + #define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD (0x0100) + #define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP (0x0004) ++/* EEDP escape mode */ ++#define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE (0x0040) + #define MPI2_FUNCTION_SCSI_IO_REQUEST (0x00) /* SCSI IO */ + #define MPI2_FUNCTION_SCSI_TASK_MGMT (0x01) + #define MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY (0x03) +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0003-scsi-mpt3sas-Implement-device_remove_in_progress-che.patch b/SOURCES/centos-linux-3.10-0003-scsi-mpt3sas-Implement-device_remove_in_progress-che.patch new file mode 100644 index 0000000..cc90027 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0003-scsi-mpt3sas-Implement-device_remove_in_progress-che.patch @@ -0,0 +1,271 @@ +From a372b29ab979095c323d33ab922062015d459ddd Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:34 +0530 +Subject: [PATCH 03/11] scsi: mpt3sas: Implement device_remove_in_progress + check in IOCTL path + +When device missing event arrives, device_remove_in_progress bit will be +set and hence driver has to stop sending IOCTL commands.Now the check has +been added in IOCTL path to test device_remove_in_progress bit is set, if +so then IOCTL will be failed printing failure message. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.c | 19 +++++++++++++++ + drivers/scsi/mpt3sas/mpt3sas_base.h | 5 ++++ + drivers/scsi/mpt3sas/mpt3sas_ctl.c | 46 ++++++++++++++++++++++++++++++------ + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 24 ++++++++++++++++++- + 4 files changed, 86 insertions(+), 8 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c +index 2319db8..ac87e12 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c +@@ -5368,6 +5368,21 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) + goto out_free_resources; + } + ++ /* allocate memory for pending OS device add list */ ++ ioc->pend_os_device_add_sz = (ioc->facts.MaxDevHandle / 8); ++ if (ioc->facts.MaxDevHandle % 8) ++ ioc->pend_os_device_add_sz++; ++ ioc->pend_os_device_add = kzalloc(ioc->pend_os_device_add_sz, ++ GFP_KERNEL); ++ if (!ioc->pend_os_device_add) ++ goto out_free_resources; ++ ++ ioc->device_remove_in_progress_sz = ioc->pend_os_device_add_sz; ++ ioc->device_remove_in_progress = ++ kzalloc(ioc->device_remove_in_progress_sz, GFP_KERNEL); ++ if (!ioc->device_remove_in_progress) ++ goto out_free_resources; ++ + ioc->fwfault_debug = mpt3sas_fwfault_debug; + + /* base internal command bits */ +@@ -5450,6 +5465,8 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) + kfree(ioc->reply_post_host_index); + kfree(ioc->pd_handles); + kfree(ioc->blocking_handles); ++ kfree(ioc->device_remove_in_progress); ++ kfree(ioc->pend_os_device_add); + kfree(ioc->tm_cmds.reply); + kfree(ioc->transport_cmds.reply); + kfree(ioc->scsih_cmds.reply); +@@ -5491,6 +5508,8 @@ mpt3sas_base_detach(struct MPT3SAS_ADAPTER *ioc) + kfree(ioc->reply_post_host_index); + kfree(ioc->pd_handles); + kfree(ioc->blocking_handles); ++ kfree(ioc->device_remove_in_progress); ++ kfree(ioc->pend_os_device_add); + kfree(ioc->pfacts); + kfree(ioc->ctl_cmds.reply); + kfree(ioc->ctl_cmds.sense); +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index 1a614d7..241a660 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -1093,6 +1093,9 @@ struct MPT3SAS_ADAPTER { + void *pd_handles; + u16 pd_handles_sz; + ++ void *pend_os_device_add; ++ u16 pend_os_device_add_sz; ++ + /* config page */ + u16 config_page_sz; + void *config_page; +@@ -1201,6 +1204,8 @@ struct MPT3SAS_ADAPTER { + struct SL_WH_EVENT_TRIGGERS_T diag_trigger_event; + struct SL_WH_SCSI_TRIGGERS_T diag_trigger_scsi; + struct SL_WH_MPI_TRIGGERS_T diag_trigger_mpi; ++ void *device_remove_in_progress; ++ u16 device_remove_in_progress_sz; + }; + + typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, +diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +index 7d00f09..a75f8a3 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +@@ -655,6 +655,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + size_t data_in_sz = 0; + long ret; + u16 wait_state_count; ++ u16 device_handle = MPT3SAS_INVALID_DEVICE_HANDLE; + + issue_reset = 0; + +@@ -739,10 +740,13 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + data_in_sz = karg.data_in_size; + + if (mpi_request->Function == MPI2_FUNCTION_SCSI_IO_REQUEST || +- mpi_request->Function == MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH) { +- if (!le16_to_cpu(mpi_request->FunctionDependent1) || +- le16_to_cpu(mpi_request->FunctionDependent1) > +- ioc->facts.MaxDevHandle) { ++ mpi_request->Function == MPI2_FUNCTION_RAID_SCSI_IO_PASSTHROUGH || ++ mpi_request->Function == MPI2_FUNCTION_SCSI_TASK_MGMT || ++ mpi_request->Function == MPI2_FUNCTION_SATA_PASSTHROUGH) { ++ ++ device_handle = le16_to_cpu(mpi_request->FunctionDependent1); ++ if (!device_handle || (device_handle > ++ ioc->facts.MaxDevHandle)) { + ret = -EINVAL; + mpt3sas_base_free_smid(ioc, smid); + goto out; +@@ -798,12 +802,18 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + scsiio_request->SenseBufferLowAddress = + mpt3sas_base_get_sense_buffer_dma(ioc, smid); + memset(ioc->ctl_cmds.sense, 0, SCSI_SENSE_BUFFERSIZE); ++ if (test_bit(device_handle, ioc->device_remove_in_progress)) { ++ dtmprintk(ioc, pr_info(MPT3SAS_FMT ++ "handle(0x%04x) :ioctl failed due to device removal in progress\n", ++ ioc->name, device_handle)); ++ mpt3sas_base_free_smid(ioc, smid); ++ ret = -EINVAL; ++ goto out; ++ } + ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, + data_in_dma, data_in_sz); +- + if (mpi_request->Function == MPI2_FUNCTION_SCSI_IO_REQUEST) +- mpt3sas_base_put_smid_scsi_io(ioc, smid, +- le16_to_cpu(mpi_request->FunctionDependent1)); ++ mpt3sas_base_put_smid_scsi_io(ioc, smid, device_handle); + else + mpt3sas_base_put_smid_default(ioc, smid); + break; +@@ -828,6 +838,14 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + } + } + ++ if (test_bit(device_handle, ioc->device_remove_in_progress)) { ++ dtmprintk(ioc, pr_info(MPT3SAS_FMT ++ "handle(0x%04x) :ioctl failed due to device removal in progress\n", ++ ioc->name, device_handle)); ++ mpt3sas_base_free_smid(ioc, smid); ++ ret = -EINVAL; ++ goto out; ++ } + mpt3sas_scsih_set_tm_flag(ioc, le16_to_cpu( + tm_request->DevHandle)); + ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, +@@ -867,6 +885,20 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + break; + } + case MPI2_FUNCTION_SATA_PASSTHROUGH: ++ { ++ if (test_bit(device_handle, ioc->device_remove_in_progress)) { ++ dtmprintk(ioc, pr_info(MPT3SAS_FMT ++ "handle(0x%04x) :ioctl failed due to device removal in progress\n", ++ ioc->name, device_handle)); ++ mpt3sas_base_free_smid(ioc, smid); ++ ret = -EINVAL; ++ goto out; ++ } ++ ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, ++ data_in_sz); ++ mpt3sas_base_put_smid_default(ioc, smid); ++ break; ++ } + case MPI2_FUNCTION_FW_DOWNLOAD: + case MPI2_FUNCTION_FW_UPLOAD: + { +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 9c61476..c6aa172 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -785,6 +785,11 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, + list_add_tail(&sas_device->list, &ioc->sas_device_list); + spin_unlock_irqrestore(&ioc->sas_device_lock, flags); + ++ if (ioc->hide_drives) { ++ clear_bit(sas_device->handle, ioc->pend_os_device_add); ++ return; ++ } ++ + if (!mpt3sas_transport_port_add(ioc, sas_device->handle, + sas_device->sas_address_parent)) { + _scsih_sas_device_remove(ioc, sas_device); +@@ -800,7 +805,8 @@ _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, + sas_device->sas_address_parent); + _scsih_sas_device_remove(ioc, sas_device); + } +- } ++ } else ++ clear_bit(sas_device->handle, ioc->pend_os_device_add); + } + + /** +@@ -3189,6 +3195,8 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) + if (test_bit(handle, ioc->pd_handles)) + return; + ++ clear_bit(handle, ioc->pend_os_device_add); ++ + spin_lock_irqsave(&ioc->sas_device_lock, flags); + sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); + if (sas_device && sas_device->starget && +@@ -3243,6 +3251,7 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) + mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT; + mpi_request->DevHandle = cpu_to_le16(handle); + mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET; ++ set_bit(handle, ioc->device_remove_in_progress); + mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); + mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); + +@@ -3377,6 +3386,11 @@ _scsih_sas_control_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, + ioc->name, le16_to_cpu(mpi_reply->DevHandle), smid, + le16_to_cpu(mpi_reply->IOCStatus), + le32_to_cpu(mpi_reply->IOCLogInfo))); ++ if (le16_to_cpu(mpi_reply->IOCStatus) == ++ MPI2_IOCSTATUS_SUCCESS) { ++ clear_bit(le16_to_cpu(mpi_reply->DevHandle), ++ ioc->device_remove_in_progress); ++ } + } else { + pr_err(MPT3SAS_FMT "mpi_reply not valid at %s:%d/%s()!\n", + ioc->name, __FILE__, __LINE__, __func__); +@@ -5506,6 +5520,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, + device_info = le32_to_cpu(sas_device_pg0.DeviceInfo); + if (!(_scsih_is_end_device(device_info))) + return -1; ++ set_bit(handle, ioc->pend_os_device_add); + sas_address = le64_to_cpu(sas_device_pg0.SASAddress); + + /* check if device is present */ +@@ -5524,6 +5539,7 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, + sas_device = mpt3sas_get_sdev_by_addr(ioc, + sas_address); + if (sas_device) { ++ clear_bit(handle, ioc->pend_os_device_add); + sas_device_put(sas_device); + return -1; + } +@@ -5846,6 +5862,9 @@ _scsih_sas_topology_change_event(struct MPT3SAS_ADAPTER *ioc, + _scsih_check_device(ioc, sas_address, handle, + phy_number, link_rate); + ++ if (!test_bit(handle, ioc->pend_os_device_add)) ++ break; ++ + + case MPI2_EVENT_SAS_TOPO_RC_TARG_ADDED: + +@@ -7766,6 +7785,9 @@ mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase) + complete(&ioc->tm_cmds.done); + } + ++ memset(ioc->pend_os_device_add, 0, ioc->pend_os_device_add_sz); ++ memset(ioc->device_remove_in_progress, 0, ++ ioc->device_remove_in_progress_sz); + _scsih_fw_event_cleanup_queue(ioc); + _scsih_flush_running_cmds(ioc); + break; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0003-vfs-Add-a-function-to-lazily-unmount-all-mounts-from.patch b/SOURCES/centos-linux-3.10-0003-vfs-Add-a-function-to-lazily-unmount-all-mounts-from.patch new file mode 100644 index 0000000..984e36d --- /dev/null +++ b/SOURCES/centos-linux-3.10-0003-vfs-Add-a-function-to-lazily-unmount-all-mounts-from.patch @@ -0,0 +1,125 @@ +From 0c0bf47e3e77ebff691abe1a5e133e43515e5205 Mon Sep 17 00:00:00 2001 +From: "T.kabe" +Date: Mon, 6 Mar 2017 15:21:16 +0900 +Subject: [PATCH 3/4] vfs: Add a function to lazily unmount all mounts from any dentry. + +[upstream commit 80b5dce8c59b0de1ed6e403b8298e02dcb4db64b] +Author: Eric W. Biederman +Date: Thu Oct 3 01:31:18 2013 -0700 + + vfs: Add a function to lazily unmount all mounts from any dentry. + + The new function detach_mounts comes in two pieces. The first piece + is a static inline test of d_mounpoint that returns immediately + without taking any locks if d_mounpoint is not set. In the common + case when mountpoints are absent this allows the vfs to continue + running with it's same cacheline foot print. + + The second piece of detach_mounts __detach_mounts actually does the + work and it assumes that a mountpoint is present so it is slow and + takes namespace_sem for write, and then locks the mount hash (aka + mount_lock) after a struct mountpoint has been found. + + With those two locks held each entry on the list of mounts on a + mountpoint is selected and lazily unmounted until all of the mount + have been lazily unmounted. + + v7: Wrote a proper change description and removed the changelog + documenting deleted wrong turns. + + Signed-off-by: Eric W. Biederman + Signed-off-by: Al Viro +--- + fs/mount.h | 9 +++++++++ + fs/namespace.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 57 insertions(+) + +diff --git a/fs/mount.h b/fs/mount.h +index 92fecbe..9959119 100644 +--- a/fs/mount.h ++++ b/fs/mount.h +@@ -80,6 +80,15 @@ static inline int is_mounted(struct vfsmount *mnt) + + extern struct mount *__lookup_mnt(struct vfsmount *, struct dentry *, int); + ++extern void __detach_mounts(struct dentry *dentry); ++ ++static inline void detach_mounts(struct dentry *dentry) ++{ ++ if (!d_mountpoint(dentry)) ++ return; ++ __detach_mounts(dentry); ++} ++ + static inline void get_mnt_ns(struct mnt_namespace *ns) + { + atomic_inc(&ns->count); +diff --git a/fs/namespace.c b/fs/namespace.c +index c238481..e48fed3 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -608,6 +608,23 @@ struct vfsmount *lookup_mnt(struct path *path) + } + } + ++static struct mountpoint *lookup_mountpoint(struct dentry *dentry) ++{ ++ struct list_head *chain = mountpoint_hashtable + hash(NULL, dentry); ++ struct mountpoint *mp; ++ ++ list_for_each_entry(mp, chain, m_hash) { ++ if (mp->m_dentry == dentry) { ++ /* might be worth a WARN_ON() */ ++ if (d_unlinked(dentry)) ++ return ERR_PTR(-ENOENT); ++ mp->m_count++; ++ return mp; ++ } ++ } ++ return NULL; ++} ++ + static struct mountpoint *new_mountpoint(struct dentry *dentry) + { + struct list_head *chain = mountpoint_hashtable + hash(NULL, dentry); +@@ -1312,6 +1329,37 @@ static int do_umount(struct mount *mnt, int flags) + return retval; + } + ++/* ++ * __detach_mounts - lazily unmount all mounts on the specified dentry ++ * ++ * During unlink, rmdir, and d_drop it is possible to loose the path ++ * to an existing mountpoint, and wind up leaking the mount. ++ * detach_mounts allows lazily unmounting those mounts instead of ++ * leaking them. ++ * ++ * The caller may hold dentry->d_inode->i_mutex. ++ */ ++void __detach_mounts(struct dentry *dentry) ++{ ++ struct mountpoint *mp; ++ struct mount *mnt; ++ ++ namespace_lock(); ++ mp = lookup_mountpoint(dentry); ++ if (!mp) ++ goto out_unlock; ++ ++ br_write_lock(&vfsmount_lock); ++ while (!hlist_empty(&mp->m_list)) { ++ mnt = hlist_entry(mp->m_list.first, struct mount, mnt_mp_list); ++ umount_tree(mnt, 2); ++ } ++ br_write_unlock(&vfsmount_lock); ++ put_mountpoint(mp); ++out_unlock: ++ namespace_unlock(); ++} ++ + /* + * Is the caller allowed to modify his namespace? + */ +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0004-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch b/SOURCES/centos-linux-3.10-0004-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch new file mode 100644 index 0000000..e02f6ce --- /dev/null +++ b/SOURCES/centos-linux-3.10-0004-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch @@ -0,0 +1,610 @@ +From a28d10b2a9bec8714f59e12fe7fb53bfe8c6ef17 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:46 -0500 +Subject: [PATCH 04/11] scsi: megaraid_sas: SAS3.5 Generic Megaraid Controllers + Stream Detection and IO Coalescing + +Detect sequential Write IOs and pass the hint that it is part of sequential +stream to help HBA Firmware do the Full Stripe Writes. For read IOs on +certain RAID volumes like Read Ahead volumes,this will help driver to +send it to Firmware even if the IOs can potentially be sent to +hardware directly (called fast path) bypassing firmware. + +Design: 8 streams are maintained per RAID volume as per the combined +firmware/driver design. When there is no stream detected the LRU stream +is used for next potential stream and LRU/MRU map is updated to make this +as MRU stream. Every time a stream is detected the MRU map +is updated to make the current stream as MRU stream. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 1 + + drivers/scsi/megaraid/megaraid_sas_base.c | 43 +++++++- + drivers/scsi/megaraid/megaraid_sas_fp.c | 2 + + drivers/scsi/megaraid/megaraid_sas_fusion.c | 165 +++++++++++++++++++++++----- + drivers/scsi/megaraid/megaraid_sas_fusion.h | 117 +++++++++++++++++++- + 5 files changed, 297 insertions(+), 31 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index ccef47b..f387b32 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -2070,6 +2070,7 @@ struct megasas_instance { + /* used to sync fire the cmd to fw */ + spinlock_t hba_lock; + /* used to synch producer, consumer ptrs in dpc */ ++ spinlock_t stream_lock; + spinlock_t completion_lock; + struct dma_pool *frame_dma_pool; + struct dma_pool *sense_dma_pool; +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index c78d7ee..0722286 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -5048,7 +5048,7 @@ static int megasas_init_fw(struct megasas_instance *instance) + struct megasas_register_set __iomem *reg_set; + struct megasas_ctrl_info *ctrl_info = NULL; + unsigned long bar_list; +- int i, loop, fw_msix_count = 0; ++ int i, j, loop, fw_msix_count = 0; + struct IOV_111 *iovPtr; + struct fusion_context *fusion; + +@@ -5235,6 +5235,36 @@ static int megasas_init_fw(struct megasas_instance *instance) + } + + memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS); ++ ++ /* stream detection initialization */ ++ if (instance->is_ventura) { ++ fusion->stream_detect_by_ld = ++ kzalloc(sizeof(struct LD_STREAM_DETECT *) ++ * MAX_LOGICAL_DRIVES_EXT, ++ GFP_KERNEL); ++ if (!fusion->stream_detect_by_ld) { ++ dev_err(&instance->pdev->dev, ++ "unable to allocate stream detection for pool of LDs\n"); ++ goto fail_get_ld_pd_list; ++ } ++ for (i = 0; i < MAX_LOGICAL_DRIVES_EXT; ++i) { ++ fusion->stream_detect_by_ld[i] = ++ kmalloc(sizeof(struct LD_STREAM_DETECT), ++ GFP_KERNEL); ++ if (!fusion->stream_detect_by_ld[i]) { ++ dev_err(&instance->pdev->dev, ++ "unable to allocate stream detect by LD\n "); ++ for (j = 0; j < i; ++j) ++ kfree(fusion->stream_detect_by_ld[j]); ++ kfree(fusion->stream_detect_by_ld); ++ fusion->stream_detect_by_ld = NULL; ++ goto fail_get_ld_pd_list; ++ } ++ fusion->stream_detect_by_ld[i]->mru_bit_map ++ = MR_STREAM_BITMAP; ++ } ++ } ++ + if (megasas_ld_list_query(instance, + MR_LD_QUERY_TYPE_EXPOSED_TO_HOST)) + megasas_get_ld_list(instance); +@@ -5354,6 +5384,8 @@ static int megasas_init_fw(struct megasas_instance *instance) + + return 0; + ++fail_get_ld_pd_list: ++ instance->instancet->disable_intr(instance); + fail_get_pd_list: + instance->instancet->disable_intr(instance); + megasas_destroy_irqs(instance); +@@ -5896,6 +5928,7 @@ static int megasas_probe_one(struct pci_dev *pdev, + + spin_lock_init(&instance->mfi_pool_lock); + spin_lock_init(&instance->hba_lock); ++ spin_lock_init(&instance->stream_lock); + spin_lock_init(&instance->completion_lock); + + mutex_init(&instance->reset_mutex); +@@ -6363,6 +6396,14 @@ static void megasas_detach_one(struct pci_dev *pdev) + if (instance->msix_vectors) + pci_disable_msix(instance->pdev); + ++ if (instance->is_ventura) { ++ for (i = 0; i < MAX_LOGICAL_DRIVES_EXT; ++i) ++ kfree(fusion->stream_detect_by_ld[i]); ++ kfree(fusion->stream_detect_by_ld); ++ fusion->stream_detect_by_ld = NULL; ++ } ++ ++ + if (instance->ctrl_context) { + megasas_release_fusion(instance); + pd_seq_map_sz = sizeof(struct MR_PD_CFG_SEQ_NUM_SYNC) + +diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c +index e413113..fe5b074 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fp.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fp.c +@@ -933,6 +933,8 @@ MR_BuildRaidContext(struct megasas_instance *instance, + + ld = MR_TargetIdToLdGet(ldTgtId, map); + raid = MR_LdRaidGet(ld, map); ++ /*check read ahead bit*/ ++ io_info->ra_capable = raid->capability.ra_capable; + + /* + * if rowDataSize @RAID map and spanRowDataSize @SPAN INFO are zero +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 27c6a1f..946f7c0 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -1704,6 +1704,90 @@ megasas_set_pd_lba(struct MPI2_RAID_SCSI_IO_REQUEST *io_request, u8 cdb_len, + } + + /** ++ * megasas_stream_detect - stream detection on read and and write IOs ++ * @instance: Adapter soft state ++ * @cmd: Command to be prepared ++ * @io_info: IO Request info ++ * ++ */ ++ ++/** stream detection on read and and write IOs */ ++static void megasas_stream_detect(struct megasas_instance *instance, ++ struct megasas_cmd_fusion *cmd, ++ struct IO_REQUEST_INFO *io_info) ++{ ++ struct fusion_context *fusion = instance->ctrl_context; ++ u32 device_id = io_info->ldTgtId; ++ struct LD_STREAM_DETECT *current_ld_sd ++ = fusion->stream_detect_by_ld[device_id]; ++ u32 *track_stream = ¤t_ld_sd->mru_bit_map, stream_num; ++ u32 shifted_values, unshifted_values; ++ u32 index_value_mask, shifted_values_mask; ++ int i; ++ bool is_read_ahead = false; ++ struct STREAM_DETECT *current_sd; ++ /* find possible stream */ ++ for (i = 0; i < MAX_STREAMS_TRACKED; ++i) { ++ stream_num = ++ (*track_stream >> (i * BITS_PER_INDEX_STREAM)) & ++ STREAM_MASK; ++ current_sd = ¤t_ld_sd->stream_track[stream_num]; ++ /* if we found a stream, update the raid ++ * context and also update the mruBitMap ++ */ ++ /* boundary condition */ ++ if ((current_sd->next_seq_lba) && ++ (io_info->ldStartBlock >= current_sd->next_seq_lba) && ++ (io_info->ldStartBlock <= (current_sd->next_seq_lba+32)) && ++ (current_sd->is_read == io_info->isRead)) { ++ ++ if ((io_info->ldStartBlock != current_sd->next_seq_lba) ++ && ((!io_info->isRead) || (!is_read_ahead))) ++ /* ++ * Once the API availible we need to change this. ++ * At this point we are not allowing any gap ++ */ ++ continue; ++ ++ cmd->io_request->RaidContext.raid_context_g35.stream_detected = true; ++ current_sd->next_seq_lba = ++ io_info->ldStartBlock + io_info->numBlocks; ++ /* ++ * update the mruBitMap LRU ++ */ ++ shifted_values_mask = ++ (1 << i * BITS_PER_INDEX_STREAM) - 1; ++ shifted_values = ((*track_stream & shifted_values_mask) ++ << BITS_PER_INDEX_STREAM); ++ index_value_mask = ++ STREAM_MASK << i * BITS_PER_INDEX_STREAM; ++ unshifted_values = ++ *track_stream & ~(shifted_values_mask | ++ index_value_mask); ++ *track_stream = ++ unshifted_values | shifted_values | stream_num; ++ return; ++ ++ } ++ ++ } ++ /* ++ * if we did not find any stream, create a new one ++ * from the least recently used ++ */ ++ stream_num = ++ (*track_stream >> ((MAX_STREAMS_TRACKED - 1) * BITS_PER_INDEX_STREAM)) & ++ STREAM_MASK; ++ current_sd = ¤t_ld_sd->stream_track[stream_num]; ++ current_sd->is_read = io_info->isRead; ++ current_sd->next_seq_lba = io_info->ldStartBlock + io_info->numBlocks; ++ *track_stream = ++ (((*track_stream & ZERO_LAST_STREAM) << 4) | stream_num); ++ return; ++ ++} ++ ++/** + * megasas_build_ldio_fusion - Prepares IOs to devices + * @instance: Adapter soft state + * @scp: SCSI command +@@ -1725,15 +1809,17 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + struct fusion_context *fusion; + struct MR_DRV_RAID_MAP_ALL *local_map_ptr; + u8 *raidLUN; ++ unsigned long spinlock_flags; + + device_id = MEGASAS_DEV_INDEX(scp); + + fusion = instance->ctrl_context; + + io_request = cmd->io_request; +- io_request->RaidContext.VirtualDiskTgtId = cpu_to_le16(device_id); +- io_request->RaidContext.status = 0; +- io_request->RaidContext.exStatus = 0; ++ io_request->RaidContext.raid_context.VirtualDiskTgtId = ++ cpu_to_le16(device_id); ++ io_request->RaidContext.raid_context.status = 0; ++ io_request->RaidContext.raid_context.exStatus = 0; + + req_desc = (union MEGASAS_REQUEST_DESCRIPTOR_UNION *)cmd->request_desc; + +@@ -1804,11 +1890,11 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + + if ((MR_TargetIdToLdGet(device_id, local_map_ptr) >= + instance->fw_supported_vd_count) || (!fusion->fast_path_io)) { +- io_request->RaidContext.regLockFlags = 0; ++ io_request->RaidContext.raid_context.regLockFlags = 0; + fp_possible = 0; + } else { + if (MR_BuildRaidContext(instance, &io_info, +- &io_request->RaidContext, ++ &io_request->RaidContext.raid_context, + local_map_ptr, &raidLUN)) + fp_possible = io_info.fpOkForIo; + } +@@ -1819,6 +1905,18 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + cmd->request_desc->SCSIIO.MSIxIndex = instance->msix_vectors ? + raw_smp_processor_id() % instance->msix_vectors : 0; + ++ if (instance->is_ventura) { ++ spin_lock_irqsave(&instance->stream_lock, spinlock_flags); ++ megasas_stream_detect(instance, cmd, &io_info); ++ spin_unlock_irqrestore(&instance->stream_lock, spinlock_flags); ++ /* In ventura if stream detected for a read and it is read ahead ++ * capable make this IO as LDIO ++ */ ++ if (io_request->RaidContext.raid_context_g35.stream_detected && ++ io_info.isRead && io_info.ra_capable) ++ fp_possible = false; ++ } ++ + if (fp_possible) { + megasas_set_pd_lba(io_request, scp->cmd_len, &io_info, scp, + local_map_ptr, start_lba_lo); +@@ -1827,15 +1925,16 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + (MPI2_REQ_DESCRIPT_FLAGS_FP_IO + << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); + if (fusion->adapter_type == INVADER_SERIES) { +- if (io_request->RaidContext.regLockFlags == ++ if (io_request->RaidContext.raid_context.regLockFlags == + REGION_TYPE_UNUSED) + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); +- io_request->RaidContext.Type = MPI2_TYPE_CUDA; +- io_request->RaidContext.nseg = 0x1; ++ io_request->RaidContext.raid_context.Type ++ = MPI2_TYPE_CUDA; ++ io_request->RaidContext.raid_context.nseg = 0x1; + io_request->IoFlags |= cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); +- io_request->RaidContext.regLockFlags |= ++ io_request->RaidContext.raid_context.regLockFlags |= + (MR_RL_FLAGS_GRANT_DESTINATION_CUDA | + MR_RL_FLAGS_SEQ_NUM_ENABLE); + } +@@ -1862,22 +1961,24 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + /* populate the LUN field */ + memcpy(io_request->LUN, raidLUN, 8); + } else { +- io_request->RaidContext.timeoutValue = ++ io_request->RaidContext.raid_context.timeoutValue = + cpu_to_le16(local_map_ptr->raidMap.fpPdIoTimeoutSec); + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO + << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); + if (fusion->adapter_type == INVADER_SERIES) { + if (io_info.do_fp_rlbypass || +- (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED)) ++ (io_request->RaidContext.raid_context.regLockFlags ++ == REGION_TYPE_UNUSED)) + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); +- io_request->RaidContext.Type = MPI2_TYPE_CUDA; +- io_request->RaidContext.regLockFlags |= ++ io_request->RaidContext.raid_context.Type ++ = MPI2_TYPE_CUDA; ++ io_request->RaidContext.raid_context.regLockFlags |= + (MR_RL_FLAGS_GRANT_DESTINATION_CPU0 | + MR_RL_FLAGS_SEQ_NUM_ENABLE); +- io_request->RaidContext.nseg = 0x1; ++ io_request->RaidContext.raid_context.nseg = 0x1; + } + io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST; + io_request->DevHandle = cpu_to_le16(device_id); +@@ -1913,7 +2014,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, + local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; + io_request->DataLength = cpu_to_le32(scsi_bufflen(scmd)); + /* get RAID_Context pointer */ +- pRAID_Context = &io_request->RaidContext; ++ pRAID_Context = &io_request->RaidContext.raid_context; + /* Check with FW team */ + pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); + pRAID_Context->regLockRowLBA = 0; +@@ -2000,7 +2101,7 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + + io_request = cmd->io_request; + /* get RAID_Context pointer */ +- pRAID_Context = &io_request->RaidContext; ++ pRAID_Context = &io_request->RaidContext.raid_context; + pRAID_Context->regLockFlags = 0; + pRAID_Context->regLockRowLBA = 0; + pRAID_Context->regLockLength = 0; +@@ -2094,9 +2195,9 @@ megasas_build_io_fusion(struct megasas_instance *instance, + io_request->Control = 0; + io_request->EEDPBlockSize = 0; + io_request->ChainOffset = 0; +- io_request->RaidContext.RAIDFlags = 0; +- io_request->RaidContext.Type = 0; +- io_request->RaidContext.nseg = 0; ++ io_request->RaidContext.raid_context.RAIDFlags = 0; ++ io_request->RaidContext.raid_context.Type = 0; ++ io_request->RaidContext.raid_context.nseg = 0; + + memcpy(io_request->CDB.CDB32, scp->cmnd, scp->cmd_len); + /* +@@ -2143,8 +2244,8 @@ megasas_build_io_fusion(struct megasas_instance *instance, + /* numSGE store lower 8 bit of sge_count. + * numSGEExt store higher 8 bit of sge_count + */ +- io_request->RaidContext.numSGE = sge_count; +- io_request->RaidContext.numSGEExt = (u8)(sge_count >> 8); ++ io_request->RaidContext.raid_context.numSGE = sge_count; ++ io_request->RaidContext.raid_context.numSGEExt = (u8)(sge_count >> 8); + + io_request->SGLFlags = cpu_to_le16(MPI2_SGE_FLAGS_64_BIT_ADDRESSING); + +@@ -2303,8 +2404,8 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + cmd_fusion->scmd->SCp.ptr = NULL; + + scmd_local = cmd_fusion->scmd; +- status = scsi_io_req->RaidContext.status; +- extStatus = scsi_io_req->RaidContext.exStatus; ++ status = scsi_io_req->RaidContext.raid_context.status; ++ extStatus = scsi_io_req->RaidContext.raid_context.exStatus; + + switch (scsi_io_req->Function) { + case MPI2_FUNCTION_SCSI_TASK_MGMT: +@@ -2337,8 +2438,8 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + case MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST: /* LD-IO Path */ + /* Map the FW Cmd Status */ + map_cmd_status(cmd_fusion, status, extStatus); +- scsi_io_req->RaidContext.status = 0; +- scsi_io_req->RaidContext.exStatus = 0; ++ scsi_io_req->RaidContext.raid_context.status = 0; ++ scsi_io_req->RaidContext.raid_context.exStatus = 0; + if (megasas_cmd_type(scmd_local) == READ_WRITE_LDIO) + atomic_dec(&instance->ldio_outstanding); + megasas_return_cmd_fusion(instance, cmd_fusion); +@@ -2901,7 +3002,7 @@ void megasas_refire_mgmt_cmd(struct megasas_instance *instance) + && !(cmd_mfi->flags & DRV_DCMD_SKIP_REFIRE); + if (refire_cmd) + megasas_fire_cmd_fusion(instance, req_desc, +- instance->is_ventura); ++ instance->is_ventura); + else + megasas_return_cmd(instance, cmd_mfi); + } +@@ -3390,7 +3491,7 @@ int megasas_check_mpio_paths(struct megasas_instance *instance, + /* Core fusion reset function */ + int megasas_reset_fusion(struct Scsi_Host *shost, int reason) + { +- int retval = SUCCESS, i, convert = 0; ++ int retval = SUCCESS, i, j, convert = 0; + struct megasas_instance *instance; + struct megasas_cmd_fusion *cmd_fusion; + struct fusion_context *fusion; +@@ -3555,6 +3656,16 @@ transition_to_ready: + shost_for_each_device(sdev, shost) + megasas_update_sdev_properties(sdev); + ++ /* reset stream detection array */ ++ if (instance->is_ventura) { ++ for (j = 0; j < MAX_LOGICAL_DRIVES_EXT; ++j) { ++ memset(fusion->stream_detect_by_ld[j], ++ 0, sizeof(struct LD_STREAM_DETECT)); ++ fusion->stream_detect_by_ld[j]->mru_bit_map ++ = MR_STREAM_BITMAP; ++ } ++ } ++ + clear_bit(MEGASAS_FUSION_IN_RESET, + &instance->reset_flags); + instance->instancet->enable_intr(instance); +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index 3cd3d0a..d9cf496 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -133,12 +133,95 @@ struct RAID_CONTEXT { + u8 resvd2; + }; + ++/* ++ * Raid Context structure which describes ventura MegaRAID specific ++ * IO Paramenters ,This resides at offset 0x60 where the SGL normally ++ * starts in MPT IO Frames ++ */ ++struct RAID_CONTEXT_G35 { ++#if defined(__BIG_ENDIAN_BITFIELD) ++ u16 resvd0:8; ++ u16 nseg:4; ++ u16 type:4; ++#else ++ u16 type:4; /* 0x00 */ ++ u16 nseg:4; /* 0x00 */ ++ u16 resvd0:8; ++#endif ++ u16 timeout_value; /* 0x02 -0x03 */ ++ union { ++ struct { ++#if defined(__BIG_ENDIAN_BITFIELD) ++ u16 set_divert:4; ++ u16 cpu_sel:4; ++ u16 log:1; ++ u16 rw:1; ++ u16 sbs:1; ++ u16 sqn:1; ++ u16 fwn:1; ++ u16 c2f:1; ++ u16 sld:1; ++ u16 reserved:1; ++#else ++ u16 reserved:1; ++ u16 sld:1; ++ u16 c2f:1; ++ u16 fwn:1; ++ u16 sqn:1; ++ u16 sbs:1; ++ u16 rw:1; ++ u16 log:1; ++ u16 cpu_sel:4; ++ u16 set_divert:4; ++#endif ++ } bits; ++ u16 s; ++ } routing_flags; /* 0x04 -0x05 routing flags */ ++ u16 virtual_disk_tgt_id; /* 0x06 -0x07 */ ++ u64 reg_lock_row_lba; /* 0x08 - 0x0F */ ++ u32 reg_lock_length; /* 0x10 - 0x13 */ ++ union { ++ u16 next_lmid; /* 0x14 - 0x15 */ ++ u16 peer_smid; /* used for the raid 1/10 fp writes */ ++ } smid; ++ u8 ex_status; /* 0x16 : OUT */ ++ u8 status; /* 0x17 status */ ++ u8 RAIDFlags; /* 0x18 resvd[7:6], ioSubType[5:4], ++ * resvd[3:1], preferredCpu[0] ++ */ ++ u8 span_arm; /* 0x1C span[7:5], arm[4:0] */ ++ u16 config_seq_num; /* 0x1A -0x1B */ ++#if defined(__BIG_ENDIAN_BITFIELD) /* 0x1C - 0x1D */ ++ u16 stream_detected:1; ++ u16 reserved:3; ++ u16 num_sge:12; ++#else ++ u16 num_sge:12; ++ u16 reserved:3; ++ u16 stream_detected:1; ++#endif ++ u8 resvd2[2]; /* 0x1E-0x1F */ ++}; ++ ++union RAID_CONTEXT_UNION { ++ struct RAID_CONTEXT raid_context; ++ struct RAID_CONTEXT_G35 raid_context_g35; ++}; ++ + #define RAID_CTX_SPANARM_ARM_SHIFT (0) + #define RAID_CTX_SPANARM_ARM_MASK (0x1f) + + #define RAID_CTX_SPANARM_SPAN_SHIFT (5) + #define RAID_CTX_SPANARM_SPAN_MASK (0xE0) + ++/* number of bits per index in U32 TrackStream */ ++#define BITS_PER_INDEX_STREAM 4 ++#define INVALID_STREAM_NUM 16 ++#define MR_STREAM_BITMAP 0x76543210 ++#define STREAM_MASK ((1 << BITS_PER_INDEX_STREAM) - 1) ++#define ZERO_LAST_STREAM 0x0fffffff ++#define MAX_STREAMS_TRACKED 8 ++ + /* + * define region lock types + */ +@@ -409,7 +492,7 @@ struct MPI2_RAID_SCSI_IO_REQUEST { + u8 LUN[8]; /* 0x34 */ + __le32 Control; /* 0x3C */ + union MPI2_SCSI_IO_CDB_UNION CDB; /* 0x40 */ +- struct RAID_CONTEXT RaidContext; /* 0x60 */ ++ union RAID_CONTEXT_UNION RaidContext; /* 0x60 */ + union MPI2_SGE_IO_UNION SGL; /* 0x80 */ + }; + +@@ -656,11 +739,13 @@ struct MR_LD_RAID { + u32 encryptionType:8; + u32 pdPiMode:4; + u32 ldPiMode:4; +- u32 reserved5:3; ++ u32 reserved5:2; ++ u32 ra_capable:1; + u32 fpCapable:1; + #else + u32 fpCapable:1; +- u32 reserved5:3; ++ u32 ra_capable:1; ++ u32 reserved5:2; + u32 ldPiMode:4; + u32 pdPiMode:4; + u32 encryptionType:8; +@@ -745,6 +830,7 @@ struct IO_REQUEST_INFO { + u64 start_row; + u8 span_arm; /* span[7:5], arm[4:0] */ + u8 pd_after_lb; ++ bool ra_capable; + }; + + struct MR_LD_TARGET_SYNC { +@@ -930,6 +1016,30 @@ struct MR_PD_CFG_SEQ_NUM_SYNC { + struct MR_PD_CFG_SEQ seq[1]; + } __packed; + ++/* stream detection */ ++struct STREAM_DETECT { ++ u64 next_seq_lba; /* next LBA to match sequential access */ ++ struct megasas_cmd_fusion *first_cmd_fusion; /* first cmd in group */ ++ struct megasas_cmd_fusion *last_cmd_fusion; /* last cmd in group */ ++ u32 count_cmds_in_stream; /* count of host commands in this stream */ ++ u16 num_sges_in_group; /* total number of SGEs in grouped IOs */ ++ u8 is_read; /* SCSI OpCode for this stream */ ++ u8 group_depth; /* total number of host commands in group */ ++ /* TRUE if cannot add any more commands to this group */ ++ bool group_flush; ++ u8 reserved[7]; /* pad to 64-bit alignment */ ++}; ++ ++struct LD_STREAM_DETECT { ++ bool write_back; /* TRUE if WB, FALSE if WT */ ++ bool fp_write_enabled; ++ bool members_ssds; ++ bool fp_cache_bypass_capable; ++ u32 mru_bit_map; /* bitmap used to track MRU and LRU stream indicies */ ++ /* this is the array of stream detect structures (one per stream) */ ++ struct STREAM_DETECT stream_track[MAX_STREAMS_TRACKED]; ++}; ++ + struct MPI2_IOC_INIT_RDPQ_ARRAY_ENTRY { + u64 RDPQBaseAddress; + u32 Reserved1; +@@ -983,6 +1093,7 @@ struct fusion_context { + struct LD_LOAD_BALANCE_INFO load_balance_info[MAX_LOGICAL_DRIVES_EXT]; + LD_SPAN_INFO log_to_span[MAX_LOGICAL_DRIVES_EXT]; + u8 adapter_type; ++ struct LD_STREAM_DETECT **stream_detect_by_ld; + }; + + union desc_value { +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0004-scsi-mpt3sas-Remove-unused-macro-MPT_DEVICE_TLR_ON.patch b/SOURCES/centos-linux-3.10-0004-scsi-mpt3sas-Remove-unused-macro-MPT_DEVICE_TLR_ON.patch new file mode 100644 index 0000000..6e6c21b --- /dev/null +++ b/SOURCES/centos-linux-3.10-0004-scsi-mpt3sas-Remove-unused-macro-MPT_DEVICE_TLR_ON.patch @@ -0,0 +1,32 @@ +From 21cedcd2ba44b8e647a4c35affa5df9b584ccd54 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:35 +0530 +Subject: [PATCH 04/11] scsi: mpt3sas: Remove unused macro "MPT_DEVICE_TLR_ON" + +Removing macro "MPT_DEVICE_TLR_ON" defined in header file as its unused + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.h | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index 241a660..f2fa742 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -379,7 +379,6 @@ struct MPT3SAS_TARGET { + * per device private data + */ + #define MPT_DEVICE_FLAGS_INIT 0x01 +-#define MPT_DEVICE_TLR_ON 0x02 + + #define MFG_PAGE10_HIDE_SSDS_MASK (0x00000003) + #define MFG_PAGE10_HIDE_ALL_DISKS (0x00) +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0004-vfs-Lazily-remove-mounts-on-unlinked-files-and-direc.patch b/SOURCES/centos-linux-3.10-0004-vfs-Lazily-remove-mounts-on-unlinked-files-and-direc.patch new file mode 100644 index 0000000..5d15e8d --- /dev/null +++ b/SOURCES/centos-linux-3.10-0004-vfs-Lazily-remove-mounts-on-unlinked-files-and-direc.patch @@ -0,0 +1,358 @@ +From 743848de574b660972f457c28c02cbb19c8aa439 Mon Sep 17 00:00:00 2001 +From: "T.kabe" +Date: Fri, 3 Mar 2017 17:06:44 +0900 +Subject: [PATCH 4/4] vfs: Lazily remove mounts on unlinked files and directories. + +[upstream commit 8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe] +[upstream commit 7af1364ffa64db61e386628594836e13d2ef04b5] + +commit 8ed936b5671bfb33d89bc60bdcc7cf0470ba52fe +Author: Eric W. Biederman +Date: Tue Oct 1 18:33:48 2013 -0700 + + vfs: Lazily remove mounts on unlinked files and directories. + + With the introduction of mount namespaces and bind mounts it became + possible to access files and directories that on some paths are mount + points but are not mount points on other paths. It is very confusing + when rm -rf somedir returns -EBUSY simply because somedir is mounted + somewhere else. With the addition of user namespaces allowing + unprivileged mounts this condition has gone from annoying to allowing + a DOS attack on other users in the system. + + The possibility for mischief is removed by updating the vfs to support + rename, unlink and rmdir on a dentry that is a mountpoint and by + lazily unmounting mountpoints on deleted dentries. + + In particular this change allows rename, unlink and rmdir system calls + on a dentry without a mountpoint in the current mount namespace to + succeed, and it allows rename, unlink, and rmdir performed on a + distributed filesystem to update the vfs cache even if when there is a + mount in some namespace on the original dentry. + + There are two common patterns of maintaining mounts: Mounts on trusted + paths with the parent directory of the mount point and all ancestory + directories up to / owned by root and modifiable only by root + (i.e. /media/xxx, /dev, /dev/pts, /proc, /sys, /sys/fs/cgroup/{cpu, + cpuacct, ...}, /usr, /usr/local). Mounts on unprivileged directories + maintained by fusermount. + + In the case of mounts in trusted directories owned by root and + modifiable only by root the current parent directory permissions are + sufficient to ensure a mount point on a trusted path is not removed + or renamed by anyone other than root, even if there is a context + where the there are no mount points to prevent this. + + In the case of mounts in directories owned by less privileged users + races with users modifying the path of a mount point are already a + danger. fusermount already uses a combination of chdir, + /proc//fd/NNN, and UMOUNT_NOFOLLOW to prevent these races. The + removable of global rename, unlink, and rmdir protection really adds + nothing new to consider only a widening of the attack window, and + fusermount is already safe against unprivileged users modifying the + directory simultaneously. + + In principle for perfect userspace programs returning -EBUSY for + unlink, rmdir, and rename of dentires that have mounts in the local + namespace is actually unnecessary. Unfortunately not all userspace + programs are perfect so retaining -EBUSY for unlink, rmdir and rename + of dentries that have mounts in the current mount namespace plays an + important role of maintaining consistency with historical behavior and + making imperfect userspace applications hard to exploit. + + v2: Remove spurious old_dentry. + v3: Optimized shrink_submounts_and_drop + Removed unsued afs label + v4: Simplified the changes to check_submounts_and_drop + Do not rename check_submounts_and_drop shrink_submounts_and_drop + Document what why we need atomicity in check_submounts_and_drop + Rely on the parent inode mutex to make d_revalidate and d_invalidate + an atomic unit. + v5: Refcount the mountpoint to detach in case of simultaneous + renames. + + Reviewed-by: Miklos Szeredi + Signed-off-by: "Eric W. Biederman" + Signed-off-by: Al Viro + +commit 7af1364ffa64db61e386628594836e13d2ef04b5 +Author: Eric W. Biederman +Date: Fri Oct 4 19:15:13 2013 -0700 + + vfs: Don't allow overwriting mounts in the current mount namespace + + In preparation for allowing mountpoints to be renamed and unlinked + in remote filesystems and in other mount namespaces test if on a dentry + there is a mount in the local mount namespace before allowing it to + be renamed or unlinked. + + The primary motivation here are old versions of fusermount unmount + which is not safe if the a path can be renamed or unlinked while it is + verifying the mount is safe to unmount. More recent versions are simpler + and safer by simply using UMOUNT_NOFOLLOW when unmounting a mount + in a directory owned by an arbitrary user. + + Miklos Szeredi reports this is approach is good + enough to remove concerns about new kernels mixed with old versions + of fusermount. + + A secondary motivation for restrictions here is that it removing empty + directories that have non-empty mount points on them appears to + violate the rule that rmdir can not remove empty directories. As + Linus Torvalds pointed out this is useful for programs (like git) that + test if a directory is empty with rmdir. + + Therefore this patch arranges to enforce the existing mount point + semantics for local mount namespace. + + v2: Rewrote the test to be a drop in replacement for d_mountpoint + v3: Use bool instead of int as the return type of is_local_mountpoint + + Reviewed-by: Miklos Szeredi + Signed-off-by: "Eric W. Biederman" + Signed-off-by: Al Viro +--- + fs/dcache.c | 69 +++++++++++++++++++++++++++++++--------------------------- + fs/mount.h | 9 ++++++++ + fs/namei.c | 16 +++++++++----- + fs/namespace.c | 35 +++++++++++++++++++++++++++++ + 4 files changed, 91 insertions(+), 38 deletions(-) + +diff --git a/fs/dcache.c b/fs/dcache.c +index 5dabe0e..a3e9e7a 100644 +--- a/fs/dcache.c ++++ b/fs/dcache.c +@@ -1285,36 +1285,38 @@ void shrink_dcache_parent(struct dentry *parent) + } + EXPORT_SYMBOL(shrink_dcache_parent); + +-static enum d_walk_ret check_and_collect(void *_data, struct dentry *dentry) ++struct detach_data { ++ struct select_data select; ++ struct dentry *mountpoint; ++}; ++static enum d_walk_ret detach_and_collect(void *_data, struct dentry *dentry) + { +- struct select_data *data = _data; +- +- if (d_mountpoint(dentry)) { +- data->found = -EBUSY; +- return D_WALK_QUIT; +- } ++ struct detach_data *data = _data; + +- return select_collect(_data, dentry); +-} ++ if (d_mountpoint(dentry)) { ++ __dget_dlock(dentry); ++ data->mountpoint = dentry; ++ return D_WALK_QUIT; ++ } ++ return select_collect(&data->select, dentry); ++ } + + static void check_and_drop(void *_data) + { +- struct select_data *data = _data; ++ struct detach_data *data = _data; + +- if (d_mountpoint(data->start)) +- data->found = -EBUSY; +- if (!data->found) +- __d_drop(data->start); ++ if (!data->mountpoint && !data->select.found) ++ __d_drop(data->select.start); + } + + /** +- * check_submounts_and_drop - prune dcache, check for submounts and drop ++ * check_submounts_and_drop - detach submounts, prune dcache, and drop + * +- * All done as a single atomic operation relative to has_unlinked_ancestor(). +- * Returns 0 if successfully unhashed @parent. If there were submounts then +- * return -EBUSY. ++ * The final d_drop is done as an atomic operation relative to ++ * rename_lock ensuring there are no races with d_set_mounted. This ++ * ensures there are no unhashed dentries on the path to a mountpoint. + * +- * @dentry: dentry to prune and drop ++ * @dentry: dentry to detach, prune and drop + */ + int check_submounts_and_drop(struct dentry *dentry) + { +@@ -1327,19 +1329,24 @@ int check_submounts_and_drop(struct dentry *dentry) + } + + for (;;) { +- struct select_data data; ++ struct detach_data data; + +- INIT_LIST_HEAD(&data.dispose); +- data.start = dentry; +- data.found = 0; ++ data.mountpoint = NULL; ++ INIT_LIST_HEAD(&data.select.dispose); ++ data.select.start = dentry; ++ data.select.found = 0; + +- d_walk(dentry, &data, check_and_collect, check_and_drop); +- ret = data.found; ++ d_walk(dentry, &data, detach_and_collect, check_and_drop); + +- if (!list_empty(&data.dispose)) +- shrink_dentry_list(&data.dispose); ++ if (data.select.found) ++ shrink_dentry_list(&data.select.dispose); + +- if (ret <= 0) ++ if (data.mountpoint) { ++ detach_mounts(data.mountpoint); ++ dput(data.mountpoint); ++ } ++ ++ if (!data.mountpoint && !data.select.found) + break; + + cond_resched(); +@@ -2554,10 +2561,8 @@ static struct dentry *__d_unalias(struct inode *inode, + goto out_err; + m2 = &alias->d_parent->d_inode->i_mutex; + out_unalias: +- if (likely(!d_mountpoint(alias))) { +- __d_move(alias, dentry, false); +- ret = alias; +- } ++ __d_move(alias, dentry, false); ++ ret = alias; + out_err: + spin_unlock(&inode->i_lock); + if (m2) +diff --git a/fs/mount.h b/fs/mount.h +index 9959119..a373c86 100644 +--- a/fs/mount.h ++++ b/fs/mount.h +@@ -107,3 +107,12 @@ struct proc_mounts { + #define proc_mounts(p) (container_of((p), struct proc_mounts, m)) + + extern const struct seq_operations mounts_op; ++ ++extern bool __is_local_mountpoint(struct dentry *dentry); ++static inline bool is_local_mountpoint(struct dentry *dentry) ++{ ++ if (!d_mountpoint(dentry)) ++ return false; ++ ++ return __is_local_mountpoint(dentry); ++} +diff --git a/fs/namei.c b/fs/namei.c +index 872e5e5..ef70aa8 100644 +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -3691,8 +3691,8 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) + mutex_lock(&dentry->d_inode->i_mutex); + + error = -EBUSY; +- if (d_mountpoint(dentry)) +- goto out; ++ if (is_local_mountpoint(dentry)) ++ goto out; + + error = security_inode_rmdir(dir, dentry); + if (error) +@@ -3705,6 +3705,7 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry) + + dentry->d_inode->i_flags |= S_DEAD; + dont_mount(dentry); ++ detach_mounts(dentry); + + out: + mutex_unlock(&dentry->d_inode->i_mutex); +@@ -3806,7 +3807,7 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegate + return -EPERM; + + mutex_lock(&target->i_mutex); +- if (d_mountpoint(dentry)) ++ if (is_local_mountpoint(dentry)) + error = -EBUSY; + else { + error = security_inode_unlink(dir, dentry); +@@ -3815,8 +3816,10 @@ int vfs_unlink(struct inode *dir, struct dentry *dentry, struct inode **delegate + if (error) + goto out; + error = dir->i_op->unlink(dir, dentry); +- if (!error) ++ if (!error) { + dont_mount(dentry); ++ detach_mounts(dentry); ++ } + } + } + out: +@@ -4254,8 +4257,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, + mutex_lock(&target->i_mutex); + + error = -EBUSY; +- if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry)) +- goto out; ++ if (is_local_mountpoint(old_dentry) || is_local_mountpoint(new_dentry)) ++ goto out; + + if (max_links && new_dir != old_dir) { + error = -EMLINK; +@@ -4292,6 +4295,7 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, + if (is_dir) + target->i_flags |= S_DEAD; + dont_mount(new_dentry); ++ detach_mounts(new_dentry); + } + if (!(old_dir->i_sb->s_type->fs_flags & FS_RENAME_DOES_D_MOVE)) { + if (!(flags & RENAME_EXCHANGE)) +diff --git a/fs/namespace.c b/fs/namespace.c +index e48fed3..d633562 100644 +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -625,6 +625,41 @@ static struct mountpoint *lookup_mountpoint(struct dentry *dentry) + return NULL; + } + ++/* ++ * __is_local_mountpoint - Test to see if dentry is a mountpoint in the ++ * current mount namespace. ++ * ++ * The common case is dentries are not mountpoints at all and that ++ * test is handled inline. For the slow case when we are actually ++ * dealing with a mountpoint of some kind, walk through all of the ++ * mounts in the current mount namespace and test to see if the dentry ++ * is a mountpoint. ++ * ++ * The mount_hashtable is not usable in the context because we ++ * need to identify all mounts that may be in the current mount ++ * namespace not just a mount that happens to have some specified ++ * parent mount. ++ */ ++bool __is_local_mountpoint(struct dentry *dentry) ++{ ++ struct mnt_namespace *ns = current->nsproxy->mnt_ns; ++ struct mount *mnt; ++ bool is_covered = false; ++ ++ if (!d_mountpoint(dentry)) ++ goto out; ++ ++ down_read(&namespace_sem); ++ list_for_each_entry(mnt, &ns->list, mnt_list) { ++ is_covered = (mnt->mnt_mountpoint == dentry); ++ if (is_covered) ++ break; ++ } ++ up_read(&namespace_sem); ++out: ++ return is_covered; ++} ++ + static struct mountpoint *new_mountpoint(struct dentry *dentry) + { + struct list_head *chain = mountpoint_hashtable + hash(NULL, dentry); +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0005-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch b/SOURCES/centos-linux-3.10-0005-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch new file mode 100644 index 0000000..758ca5e --- /dev/null +++ b/SOURCES/centos-linux-3.10-0005-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch @@ -0,0 +1,774 @@ +From 9fb69ac5aa175b55ba7d48596a3929e3206cbd4b Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:47 -0500 +Subject: [PATCH 05/11] scsi: megaraid_sas: SAS3.5 Generic Megaraid Controllers + Fast Path for RAID 1/10 Writes + +To improve RAID 1/10 Write performance, OS drivers need to issue the +required Write IOs as Fast Path IOs (after the appropriate checks +allowing Fast Path to be used) to the appropriate physical drives +(translated from the OS logical IO) and wait for all Write IOs to complete. + +Design: A write IO on RAID volume will be examined if it can be sent in +Fast Path based on IO size and starting LBA and ending LBA falling on to +a Physical Drive boundary. If the underlying RAID volume is a RAID 1/10, +driver issues two fast path write IOs one for each corresponding physical +drive after computing the corresponding start LBA for each physical drive. +Both write IOs will have the same payload and are posted to HW such that +replies land in the same reply queue. + +If there are no resources available for sending two IOs, driver will send +the original IO from SCSI layer to RAID volume through the Firmware. + +Based on PCI bandwidth and write payload, every second this feature is +enabled/disabled. + +When both IOs are completed by HW, the resources will be released +and SCSI IO completion handler will be called. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 1 + + drivers/scsi/megaraid/megaraid_sas_fp.c | 31 ++- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 335 ++++++++++++++++++++++++---- + drivers/scsi/megaraid/megaraid_sas_fusion.h | 15 +- + 4 files changed, 329 insertions(+), 53 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index f387b32..0b4d37b 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -2056,6 +2056,7 @@ struct megasas_instance { + + u16 max_num_sge; + u16 max_fw_cmds; ++ u16 max_mpt_cmds; + u16 max_mfi_cmds; + u16 max_scsi_cmds; + u16 ldio_threshold; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c +index fe5b074..3644dbc 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fp.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fp.c +@@ -737,7 +737,7 @@ static u8 mr_spanset_get_phy_params(struct megasas_instance *instance, u32 ld, + struct MR_DRV_RAID_MAP_ALL *map) + { + struct MR_LD_RAID *raid = MR_LdRaidGet(ld, map); +- u32 pd, arRef; ++ u32 pd, arRef, r1_alt_pd; + u8 physArm, span; + u64 row; + u8 retval = TRUE; +@@ -772,9 +772,16 @@ static u8 mr_spanset_get_phy_params(struct megasas_instance *instance, u32 ld, + arRef = MR_LdSpanArrayGet(ld, span, map); + pd = MR_ArPdGet(arRef, physArm, map); + +- if (pd != MR_PD_INVALID) ++ if (pd != MR_PD_INVALID) { + *pDevHandle = MR_PdDevHandleGet(pd, map); +- else { ++ /* get second pd also for raid 1/10 fast path writes*/ ++ if (raid->level == 1) { ++ r1_alt_pd = MR_ArPdGet(arRef, physArm + 1, map); ++ if (r1_alt_pd != MR_PD_INVALID) ++ io_info->r1_alt_dev_handle = ++ MR_PdDevHandleGet(r1_alt_pd, map); ++ } ++ } else { + *pDevHandle = cpu_to_le16(MR_PD_INVALID); + if ((raid->level >= 5) && + ((fusion->adapter_type == THUNDERBOLT_SERIES) || +@@ -818,7 +825,7 @@ u8 MR_GetPhyParams(struct megasas_instance *instance, u32 ld, u64 stripRow, + struct MR_DRV_RAID_MAP_ALL *map) + { + struct MR_LD_RAID *raid = MR_LdRaidGet(ld, map); +- u32 pd, arRef; ++ u32 pd, arRef, r1_alt_pd; + u8 physArm, span; + u64 row; + u8 retval = TRUE; +@@ -866,10 +873,17 @@ u8 MR_GetPhyParams(struct megasas_instance *instance, u32 ld, u64 stripRow, + arRef = MR_LdSpanArrayGet(ld, span, map); + pd = MR_ArPdGet(arRef, physArm, map); /* Get the pd */ + +- if (pd != MR_PD_INVALID) ++ if (pd != MR_PD_INVALID) { + /* Get dev handle from Pd. */ + *pDevHandle = MR_PdDevHandleGet(pd, map); +- else { ++ /* get second pd also for raid 1/10 fast path writes*/ ++ if (raid->level == 1) { ++ r1_alt_pd = MR_ArPdGet(arRef, physArm + 1, map); ++ if (r1_alt_pd != MR_PD_INVALID) ++ io_info->r1_alt_dev_handle = ++ MR_PdDevHandleGet(r1_alt_pd, map); ++ } ++ } else { + /* set dev handle as invalid. */ + *pDevHandle = cpu_to_le16(MR_PD_INVALID); + if ((raid->level >= 5) && +@@ -1124,6 +1138,11 @@ MR_BuildRaidContext(struct megasas_instance *instance, + /* If IO on an invalid Pd, then FP is not possible.*/ + if (io_info->devHandle == cpu_to_le16(MR_PD_INVALID)) + io_info->fpOkForIo = FALSE; ++ /* set raid 1/10 fast path write capable bit in io_info */ ++ if (io_info->fpOkForIo && ++ (io_info->r1_alt_dev_handle != MR_PD_INVALID) && ++ (raid->level == 1) && !isRead) ++ io_info->is_raid_1_fp_write = 1; + return retval; + } else if (isRead) { + uint stripIdx; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 946f7c0..b146cd1 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -270,7 +270,8 @@ megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_c + instance->ldio_threshold = ldio_threshold; + + if (!instance->is_rdpq) +- instance->max_fw_cmds = min_t(u16, instance->max_fw_cmds, 1024); ++ instance->max_fw_cmds = ++ min_t(u16, instance->max_fw_cmds, 1024); + + if (reset_devices) + instance->max_fw_cmds = min(instance->max_fw_cmds, +@@ -286,7 +287,14 @@ megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_c + (MEGASAS_FUSION_INTERNAL_CMDS + + MEGASAS_FUSION_IOCTL_CMDS); + instance->cur_can_queue = instance->max_scsi_cmds; ++ instance->host->can_queue = instance->cur_can_queue; + } ++ ++ if (instance->is_ventura) ++ instance->max_mpt_cmds = ++ instance->max_fw_cmds * RAID_1_10_RMW_CMDS; ++ else ++ instance->max_mpt_cmds = instance->max_fw_cmds; + } + /** + * megasas_free_cmds_fusion - Free all the cmds in the free cmd pool +@@ -300,7 +308,7 @@ megasas_free_cmds_fusion(struct megasas_instance *instance) + struct megasas_cmd_fusion *cmd; + + /* SG, Sense */ +- for (i = 0; i < instance->max_fw_cmds; i++) { ++ for (i = 0; i < instance->max_mpt_cmds; i++) { + cmd = fusion->cmd_list[i]; + if (cmd) { + if (cmd->sg_frame) +@@ -344,7 +352,7 @@ megasas_free_cmds_fusion(struct megasas_instance *instance) + + + /* cmd_list */ +- for (i = 0; i < instance->max_fw_cmds; i++) ++ for (i = 0; i < instance->max_mpt_cmds; i++) + kfree(fusion->cmd_list[i]); + + kfree(fusion->cmd_list); +@@ -396,33 +404,49 @@ static int megasas_create_sg_sense_fusion(struct megasas_instance *instance) + return -ENOMEM; + } + } ++ ++ /* create sense buffer for the raid 1/10 fp */ ++ for (i = max_cmd; i < instance->max_mpt_cmds; i++) { ++ cmd = fusion->cmd_list[i]; ++ cmd->sense = pci_pool_alloc(fusion->sense_dma_pool, ++ GFP_KERNEL, &cmd->sense_phys_addr); ++ if (!cmd->sense) { ++ dev_err(&instance->pdev->dev, ++ "Failed from %s %d\n", __func__, __LINE__); ++ return -ENOMEM; ++ } ++ } ++ + return 0; + } + + int + megasas_alloc_cmdlist_fusion(struct megasas_instance *instance) + { +- u32 max_cmd, i; ++ u32 max_mpt_cmd, i; + struct fusion_context *fusion; + + fusion = instance->ctrl_context; + +- max_cmd = instance->max_fw_cmds; ++ max_mpt_cmd = instance->max_mpt_cmds; + + /* + * fusion->cmd_list is an array of struct megasas_cmd_fusion pointers. + * Allocate the dynamic array first and then allocate individual + * commands. + */ +- fusion->cmd_list = kzalloc(sizeof(struct megasas_cmd_fusion *) * max_cmd, +- GFP_KERNEL); ++ fusion->cmd_list = ++ kzalloc(sizeof(struct megasas_cmd_fusion *) * max_mpt_cmd, ++ GFP_KERNEL); + if (!fusion->cmd_list) { + dev_err(&instance->pdev->dev, + "Failed from %s %d\n", __func__, __LINE__); + return -ENOMEM; + } + +- for (i = 0; i < max_cmd; i++) { ++ ++ ++ for (i = 0; i < max_mpt_cmd; i++) { + fusion->cmd_list[i] = kzalloc(sizeof(struct megasas_cmd_fusion), + GFP_KERNEL); + if (!fusion->cmd_list[i]) { +@@ -657,13 +681,14 @@ megasas_alloc_cmds_fusion(struct megasas_instance *instance) + */ + + /* SMID 0 is reserved. Set SMID/index from 1 */ +- for (i = 0; i < instance->max_fw_cmds; i++) { ++ for (i = 0; i < instance->max_mpt_cmds; i++) { + cmd = fusion->cmd_list[i]; + offset = MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE * i; + memset(cmd, 0, sizeof(struct megasas_cmd_fusion)); + cmd->index = i + 1; + cmd->scmd = NULL; +- cmd->sync_cmd_idx = (i >= instance->max_scsi_cmds) ? ++ cmd->sync_cmd_idx = ++ (i >= instance->max_scsi_cmds && i < instance->max_fw_cmds) ? + (i - instance->max_scsi_cmds) : + (u32)ULONG_MAX; /* Set to Invalid */ + cmd->instance = instance; +@@ -673,6 +698,7 @@ megasas_alloc_cmds_fusion(struct megasas_instance *instance) + memset(cmd->io_request, 0, + sizeof(struct MPI2_RAID_SCSI_IO_REQUEST)); + cmd->io_request_phys_addr = io_req_base_phys + offset; ++ cmd->is_raid_1_fp_write = 0; + } + + if (megasas_create_sg_sense_fusion(instance)) +@@ -1262,12 +1288,12 @@ megasas_init_adapter_fusion(struct megasas_instance *instance) + fusion->reply_q_depth = 2 * (((max_cmd + 1 + 15)/16)*16); + + fusion->request_alloc_sz = +- sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) *max_cmd; ++ sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) * instance->max_mpt_cmds; + fusion->reply_alloc_sz = sizeof(union MPI2_REPLY_DESCRIPTORS_UNION) + *(fusion->reply_q_depth); + fusion->io_frames_alloc_sz = MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE + +- (MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE * +- (max_cmd + 1)); /* Extra 1 for SMID 0 */ ++ (MEGA_MPI2_RAID_DEFAULT_IO_FRAME_SIZE ++ * (instance->max_mpt_cmds + 1)); /* Extra 1 for SMID 0 */ + + scratch_pad_2 = readl(&instance->reg_set->outbound_scratch_pad_2); + /* If scratch_pad_2 & MEGASAS_MAX_CHAIN_SIZE_UNITS_MASK is set, +@@ -1403,42 +1429,43 @@ fail_alloc_mfi_cmds: + */ + + void +-map_cmd_status(struct megasas_cmd_fusion *cmd, u8 status, u8 ext_status) ++map_cmd_status(struct fusion_context *fusion, ++ struct scsi_cmnd *scmd, u8 status, u8 ext_status, ++ u32 data_length, u8 *sense) + { + + switch (status) { + + case MFI_STAT_OK: +- cmd->scmd->result = DID_OK << 16; ++ scmd->result = DID_OK << 16; + break; + + case MFI_STAT_SCSI_IO_FAILED: + case MFI_STAT_LD_INIT_IN_PROGRESS: +- cmd->scmd->result = (DID_ERROR << 16) | ext_status; ++ scmd->result = (DID_ERROR << 16) | ext_status; + break; + + case MFI_STAT_SCSI_DONE_WITH_ERROR: + +- cmd->scmd->result = (DID_OK << 16) | ext_status; ++ scmd->result = (DID_OK << 16) | ext_status; + if (ext_status == SAM_STAT_CHECK_CONDITION) { +- memset(cmd->scmd->sense_buffer, 0, ++ memset(scmd->sense_buffer, 0, + SCSI_SENSE_BUFFERSIZE); +- memcpy(cmd->scmd->sense_buffer, cmd->sense, ++ memcpy(scmd->sense_buffer, sense, + SCSI_SENSE_BUFFERSIZE); +- cmd->scmd->result |= DRIVER_SENSE << 24; ++ scmd->result |= DRIVER_SENSE << 24; + } + break; + + case MFI_STAT_LD_OFFLINE: + case MFI_STAT_DEVICE_NOT_FOUND: +- cmd->scmd->result = DID_BAD_TARGET << 16; ++ scmd->result = DID_BAD_TARGET << 16; + break; + case MFI_STAT_CONFIG_SEQ_MISMATCH: +- cmd->scmd->result = DID_IMM_RETRY << 16; ++ scmd->result = DID_IMM_RETRY << 16; + break; + default: +- dev_printk(KERN_DEBUG, &cmd->instance->pdev->dev, "FW status %#x\n", status); +- cmd->scmd->result = DID_ERROR << 16; ++ scmd->result = DID_ERROR << 16; + break; + } + } +@@ -1881,6 +1908,7 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + io_info.ldStartBlock = ((u64)start_lba_hi << 32) | start_lba_lo; + io_info.numBlocks = datalength; + io_info.ldTgtId = device_id; ++ io_info.r1_alt_dev_handle = MR_PD_INVALID; + io_request->DataLength = cpu_to_le32(scsi_bufflen(scp)); + + if (scp->sc_data_direction == PCI_DMA_FROMDEVICE) +@@ -1949,6 +1977,10 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + } else + scp->SCp.Status &= ~MEGASAS_LOAD_BALANCE_FLAG; + ++ cmd->is_raid_1_fp_write = io_info.is_raid_1_fp_write; ++ if (io_info.is_raid_1_fp_write) ++ cmd->r1_alt_dev_handle = io_info.r1_alt_dev_handle; ++ + if ((raidLUN[0] == 1) && + (local_map_ptr->raidMap.devHndlInfo[io_info.pd_after_lb].validHandles > 1)) { + instance->dev_handle = !(instance->dev_handle); +@@ -2272,19 +2304,118 @@ megasas_get_request_descriptor(struct megasas_instance *instance, u16 index) + u8 *p; + struct fusion_context *fusion; + +- if (index >= instance->max_fw_cmds) { ++ if (index >= instance->max_mpt_cmds) { + dev_err(&instance->pdev->dev, "Invalid SMID (0x%x)request for " + "descriptor for scsi%d\n", index, + instance->host->host_no); + return NULL; + } + fusion = instance->ctrl_context; +- p = fusion->req_frames_desc +- +sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) *index; ++ p = fusion->req_frames_desc + ++ sizeof(union MEGASAS_REQUEST_DESCRIPTOR_UNION) * index; + + return (union MEGASAS_REQUEST_DESCRIPTOR_UNION *)p; + } + ++/* ++ * megasas_fpio_to_ldio- ++ * This function converts an fp io to ldio ++ */ ++ ++void megasas_fpio_to_ldio(struct megasas_instance *instance, ++ struct megasas_cmd_fusion *cmd, struct scsi_cmnd *scmd) ++{ ++ struct fusion_context *fusion; ++ ++ fusion = instance->ctrl_context; ++ cmd->request_desc->SCSIIO.RequestFlags = ++ (MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO ++ << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); ++ cmd->io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST; ++ cmd->io_request->DevHandle = cpu_to_le16(MEGASAS_DEV_INDEX(scmd)); ++ ++ /*remove FAST PATH ENABLE bit in IoFlags */ ++ cmd->io_request->IoFlags &= ++ cpu_to_le16(~MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); ++ ++ /* if the numSGE > max_sge_in_main_sge set the chain offset*/ ++ if (cmd->io_request->RaidContext.raid_context_g35.num_sge > ++ fusion->max_sge_in_main_msg) ++ cmd->io_request->ChainOffset = fusion->chain_offset_io_request; ++ memcpy(cmd->io_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len); ++ cmd->io_request->CDB.EEDP32.PrimaryReferenceTag = 0; ++ cmd->io_request->CDB.EEDP32.PrimaryApplicationTagMask = 0; ++ cmd->io_request->EEDPFlags = 0; ++ cmd->io_request->Control = 0; ++ cmd->io_request->EEDPBlockSize = 0; ++ cmd->is_raid_1_fp_write = 0; ++} ++ ++/* megasas_prepate_secondRaid1_IO ++ * It prepares the raid 1 second IO ++ */ ++void megasas_prepare_secondRaid1_IO(struct megasas_instance *instance, ++ struct megasas_cmd_fusion *cmd, ++ struct megasas_cmd_fusion *r1_cmd) ++{ ++ union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc, *req_desc2 = NULL; ++ struct fusion_context *fusion; ++ ++ fusion = instance->ctrl_context; ++ req_desc = cmd->request_desc; ++ if (r1_cmd) { ++ /* copy the io request frame as well ++ * as 8 SGEs data for r1 command ++ */ ++ memcpy(r1_cmd->io_request, cmd->io_request, ++ sizeof(struct MPI2_RAID_SCSI_IO_REQUEST)); ++ memcpy(&r1_cmd->io_request->SGL, &cmd->io_request->SGL, ++ (fusion->max_sge_in_main_msg * ++ sizeof(union MPI2_SGE_IO_UNION))); ++ /*sense buffer is different for r1 command*/ ++ r1_cmd->io_request->SenseBufferLowAddress = ++ cpu_to_le32(r1_cmd->sense_phys_addr); ++ r1_cmd->scmd = cmd->scmd; ++ req_desc2 = ++ megasas_get_request_descriptor(instance, r1_cmd->index-1); ++ if (req_desc2) { ++ req_desc2->Words = 0; ++ r1_cmd->request_desc = req_desc2; ++ req_desc2->SCSIIO.SMID = ++ cpu_to_le16(r1_cmd->index); ++ req_desc2->SCSIIO.RequestFlags = ++ req_desc->SCSIIO.RequestFlags; ++ r1_cmd->is_raid_1_fp_write = 1; ++ r1_cmd->request_desc->SCSIIO.DevHandle = ++ cmd->r1_alt_dev_handle; ++ r1_cmd->io_request->DevHandle = cmd->r1_alt_dev_handle; ++ cmd->io_request->RaidContext.raid_context_g35.smid.peer_smid = ++ cpu_to_le16(r1_cmd->index); ++ r1_cmd->io_request->RaidContext.raid_context_g35.smid.peer_smid = ++ cpu_to_le16(cmd->index); ++ /* MSIxIndex of both commands request ++ * descriptors should be same ++ */ ++ r1_cmd->request_desc->SCSIIO.MSIxIndex = ++ cmd->request_desc->SCSIIO.MSIxIndex; ++ /*span arm is different for r1 cmd*/ ++ r1_cmd->io_request->RaidContext.raid_context_g35.span_arm = ++ cmd->io_request->RaidContext.raid_context_g35.span_arm + 1; ++ } else { ++ megasas_return_cmd_fusion(instance, r1_cmd); ++ dev_info(&instance->pdev->dev, ++ "unable to get request descriptor, firing as normal IO\n"); ++ atomic_dec(&instance->fw_outstanding); ++ megasas_fpio_to_ldio(instance, cmd, cmd->scmd); ++ } ++ } else { ++ dev_info(&instance->pdev->dev, ++ "unable to get command, firing as normal IO\n"); ++ atomic_dec(&instance->fw_outstanding); ++ megasas_fpio_to_ldio(instance, cmd, cmd->scmd); ++ } ++} ++ + /** + * megasas_build_and_issue_cmd_fusion -Main routine for building and + * issuing non IOCTL cmd +@@ -2295,7 +2426,7 @@ static u32 + megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + struct scsi_cmnd *scmd) + { +- struct megasas_cmd_fusion *cmd; ++ struct megasas_cmd_fusion *cmd, *r1_cmd = NULL; + union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc; + u32 index; + struct fusion_context *fusion; +@@ -2310,13 +2441,27 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + return SCSI_MLQUEUE_DEVICE_BUSY; + } + ++ if (atomic_inc_return(&instance->fw_outstanding) > ++ instance->host->can_queue) { ++ dev_err(&instance->pdev->dev, "Throttle IOs beyond Controller queue depth\n"); ++ atomic_dec(&instance->fw_outstanding); ++ return SCSI_MLQUEUE_HOST_BUSY; ++ } ++ + cmd = megasas_get_cmd_fusion(instance, scmd->request->tag); + ++ if (!cmd) { ++ atomic_dec(&instance->fw_outstanding); ++ return SCSI_MLQUEUE_HOST_BUSY; ++ } ++ + index = cmd->index; + + req_desc = megasas_get_request_descriptor(instance, index-1); +- if (!req_desc) ++ if (!req_desc) { ++ atomic_dec(&instance->fw_outstanding); + return SCSI_MLQUEUE_HOST_BUSY; ++ } + + req_desc->Words = 0; + cmd->request_desc = req_desc; +@@ -2325,6 +2470,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + megasas_return_cmd_fusion(instance, cmd); + dev_err(&instance->pdev->dev, "Error building command\n"); + cmd->request_desc = NULL; ++ atomic_dec(&instance->fw_outstanding); + return SCSI_MLQUEUE_HOST_BUSY; + } + +@@ -2335,14 +2481,39 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + cmd->io_request->ChainOffset != 0xF) + dev_err(&instance->pdev->dev, "The chain offset value is not " + "correct : %x\n", cmd->io_request->ChainOffset); ++ /* ++ * if it is raid 1/10 fp write capable. ++ * try to get second command from pool and construct it. ++ * From FW, it has confirmed that lba values of two PDs ++ * corresponds to single R1/10 LD are always same ++ * ++ */ ++ /* driver side count always should be less than max_fw_cmds ++ * to get new command ++ */ ++ if (cmd->is_raid_1_fp_write && ++ atomic_inc_return(&instance->fw_outstanding) > ++ (instance->host->can_queue)) { ++ megasas_fpio_to_ldio(instance, cmd, cmd->scmd); ++ atomic_dec(&instance->fw_outstanding); ++ } else if (cmd->is_raid_1_fp_write) { ++ r1_cmd = megasas_get_cmd_fusion(instance, ++ (scmd->request->tag + instance->max_fw_cmds)); ++ megasas_prepare_secondRaid1_IO(instance, cmd, r1_cmd); ++ } ++ + + /* + * Issue the command to the FW + */ +- atomic_inc(&instance->fw_outstanding); + + megasas_fire_cmd_fusion(instance, req_desc, instance->is_ventura); + ++ if (r1_cmd) ++ megasas_fire_cmd_fusion(instance, r1_cmd->request_desc, ++ instance->is_ventura); ++ ++ + return 0; + } + +@@ -2359,10 +2530,10 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + struct MPI2_RAID_SCSI_IO_REQUEST *scsi_io_req; + struct fusion_context *fusion; + struct megasas_cmd *cmd_mfi; +- struct megasas_cmd_fusion *cmd_fusion; ++ struct megasas_cmd_fusion *cmd_fusion, *r1_cmd = NULL; + u16 smid, num_completed; +- u8 reply_descript_type; +- u32 status, extStatus, device_id; ++ u8 reply_descript_type, *sense; ++ u32 status, extStatus, device_id, data_length; + union desc_value d_val; + struct LD_LOAD_BALANCE_INFO *lbinfo; + int threshold_reply_count = 0; +@@ -2392,6 +2563,15 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + + while (d_val.u.low != cpu_to_le32(UINT_MAX) && + d_val.u.high != cpu_to_le32(UINT_MAX)) { ++ /* ++ * Ensure that the peer command is NULL here in case a ++ * command has completed but the R1 FP Write peer has ++ * not completed yet.If not null, it's possible that ++ * another thread will complete the peer ++ * command and should not. ++ */ ++ r1_cmd = NULL; ++ + smid = le16_to_cpu(reply_desc->SMID); + + cmd_fusion = fusion->cmd_list[smid - 1]; +@@ -2406,6 +2586,8 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + scmd_local = cmd_fusion->scmd; + status = scsi_io_req->RaidContext.raid_context.status; + extStatus = scsi_io_req->RaidContext.raid_context.exStatus; ++ sense = cmd_fusion->sense; ++ data_length = scsi_io_req->DataLength; + + switch (scsi_io_req->Function) { + case MPI2_FUNCTION_SCSI_TASK_MGMT: +@@ -2422,12 +2604,28 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + /* Update load balancing info */ + device_id = MEGASAS_DEV_INDEX(scmd_local); + lbinfo = &fusion->load_balance_info[device_id]; +- if (cmd_fusion->scmd->SCp.Status & +- MEGASAS_LOAD_BALANCE_FLAG) { ++ /* ++ * check for the raid 1/10 fast path writes ++ */ ++ if (!cmd_fusion->is_raid_1_fp_write && ++ (cmd_fusion->scmd->SCp.Status & ++ MEGASAS_LOAD_BALANCE_FLAG)) { + atomic_dec(&lbinfo->scsi_pending_cmds[cmd_fusion->pd_r1_lb]); + cmd_fusion->scmd->SCp.Status &= + ~MEGASAS_LOAD_BALANCE_FLAG; ++ } else if (cmd_fusion->is_raid_1_fp_write) { ++ /* get peer command */ ++ if (cmd_fusion->index < instance->max_fw_cmds) ++ r1_cmd = fusion->cmd_list[(cmd_fusion->index + ++ instance->max_fw_cmds)-1]; ++ else { ++ r1_cmd = ++ fusion->cmd_list[(cmd_fusion->index - ++ instance->max_fw_cmds)-1]; ++ } ++ cmd_fusion->cmd_completed = true; + } ++ + if (reply_descript_type == + MPI2_RPY_DESCRIPT_FLAGS_SCSI_IO_SUCCESS) { + if (megasas_dbg_lvl == 5) +@@ -2437,14 +2635,48 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + /* Fall thru and complete IO */ + case MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST: /* LD-IO Path */ + /* Map the FW Cmd Status */ +- map_cmd_status(cmd_fusion, status, extStatus); +- scsi_io_req->RaidContext.raid_context.status = 0; +- scsi_io_req->RaidContext.raid_context.exStatus = 0; +- if (megasas_cmd_type(scmd_local) == READ_WRITE_LDIO) +- atomic_dec(&instance->ldio_outstanding); +- megasas_return_cmd_fusion(instance, cmd_fusion); +- scsi_dma_unmap(scmd_local); +- scmd_local->scsi_done(scmd_local); ++ /* ++ * check for the raid 1/10 fast path writes ++ */ ++ if (r1_cmd && r1_cmd->is_raid_1_fp_write ++ && r1_cmd->cmd_completed) { ++ /* ++ * if the peer Raid 1/10 fast path failed, ++ * mark IO as failed to the scsi layer. ++ * over write the current status by the failed ++ * status makes sure that if any one of ++ * command fails,return fail status to ++ * scsi layer ++ */ ++ if (r1_cmd->io_request->RaidContext.raid_context.status != ++ MFI_STAT_OK) { ++ status = ++ r1_cmd->io_request->RaidContext.raid_context.status; ++ extStatus = ++ r1_cmd->io_request->RaidContext.raid_context.exStatus; ++ data_length = ++ r1_cmd->io_request->DataLength; ++ sense = r1_cmd->sense; ++ } ++ r1_cmd->io_request->RaidContext.raid_context.status = 0; ++ r1_cmd->io_request->RaidContext.raid_context.exStatus = 0; ++ cmd_fusion->is_raid_1_fp_write = 0; ++ r1_cmd->is_raid_1_fp_write = 0; ++ r1_cmd->cmd_completed = false; ++ cmd_fusion->cmd_completed = false; ++ megasas_return_cmd_fusion(instance, r1_cmd); ++ } ++ if (!cmd_fusion->is_raid_1_fp_write) { ++ map_cmd_status(fusion, scmd_local, status, ++ extStatus, data_length, sense); ++ scsi_io_req->RaidContext.raid_context.status ++ = 0; ++ scsi_io_req->RaidContext.raid_context.exStatus ++ = 0; ++ megasas_return_cmd_fusion(instance, cmd_fusion); ++ scsi_dma_unmap(scmd_local); ++ scmd_local->scsi_done(scmd_local); ++ } + atomic_dec(&instance->fw_outstanding); + + break; +@@ -3493,7 +3725,7 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int reason) + { + int retval = SUCCESS, i, j, convert = 0; + struct megasas_instance *instance; +- struct megasas_cmd_fusion *cmd_fusion; ++ struct megasas_cmd_fusion *cmd_fusion, *mpt_cmd_fusion; + struct fusion_context *fusion; + u32 abs_state, status_reg, reset_adapter; + u32 io_timeout_in_crash_mode = 0; +@@ -3568,6 +3800,18 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int reason) + /* Now return commands back to the OS */ + for (i = 0 ; i < instance->max_scsi_cmds; i++) { + cmd_fusion = fusion->cmd_list[i]; ++ /*check for extra commands issued by driver*/ ++ if (instance->is_ventura) { ++ cmd_fusion->is_raid_1_fp_write = 0; ++ cmd_fusion->cmd_completed = false; ++ mpt_cmd_fusion = ++ fusion->cmd_list[i + instance->max_fw_cmds]; ++ mpt_cmd_fusion->is_raid_1_fp_write = 0; ++ mpt_cmd_fusion->cmd_completed = false; ++ if (mpt_cmd_fusion->scmd) ++ megasas_return_cmd_fusion(instance, ++ mpt_cmd_fusion); ++ } + scmd_local = cmd_fusion->scmd; + if (cmd_fusion->scmd) { + scmd_local->result = +@@ -3578,10 +3822,11 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int reason) + megasas_return_cmd_fusion(instance, cmd_fusion); + scsi_dma_unmap(scmd_local); + scmd_local->scsi_done(scmd_local); +- atomic_dec(&instance->fw_outstanding); + } + } + ++ atomic_set(&instance->fw_outstanding, 0); ++ + status_reg = instance->instancet->read_fw_status_reg( + instance->reg_set); + abs_state = status_reg & MFI_STATE_MASK; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index d9cf496..7a3c3d1 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -94,6 +94,7 @@ enum MR_RAID_FLAGS_IO_SUB_TYPE { + #define MEGASAS_FP_CMD_LEN 16 + #define MEGASAS_FUSION_IN_RESET 0 + #define THRESHOLD_REPLY_COUNT 50 ++#define RAID_1_10_RMW_CMDS 3 + #define JBOD_MAPS_COUNT 2 + + enum MR_FUSION_ADAPTER_TYPE { +@@ -728,7 +729,9 @@ struct MR_SPAN_BLOCK_INFO { + struct MR_LD_RAID { + struct { + #if defined(__BIG_ENDIAN_BITFIELD) +- u32 reserved4:5; ++ u32 reserved4:3; ++ u32 fp_cache_bypass_capable:1; ++ u32 fp_rmw_capable:1; + u32 fpBypassRegionLock:1; + u32 tmCapable:1; + u32 fpNonRWCapable:1; +@@ -756,7 +759,9 @@ struct MR_LD_RAID { + u32 fpNonRWCapable:1; + u32 tmCapable:1; + u32 fpBypassRegionLock:1; +- u32 reserved4:5; ++ u32 fp_rmw_capable:1; ++ u32 fp_cache_bypass_capable:1; ++ u32 reserved4:3; + #endif + } capability; + __le32 reserved6; +@@ -830,6 +835,8 @@ struct IO_REQUEST_INFO { + u64 start_row; + u8 span_arm; /* span[7:5], arm[4:0] */ + u8 pd_after_lb; ++ u16 r1_alt_dev_handle; /* raid 1/10 only */ ++ bool is_raid_1_fp_write; + bool ra_capable; + }; + +@@ -883,6 +890,10 @@ struct megasas_cmd_fusion { + u32 index; + u8 pd_r1_lb; + struct completion done; ++ bool is_raid_1_fp_write; ++ u16 r1_alt_dev_handle; /* raid 1/10 only*/ ++ bool cmd_completed; /* raid 1/10 fp writes status holder */ ++ + }; + + struct LD_LOAD_BALANCE_INFO { +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0005-scsi-mpt3sas-Bump-driver-version-as-14.100.00.00.patch b/SOURCES/centos-linux-3.10-0005-scsi-mpt3sas-Bump-driver-version-as-14.100.00.00.patch new file mode 100644 index 0000000..d6d2120 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0005-scsi-mpt3sas-Bump-driver-version-as-14.100.00.00.patch @@ -0,0 +1,31 @@ +From 0815c65e49489bdbfbd0f90e4a2b78184a603eea Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:36 +0530 +Subject: [PATCH 05/11] scsi: mpt3sas: Bump driver version as "14.100.00.00" + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index f2fa742..66cfa0f 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -73,8 +73,8 @@ + #define MPT3SAS_DRIVER_NAME "mpt3sas" + #define MPT3SAS_AUTHOR "Avago Technologies " + #define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver" +-#define MPT3SAS_DRIVER_VERSION "13.100.00.00" +-#define MPT3SAS_MAJOR_VERSION 13 ++#define MPT3SAS_DRIVER_VERSION "14.100.00.00" ++#define MPT3SAS_MAJOR_VERSION 14 + #define MPT3SAS_MINOR_VERSION 100 + #define MPT3SAS_BUILD_VERSION 0 + #define MPT3SAS_RELEASE_VERSION 00 +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0006-scsi-megaraid_sas-Dynamic-Raid-Map-Changes-for-SAS3..patch b/SOURCES/centos-linux-3.10-0006-scsi-megaraid_sas-Dynamic-Raid-Map-Changes-for-SAS3..patch new file mode 100644 index 0000000..ed725a1 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0006-scsi-megaraid_sas-Dynamic-Raid-Map-Changes-for-SAS3..patch @@ -0,0 +1,1332 @@ +From 88b3ac2949cb535c5213324f33e9745d769f7dad Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:48 -0500 +Subject: [PATCH 06/11] scsi: megaraid_sas: Dynamic Raid Map Changes for SAS3.5 + Generic Megaraid Controllers + +SAS3.5 Generic Megaraid Controllers FW will support new dynamic RaidMap to have different +sizes for different number of supported VDs. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 7 + + drivers/scsi/megaraid/megaraid_sas_base.c | 60 ++++-- + drivers/scsi/megaraid/megaraid_sas_fp.c | 301 ++++++++++++++++++++++++---- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 225 ++++++++++++++++----- + drivers/scsi/megaraid/megaraid_sas_fusion.h | 240 ++++++++++++++++++---- + 5 files changed, 695 insertions(+), 138 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index 0b4d37b..d5205c4 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -1434,6 +1434,12 @@ enum FW_BOOT_CONTEXT { + #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT 14 + #define MR_MAX_MSIX_REG_ARRAY 16 + #define MR_RDPQ_MODE_OFFSET 0X00800000 ++ ++#define MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT 16 ++#define MR_MAX_RAID_MAP_SIZE_MASK 0x1FF ++#define MR_MIN_MAP_SIZE 0x10000 ++/* 64k */ ++ + #define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X01000000 + + /* +@@ -2152,6 +2158,7 @@ struct megasas_instance { + bool fw_sync_cache_support; + bool is_ventura; + bool msix_combined; ++ u16 max_raid_mapsize; + }; + struct MR_LD_VF_MAP { + u32 size; +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index 0722286..1d8cf03 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -4457,8 +4457,7 @@ megasas_ld_list_query(struct megasas_instance *instance, u8 query_type) + static void megasas_update_ext_vd_details(struct megasas_instance *instance) + { + struct fusion_context *fusion; +- u32 old_map_sz; +- u32 new_map_sz; ++ u32 ventura_map_sz = 0; + + fusion = instance->ctrl_context; + /* For MFI based controllers return dummy success */ +@@ -4488,21 +4487,38 @@ static void megasas_update_ext_vd_details(struct megasas_instance *instance) + instance->supportmax256vd ? "Extended VD(240 VD)firmware" : + "Legacy(64 VD) firmware"); + +- old_map_sz = sizeof(struct MR_FW_RAID_MAP) + +- (sizeof(struct MR_LD_SPAN_MAP) * +- (instance->fw_supported_vd_count - 1)); +- new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); +- fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP) + +- (sizeof(struct MR_LD_SPAN_MAP) * +- (instance->drv_supported_vd_count - 1)); +- +- fusion->max_map_sz = max(old_map_sz, new_map_sz); ++ if (instance->max_raid_mapsize) { ++ ventura_map_sz = instance->max_raid_mapsize * ++ MR_MIN_MAP_SIZE; /* 64k */ ++ fusion->current_map_sz = ventura_map_sz; ++ fusion->max_map_sz = ventura_map_sz; ++ } else { ++ fusion->old_map_sz = sizeof(struct MR_FW_RAID_MAP) + ++ (sizeof(struct MR_LD_SPAN_MAP) * ++ (instance->fw_supported_vd_count - 1)); ++ fusion->new_map_sz = sizeof(struct MR_FW_RAID_MAP_EXT); + ++ fusion->max_map_sz = ++ max(fusion->old_map_sz, fusion->new_map_sz); + +- if (instance->supportmax256vd) +- fusion->current_map_sz = new_map_sz; +- else +- fusion->current_map_sz = old_map_sz; ++ if (instance->supportmax256vd) ++ fusion->current_map_sz = fusion->new_map_sz; ++ else ++ fusion->current_map_sz = fusion->old_map_sz; ++ } ++ /* irrespective of FW raid maps, driver raid map is constant */ ++ fusion->drv_map_sz = sizeof(struct MR_DRV_RAID_MAP_ALL); ++ ++#if VD_EXT_DEBUG ++ dev_info(&instance->pdev->dev, "instance->max_raid_mapsize 0x%x\n ", ++ instance->max_raid_mapsize); ++ dev_info(&instance->pdev->dev, "new_map_sz = 0x%x, old_map_sz = 0x%x\n", ++ fusion->new_map_sz, fusion->old_map_sz); ++ dev_info(&instance->pdev->dev, "ventura_map_sz = 0x%x, current_map_sz = 0x%x\n", ++ ventura_map_sz, fusion->current_map_sz); ++ dev_info(&instance->pdev->dev, "fusion->drv_map_sz =0x%x, size of driver raid map 0x%lx\n", ++ fusion->drv_map_sz, sizeof(struct MR_DRV_RAID_MAP_ALL)); ++#endif + } + + /** +@@ -5043,7 +5059,7 @@ static int megasas_init_fw(struct megasas_instance *instance) + { + u32 max_sectors_1; + u32 max_sectors_2; +- u32 tmp_sectors, msix_enable, scratch_pad_2; ++ u32 tmp_sectors, msix_enable, scratch_pad_2, scratch_pad_3; + resource_size_t base_addr; + struct megasas_register_set __iomem *reg_set; + struct megasas_ctrl_info *ctrl_info = NULL; +@@ -5119,7 +5135,17 @@ static int megasas_init_fw(struct megasas_instance *instance) + goto fail_ready_state; + } + +- ++ if (instance->is_ventura) { ++ scratch_pad_3 = ++ readl(&instance->reg_set->outbound_scratch_pad_3); ++#if VD_EXT_DEBUG ++ dev_info(&instance->pdev->dev, "scratch_pad3 0x%x\n", ++ scratch_pad_3); ++#endif ++ instance->max_raid_mapsize = ((scratch_pad_3 >> ++ MR_MAX_RAID_MAP_SIZE_OFFSET_SHIFT) & ++ MR_MAX_RAID_MAP_SIZE_MASK); ++ } + + /* Check if MSI-X is supported while in ready state */ + msix_enable = (instance->instancet->read_fw_status_reg(reg_set) & +diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c +index 3644dbc..e45affe 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fp.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fp.c +@@ -179,18 +179,204 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance) + struct fusion_context *fusion = instance->ctrl_context; + struct MR_FW_RAID_MAP_ALL *fw_map_old = NULL; + struct MR_FW_RAID_MAP *pFwRaidMap = NULL; +- int i; ++ int i, j; + u16 ld_count; ++ struct MR_FW_RAID_MAP_DYNAMIC *fw_map_dyn; ++ struct MR_FW_RAID_MAP_EXT *fw_map_ext; ++ struct MR_RAID_MAP_DESC_TABLE *desc_table; + + + struct MR_DRV_RAID_MAP_ALL *drv_map = + fusion->ld_drv_map[(instance->map_id & 1)]; + struct MR_DRV_RAID_MAP *pDrvRaidMap = &drv_map->raidMap; ++ void *raid_map_data = NULL; ++ ++ memset(drv_map, 0, fusion->drv_map_sz); ++ memset(pDrvRaidMap->ldTgtIdToLd, ++ 0xff, (sizeof(u16) * MAX_LOGICAL_DRIVES_DYN)); ++ ++ if (instance->max_raid_mapsize) { ++ fw_map_dyn = fusion->ld_map[(instance->map_id & 1)]; ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "raidMapSize 0x%x fw_map_dyn->descTableOffset 0x%x\n", ++ le32_to_cpu(fw_map_dyn->raid_map_size), ++ le32_to_cpu(fw_map_dyn->desc_table_offset)); ++ dev_dbg(&instance->pdev->dev, "descTableSize 0x%x descTableNumElements 0x%x\n", ++ le32_to_cpu(fw_map_dyn->desc_table_size), ++ le32_to_cpu(fw_map_dyn->desc_table_num_elements)); ++ dev_dbg(&instance->pdev->dev, "drv map %p ldCount %d\n", ++ drv_map, fw_map_dyn->ld_count); ++#endif ++ desc_table = ++ (struct MR_RAID_MAP_DESC_TABLE *)((void *)fw_map_dyn + le32_to_cpu(fw_map_dyn->desc_table_offset)); ++ if (desc_table != fw_map_dyn->raid_map_desc_table) ++ dev_dbg(&instance->pdev->dev, "offsets of desc table are not matching desc %p original %p\n", ++ desc_table, fw_map_dyn->raid_map_desc_table); ++ ++ ld_count = (u16)le16_to_cpu(fw_map_dyn->ld_count); ++ pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count); ++ pDrvRaidMap->fpPdIoTimeoutSec = ++ fw_map_dyn->fp_pd_io_timeout_sec; ++ pDrvRaidMap->totalSize = sizeof(struct MR_DRV_RAID_MAP_ALL); ++ /* point to actual data starting point*/ ++ raid_map_data = (void *)fw_map_dyn + ++ le32_to_cpu(fw_map_dyn->desc_table_offset) + ++ le32_to_cpu(fw_map_dyn->desc_table_size); ++ ++ for (i = 0; i < le32_to_cpu(fw_map_dyn->desc_table_num_elements); ++i) { ++ ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "desc table %p\n", ++ desc_table); ++ dev_dbg(&instance->pdev->dev, "raidmap type %d, raidmapOffset 0x%x\n", ++ desc_table->raid_map_desc_type, ++ desc_table->raid_map_desc_offset); ++ dev_dbg(&instance->pdev->dev, "raid map number of elements 0%x, raidmapsize 0x%x\n", ++ desc_table->raid_map_desc_elements, ++ desc_table->raid_map_desc_buffer_size); ++#endif ++ switch (le32_to_cpu(desc_table->raid_map_desc_type)) { ++ case RAID_MAP_DESC_TYPE_DEVHDL_INFO: ++ fw_map_dyn->dev_hndl_info = ++ (struct MR_DEV_HANDLE_INFO *)(raid_map_data + le32_to_cpu(desc_table->raid_map_desc_offset)); ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "devHndlInfo address %p\n", ++ fw_map_dyn->dev_hndl_info); ++#endif ++ memcpy(pDrvRaidMap->devHndlInfo, ++ fw_map_dyn->dev_hndl_info, ++ sizeof(struct MR_DEV_HANDLE_INFO) * ++ le32_to_cpu(desc_table->raid_map_desc_elements)); ++ break; ++ case RAID_MAP_DESC_TYPE_TGTID_INFO: ++ fw_map_dyn->ld_tgt_id_to_ld = ++ (u16 *) (raid_map_data + ++ le32_to_cpu(desc_table->raid_map_desc_offset)); ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "ldTgtIdToLd address %p\n", ++ fw_map_dyn->ld_tgt_id_to_ld); ++#endif ++ for (j = 0; j < le32_to_cpu(desc_table->raid_map_desc_elements); j++) { ++ pDrvRaidMap->ldTgtIdToLd[j] = ++ fw_map_dyn->ld_tgt_id_to_ld[j]; ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, " %d drv ldTgtIdToLd %d\n", ++ j, pDrvRaidMap->ldTgtIdToLd[j]); ++#endif ++ } ++ break; ++ case RAID_MAP_DESC_TYPE_ARRAY_INFO: ++ fw_map_dyn->ar_map_info = ++ (struct MR_ARRAY_INFO *) ++ (raid_map_data + le32_to_cpu(desc_table->raid_map_desc_offset)); ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "arMapInfo address %p\n", ++ fw_map_dyn->ar_map_info); ++#endif ++ ++ memcpy(pDrvRaidMap->arMapInfo, ++ fw_map_dyn->ar_map_info, ++ sizeof(struct MR_ARRAY_INFO) * le32_to_cpu(desc_table->raid_map_desc_elements)); ++ break; ++ case RAID_MAP_DESC_TYPE_SPAN_INFO: ++ fw_map_dyn->ld_span_map = ++ (struct MR_LD_SPAN_MAP *) ++ (raid_map_data + le32_to_cpu(desc_table->raid_map_desc_offset)); ++ memcpy(pDrvRaidMap->ldSpanMap, ++ fw_map_dyn->ld_span_map, ++ sizeof(struct MR_LD_SPAN_MAP) * le32_to_cpu(desc_table->raid_map_desc_elements)); ++#if VD_EXT_DEBUG ++ dev_dbg(&instance->pdev->dev, "ldSpanMap address %p\n", ++ fw_map_dyn->ld_span_map); ++ dev_dbg(&instance->pdev->dev, "MR_LD_SPAN_MAP size 0x%lx\n", ++ sizeof(struct MR_LD_SPAN_MAP)); ++ for (j = 0; j < ld_count; j++) { ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) : fw_map_dyn->ldSpanMap[%d].ldRaid.targetId 0x%x\n", ++ j, j, fw_map_dyn->ld_span_map[j].ldRaid.targetId); ++ dev_dbg(&instance->pdev->dev, "fw_map_dyn->ldSpanMap[%d].ldRaid.seqNum 0x%x\n", ++ j, fw_map_dyn->ld_span_map[j].ldRaid.seqNum); ++ dev_dbg(&instance->pdev->dev, "fw_map_dyn->ld_span_map[%d].ldRaid.rowSize 0x%x\n", ++ j, (u32)fw_map_dyn->ld_span_map[j].ldRaid.rowSize); ++ ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) :pDrvRaidMap->ldSpanMap[%d].ldRaid.targetId 0x%x\n", ++ j, j, pDrvRaidMap->ldSpanMap[j].ldRaid.targetId); ++ dev_dbg(&instance->pdev->dev, "DrvRaidMap->ldSpanMap[%d].ldRaid.seqNum 0x%x\n", ++ j, pDrvRaidMap->ldSpanMap[j].ldRaid.seqNum); ++ dev_dbg(&instance->pdev->dev, "pDrvRaidMap->ldSpanMap[%d].ldRaid.rowSize 0x%x\n", ++ j, (u32)pDrvRaidMap->ldSpanMap[j].ldRaid.rowSize); ++ ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) : drv raid map all %p\n", ++ instance->unique_id, drv_map); ++ dev_dbg(&instance->pdev->dev, "raid map %p LD RAID MAP %p/%p\n", ++ pDrvRaidMap, ++ &fw_map_dyn->ld_span_map[j].ldRaid, ++ &pDrvRaidMap->ldSpanMap[j].ldRaid); ++ } ++#endif ++ break; ++ default: ++ dev_dbg(&instance->pdev->dev, "wrong number of desctableElements %d\n", ++ fw_map_dyn->desc_table_num_elements); ++ } ++ ++desc_table; ++ } ++ ++ } else if (instance->supportmax256vd) { ++ fw_map_ext = ++ (struct MR_FW_RAID_MAP_EXT *) fusion->ld_map[(instance->map_id & 1)]; ++ ld_count = (u16)le16_to_cpu(fw_map_ext->ldCount); ++ if (ld_count > MAX_LOGICAL_DRIVES_EXT) { ++ dev_dbg(&instance->pdev->dev, "megaraid_sas: LD count exposed in RAID map in not valid\n"); ++ return; ++ } ++#if VD_EXT_DEBUG ++ for (i = 0; i < ld_count; i++) { ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) :Index 0x%x\n", ++ instance->unique_id, i); ++ dev_dbg(&instance->pdev->dev, "Target Id 0x%x\n", ++ fw_map_ext->ldSpanMap[i].ldRaid.targetId); ++ dev_dbg(&instance->pdev->dev, "Seq Num 0x%x Size 0/%llx\n", ++ fw_map_ext->ldSpanMap[i].ldRaid.seqNum, ++ fw_map_ext->ldSpanMap[i].ldRaid.size); ++ } ++#endif ++ ++ pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count); ++ pDrvRaidMap->fpPdIoTimeoutSec = fw_map_ext->fpPdIoTimeoutSec; ++ for (i = 0; i < (MAX_LOGICAL_DRIVES_EXT); i++) ++ pDrvRaidMap->ldTgtIdToLd[i] = ++ (u16)fw_map_ext->ldTgtIdToLd[i]; ++ memcpy(pDrvRaidMap->ldSpanMap, fw_map_ext->ldSpanMap, ++ sizeof(struct MR_LD_SPAN_MAP) * ld_count); ++#if VD_EXT_DEBUG ++ for (i = 0; i < ld_count; i++) { ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) : fw_map_ext->ldSpanMap[%d].ldRaid.targetId 0x%x\n", ++ i, i, fw_map_ext->ldSpanMap[i].ldRaid.targetId); ++ dev_dbg(&instance->pdev->dev, "fw_map_ext->ldSpanMap[%d].ldRaid.seqNum 0x%x\n", ++ i, fw_map_ext->ldSpanMap[i].ldRaid.seqNum); ++ dev_dbg(&instance->pdev->dev, "fw_map_ext->ldSpanMap[%d].ldRaid.rowSize 0x%x\n", ++ i, (u32)fw_map_ext->ldSpanMap[i].ldRaid.rowSize); ++ ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) : pDrvRaidMap->ldSpanMap[%d].ldRaid.targetId 0x%x\n", ++ i, i, pDrvRaidMap->ldSpanMap[i].ldRaid.targetId); ++ dev_dbg(&instance->pdev->dev, "pDrvRaidMap->ldSpanMap[%d].ldRaid.seqNum 0x%x\n", ++ i, pDrvRaidMap->ldSpanMap[i].ldRaid.seqNum); ++ dev_dbg(&instance->pdev->dev, "pDrvRaidMap->ldSpanMap[%d].ldRaid.rowSize 0x%x\n", ++ i, (u32)pDrvRaidMap->ldSpanMap[i].ldRaid.rowSize); ++ ++ dev_dbg(&instance->pdev->dev, "megaraid_sas(%d) : drv raid map all %p\n", ++ instance->unique_id, drv_map); ++ dev_dbg(&instance->pdev->dev, "raid map %p LD RAID MAP %p %p\n", ++ pDrvRaidMap, &fw_map_ext->ldSpanMap[i].ldRaid, ++ &pDrvRaidMap->ldSpanMap[i].ldRaid); ++ } ++#endif ++ memcpy(pDrvRaidMap->arMapInfo, fw_map_ext->arMapInfo, ++ sizeof(struct MR_ARRAY_INFO) * MAX_API_ARRAYS_EXT); ++ memcpy(pDrvRaidMap->devHndlInfo, fw_map_ext->devHndlInfo, ++ sizeof(struct MR_DEV_HANDLE_INFO) * ++ MAX_RAIDMAP_PHYSICAL_DEVICES); + +- if (instance->supportmax256vd) { +- memcpy(fusion->ld_drv_map[instance->map_id & 1], +- fusion->ld_map[instance->map_id & 1], +- fusion->current_map_sz); + /* New Raid map will not set totalSize, so keep expected value + * for legacy code in ValidateMapInfo + */ +@@ -213,16 +399,12 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance) + } + #endif + +- memset(drv_map, 0, fusion->drv_map_sz); + pDrvRaidMap->totalSize = pFwRaidMap->totalSize; + pDrvRaidMap->ldCount = (__le16)cpu_to_le16(ld_count); + pDrvRaidMap->fpPdIoTimeoutSec = pFwRaidMap->fpPdIoTimeoutSec; + for (i = 0; i < MAX_RAIDMAP_LOGICAL_DRIVES + MAX_RAIDMAP_VIEWS; i++) + pDrvRaidMap->ldTgtIdToLd[i] = + (u8)pFwRaidMap->ldTgtIdToLd[i]; +- for (i = (MAX_RAIDMAP_LOGICAL_DRIVES + MAX_RAIDMAP_VIEWS); +- i < MAX_LOGICAL_DRIVES_EXT; i++) +- pDrvRaidMap->ldTgtIdToLd[i] = 0xff; + for (i = 0; i < ld_count; i++) { + pDrvRaidMap->ldSpanMap[i] = pFwRaidMap->ldSpanMap[i]; + #if VD_EXT_DEBUG +@@ -279,7 +461,9 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance) + lbInfo = fusion->load_balance_info; + ldSpanInfo = fusion->log_to_span; + +- if (instance->supportmax256vd) ++ if (instance->max_raid_mapsize) ++ expected_size = sizeof(struct MR_DRV_RAID_MAP_ALL); ++ else if (instance->supportmax256vd) + expected_size = sizeof(struct MR_FW_RAID_MAP_EXT); + else + expected_size = +@@ -287,8 +471,10 @@ u8 MR_ValidateMapInfo(struct megasas_instance *instance) + (sizeof(struct MR_LD_SPAN_MAP) * le16_to_cpu(pDrvRaidMap->ldCount))); + + if (le32_to_cpu(pDrvRaidMap->totalSize) != expected_size) { +- dev_err(&instance->pdev->dev, "map info structure size 0x%x is not matching with ld count\n", +- (unsigned int) expected_size); ++ dev_dbg(&instance->pdev->dev, "megasas: map info structure size 0x%x", ++ le32_to_cpu(pDrvRaidMap->totalSize)); ++ dev_dbg(&instance->pdev->dev, "is not matching expected size 0x%x\n", ++ (unsigned int) expected_size); + dev_err(&instance->pdev->dev, "megasas: span map %x, pDrvRaidMap->totalSize : %x\n", + (unsigned int)sizeof(struct MR_LD_SPAN_MAP), + le32_to_cpu(pDrvRaidMap->totalSize)); +@@ -787,7 +973,7 @@ static u8 mr_spanset_get_phy_params(struct megasas_instance *instance, u32 ld, + ((fusion->adapter_type == THUNDERBOLT_SERIES) || + ((fusion->adapter_type == INVADER_SERIES) && + (raid->regTypeReqOnRead != REGION_TYPE_UNUSED)))) +- pRAID_Context->regLockFlags = REGION_TYPE_EXCLUSIVE; ++ pRAID_Context->reg_lock_flags = REGION_TYPE_EXCLUSIVE; + else if (raid->level == 1) { + pd = MR_ArPdGet(arRef, physArm + 1, map); + if (pd != MR_PD_INVALID) +@@ -796,9 +982,16 @@ static u8 mr_spanset_get_phy_params(struct megasas_instance *instance, u32 ld, + } + + *pdBlock += stripRef + le64_to_cpu(MR_LdSpanPtrGet(ld, span, map)->startBlk); +- pRAID_Context->spanArm = (span << RAID_CTX_SPANARM_SPAN_SHIFT) | +- physArm; +- io_info->span_arm = pRAID_Context->spanArm; ++ if (instance->is_ventura) { ++ ((struct RAID_CONTEXT_G35 *) pRAID_Context)->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ io_info->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ } else { ++ pRAID_Context->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ io_info->span_arm = pRAID_Context->span_arm; ++ } + return retval; + } + +@@ -890,7 +1083,7 @@ u8 MR_GetPhyParams(struct megasas_instance *instance, u32 ld, u64 stripRow, + ((fusion->adapter_type == THUNDERBOLT_SERIES) || + ((fusion->adapter_type == INVADER_SERIES) && + (raid->regTypeReqOnRead != REGION_TYPE_UNUSED)))) +- pRAID_Context->regLockFlags = REGION_TYPE_EXCLUSIVE; ++ pRAID_Context->reg_lock_flags = REGION_TYPE_EXCLUSIVE; + else if (raid->level == 1) { + /* Get alternate Pd. */ + pd = MR_ArPdGet(arRef, physArm + 1, map); +@@ -901,9 +1094,16 @@ u8 MR_GetPhyParams(struct megasas_instance *instance, u32 ld, u64 stripRow, + } + + *pdBlock += stripRef + le64_to_cpu(MR_LdSpanPtrGet(ld, span, map)->startBlk); +- pRAID_Context->spanArm = (span << RAID_CTX_SPANARM_SPAN_SHIFT) | +- physArm; +- io_info->span_arm = pRAID_Context->spanArm; ++ if (instance->is_ventura) { ++ ((struct RAID_CONTEXT_G35 *) pRAID_Context)->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ io_info->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ } else { ++ pRAID_Context->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | physArm; ++ io_info->span_arm = pRAID_Context->span_arm; ++ } + return retval; + } + +@@ -1107,20 +1307,20 @@ MR_BuildRaidContext(struct megasas_instance *instance, + regSize += stripSize; + } + +- pRAID_Context->timeoutValue = ++ pRAID_Context->timeout_value = + cpu_to_le16(raid->fpIoTimeoutForLd ? + raid->fpIoTimeoutForLd : + map->raidMap.fpPdIoTimeoutSec); + if (fusion->adapter_type == INVADER_SERIES) +- pRAID_Context->regLockFlags = (isRead) ? ++ pRAID_Context->reg_lock_flags = (isRead) ? + raid->regTypeReqOnRead : raid->regTypeReqOnWrite; +- else +- pRAID_Context->regLockFlags = (isRead) ? ++ else if (!instance->is_ventura) ++ pRAID_Context->reg_lock_flags = (isRead) ? + REGION_TYPE_SHARED_READ : raid->regTypeReqOnWrite; +- pRAID_Context->VirtualDiskTgtId = raid->targetId; +- pRAID_Context->regLockRowLBA = cpu_to_le64(regStart); +- pRAID_Context->regLockLength = cpu_to_le32(regSize); +- pRAID_Context->configSeqNum = raid->seqNum; ++ pRAID_Context->virtual_disk_tgt_id = raid->targetId; ++ pRAID_Context->reg_lock_row_lba = cpu_to_le64(regStart); ++ pRAID_Context->reg_lock_length = cpu_to_le32(regSize); ++ pRAID_Context->config_seq_num = raid->seqNum; + /* save pointer to raid->LUN array */ + *raidLUN = raid->LUN; + +@@ -1138,6 +1338,13 @@ MR_BuildRaidContext(struct megasas_instance *instance, + /* If IO on an invalid Pd, then FP is not possible.*/ + if (io_info->devHandle == cpu_to_le16(MR_PD_INVALID)) + io_info->fpOkForIo = FALSE; ++ /* if FP possible, set the SLUD bit in ++ * regLockFlags for ventura ++ */ ++ else if ((instance->is_ventura) && (!isRead) && ++ (raid->writeMode == MR_RL_WRITE_BACK_MODE) && ++ (raid->capability.fp_cache_bypass_capable)) ++ ((struct RAID_CONTEXT_G35 *) pRAID_Context)->routing_flags.bits.sld = 1; + /* set raid 1/10 fast path write capable bit in io_info */ + if (io_info->fpOkForIo && + (io_info->r1_alt_dev_handle != MR_PD_INVALID) && +@@ -1317,6 +1524,7 @@ u8 megasas_get_best_arm_pd(struct megasas_instance *instance, + struct fusion_context *fusion; + struct MR_LD_RAID *raid; + struct MR_DRV_RAID_MAP_ALL *drv_map; ++ u16 pd1_dev_handle; + u16 pend0, pend1, ld; + u64 diff0, diff1; + u8 bestArm, pd0, pd1, span, arm; +@@ -1342,23 +1550,36 @@ u8 megasas_get_best_arm_pd(struct megasas_instance *instance, + pd1 = MR_ArPdGet(arRef, (arm + 1) >= span_row_size ? + (arm + 1 - span_row_size) : arm + 1, drv_map); + +- /* get the pending cmds for the data and mirror arms */ +- pend0 = atomic_read(&lbInfo->scsi_pending_cmds[pd0]); +- pend1 = atomic_read(&lbInfo->scsi_pending_cmds[pd1]); ++ /* Get PD1 Dev Handle */ ++ ++ pd1_dev_handle = MR_PdDevHandleGet(pd1, drv_map); ++ ++ if (pd1_dev_handle == MR_PD_INVALID) { ++ bestArm = arm; ++ } else { ++ /* get the pending cmds for the data and mirror arms */ ++ pend0 = atomic_read(&lbInfo->scsi_pending_cmds[pd0]); ++ pend1 = atomic_read(&lbInfo->scsi_pending_cmds[pd1]); + +- /* Determine the disk whose head is nearer to the req. block */ +- diff0 = ABS_DIFF(block, lbInfo->last_accessed_block[pd0]); +- diff1 = ABS_DIFF(block, lbInfo->last_accessed_block[pd1]); +- bestArm = (diff0 <= diff1 ? arm : arm ^ 1); ++ /* Determine the disk whose head is nearer to the req. block */ ++ diff0 = ABS_DIFF(block, lbInfo->last_accessed_block[pd0]); ++ diff1 = ABS_DIFF(block, lbInfo->last_accessed_block[pd1]); ++ bestArm = (diff0 <= diff1 ? arm : arm ^ 1); + +- if ((bestArm == arm && pend0 > pend1 + lb_pending_cmds) || ++ /* Make balance count from 16 to 4 to ++ * keep driver in sync with Firmware ++ */ ++ if ((bestArm == arm && pend0 > pend1 + lb_pending_cmds) || + (bestArm != arm && pend1 > pend0 + lb_pending_cmds)) +- bestArm ^= 1; ++ bestArm ^= 1; ++ ++ /* Update the last accessed block on the correct pd */ ++ io_info->span_arm = ++ (span << RAID_CTX_SPANARM_SPAN_SHIFT) | bestArm; ++ io_info->pd_after_lb = (bestArm == arm) ? pd0 : pd1; ++ } + +- /* Update the last accessed block on the correct pd */ +- io_info->pd_after_lb = (bestArm == arm) ? pd0 : pd1; + lbInfo->last_accessed_block[io_info->pd_after_lb] = block + count - 1; +- io_info->span_arm = (span << RAID_CTX_SPANARM_SPAN_SHIFT) | bestArm; + #if SPAN_DEBUG + if (arm != bestArm) + dev_dbg(&instance->pdev->dev, "LSI Debug R1 Load balance " +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index b146cd1..178f166 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -1829,7 +1829,7 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + struct megasas_cmd_fusion *cmd) + { + u8 fp_possible; +- u32 start_lba_lo, start_lba_hi, device_id, datalength = 0; ++ u32 start_lba_lo, start_lba_hi, device_id, datalength = 0, ld; + struct MPI2_RAID_SCSI_IO_REQUEST *io_request; + union MEGASAS_REQUEST_DESCRIPTOR_UNION *req_desc; + struct IO_REQUEST_INFO io_info; +@@ -1837,16 +1837,18 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + struct MR_DRV_RAID_MAP_ALL *local_map_ptr; + u8 *raidLUN; + unsigned long spinlock_flags; ++ union RAID_CONTEXT_UNION *praid_context; ++ struct MR_LD_RAID *raid; + + device_id = MEGASAS_DEV_INDEX(scp); + + fusion = instance->ctrl_context; + + io_request = cmd->io_request; +- io_request->RaidContext.raid_context.VirtualDiskTgtId = ++ io_request->RaidContext.raid_context.virtual_disk_tgt_id = + cpu_to_le16(device_id); + io_request->RaidContext.raid_context.status = 0; +- io_request->RaidContext.raid_context.exStatus = 0; ++ io_request->RaidContext.raid_context.ex_status = 0; + + req_desc = (union MEGASAS_REQUEST_DESCRIPTOR_UNION *)cmd->request_desc; + +@@ -1915,10 +1917,12 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + io_info.isRead = 1; + + local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; ++ ld = MR_TargetIdToLdGet(device_id, local_map_ptr); ++ raid = MR_LdRaidGet(ld, local_map_ptr); + + if ((MR_TargetIdToLdGet(device_id, local_map_ptr) >= + instance->fw_supported_vd_count) || (!fusion->fast_path_io)) { +- io_request->RaidContext.raid_context.regLockFlags = 0; ++ io_request->RaidContext.raid_context.reg_lock_flags = 0; + fp_possible = 0; + } else { + if (MR_BuildRaidContext(instance, &io_info, +@@ -1945,6 +1949,8 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + fp_possible = false; + } + ++ praid_context = &io_request->RaidContext; ++ + if (fp_possible) { + megasas_set_pd_lba(io_request, scp->cmd_len, &io_info, scp, + local_map_ptr, start_lba_lo); +@@ -1953,18 +1959,25 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + (MPI2_REQ_DESCRIPT_FLAGS_FP_IO + << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); + if (fusion->adapter_type == INVADER_SERIES) { +- if (io_request->RaidContext.raid_context.regLockFlags == ++ if (io_request->RaidContext.raid_context.reg_lock_flags == + REGION_TYPE_UNUSED) + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); +- io_request->RaidContext.raid_context.Type ++ io_request->RaidContext.raid_context.type + = MPI2_TYPE_CUDA; + io_request->RaidContext.raid_context.nseg = 0x1; + io_request->IoFlags |= cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); +- io_request->RaidContext.raid_context.regLockFlags |= ++ io_request->RaidContext.raid_context.reg_lock_flags |= + (MR_RL_FLAGS_GRANT_DESTINATION_CUDA | + MR_RL_FLAGS_SEQ_NUM_ENABLE); ++ } else if (instance->is_ventura) { ++ io_request->RaidContext.raid_context_g35.type ++ = MPI2_TYPE_CUDA; ++ io_request->RaidContext.raid_context_g35.nseg = 0x1; ++ io_request->RaidContext.raid_context_g35.routing_flags.bits.sqn = 1; ++ io_request->IoFlags |= ++ cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); + } + if ((fusion->load_balance_info[device_id].loadBalanceFlag) && + (io_info.isRead)) { +@@ -1974,6 +1987,13 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + &io_info); + scp->SCp.Status |= MEGASAS_LOAD_BALANCE_FLAG; + cmd->pd_r1_lb = io_info.pd_after_lb; ++ if (instance->is_ventura) ++ io_request->RaidContext.raid_context_g35.span_arm ++ = io_info.span_arm; ++ else ++ io_request->RaidContext.raid_context.span_arm ++ = io_info.span_arm; ++ + } else + scp->SCp.Status &= ~MEGASAS_LOAD_BALANCE_FLAG; + +@@ -1992,28 +2012,98 @@ megasas_build_ldio_fusion(struct megasas_instance *instance, + io_request->DevHandle = io_info.devHandle; + /* populate the LUN field */ + memcpy(io_request->LUN, raidLUN, 8); ++ if (instance->is_ventura) { ++ if (io_info.isRead) { ++ if ((raid->cpuAffinity.pdRead.cpu0) && ++ (raid->cpuAffinity.pdRead.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.pdRead.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ } else { ++ if ((raid->cpuAffinity.pdWrite.cpu0) ++ && (raid->cpuAffinity.pdWrite.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.pdWrite.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ if (praid_context->raid_context_g35.routing_flags.bits.sld) { ++ praid_context->raid_context_g35.raid_flags ++ = (MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS ++ << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT); ++ } ++ } ++ } + } else { +- io_request->RaidContext.raid_context.timeoutValue = ++ io_request->RaidContext.raid_context.timeout_value = + cpu_to_le16(local_map_ptr->raidMap.fpPdIoTimeoutSec); + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_LD_IO + << MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); + if (fusion->adapter_type == INVADER_SERIES) { + if (io_info.do_fp_rlbypass || +- (io_request->RaidContext.raid_context.regLockFlags ++ (io_request->RaidContext.raid_context.reg_lock_flags + == REGION_TYPE_UNUSED)) + cmd->request_desc->SCSIIO.RequestFlags = + (MEGASAS_REQ_DESCRIPT_FLAGS_NO_LOCK << + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); +- io_request->RaidContext.raid_context.Type ++ io_request->RaidContext.raid_context.type + = MPI2_TYPE_CUDA; +- io_request->RaidContext.raid_context.regLockFlags |= ++ io_request->RaidContext.raid_context.reg_lock_flags |= + (MR_RL_FLAGS_GRANT_DESTINATION_CPU0 | + MR_RL_FLAGS_SEQ_NUM_ENABLE); + io_request->RaidContext.raid_context.nseg = 0x1; ++ } else if (instance->is_ventura) { ++ io_request->RaidContext.raid_context_g35.type ++ = MPI2_TYPE_CUDA; ++ io_request->RaidContext.raid_context_g35.routing_flags.bits.sqn = 1; ++ io_request->RaidContext.raid_context_g35.nseg = 0x1; + } + io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST; + io_request->DevHandle = cpu_to_le16(device_id); ++ ++ if (instance->is_ventura) { ++ if (io_info.isRead) { ++ if ((raid->cpuAffinity.ldRead.cpu0) ++ && (raid->cpuAffinity.ldRead.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.ldRead.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ } else { ++ if ((raid->cpuAffinity.ldWrite.cpu0) && ++ (raid->cpuAffinity.ldWrite.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.ldWrite.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ ++ if (io_request->RaidContext.raid_context_g35.stream_detected ++ && (raid->level == 5) && ++ (raid->writeMode == MR_RL_WRITE_THROUGH_MODE)) { ++ if (praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ == MR_RAID_CTX_CPUSEL_FCFS) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ } ++ } ++ } + } /* Not FP */ + } + +@@ -2048,9 +2138,9 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, + /* get RAID_Context pointer */ + pRAID_Context = &io_request->RaidContext.raid_context; + /* Check with FW team */ +- pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); +- pRAID_Context->regLockRowLBA = 0; +- pRAID_Context->regLockLength = 0; ++ pRAID_Context->virtual_disk_tgt_id = cpu_to_le16(device_id); ++ pRAID_Context->reg_lock_row_lba = 0; ++ pRAID_Context->reg_lock_length = 0; + + if (fusion->fast_path_io && ( + device_id < instance->fw_supported_vd_count)) { +@@ -2069,7 +2159,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, + io_request->Function = MEGASAS_MPI2_FUNCTION_LD_IO_REQUEST; + io_request->DevHandle = cpu_to_le16(device_id); + io_request->LUN[1] = scmd->device->lun; +- pRAID_Context->timeoutValue = ++ pRAID_Context->timeout_value = + cpu_to_le16 (scmd->request->timeout / HZ); + cmd->request_desc->SCSIIO.RequestFlags = + (MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO << +@@ -2077,9 +2167,11 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance, + } else { + + /* set RAID context values */ +- pRAID_Context->configSeqNum = raid->seqNum; +- pRAID_Context->regLockFlags = REGION_TYPE_SHARED_READ; +- pRAID_Context->timeoutValue = cpu_to_le16(raid->fpIoTimeoutForLd); ++ pRAID_Context->config_seq_num = raid->seqNum; ++ if (!instance->is_ventura) ++ pRAID_Context->reg_lock_flags = REGION_TYPE_SHARED_READ; ++ pRAID_Context->timeout_value = ++ cpu_to_le16(raid->fpIoTimeoutForLd); + + /* get the DevHandle for the PD (since this is + fpNonRWCapable, this is a single disk RAID0) */ +@@ -2134,12 +2226,12 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + io_request = cmd->io_request; + /* get RAID_Context pointer */ + pRAID_Context = &io_request->RaidContext.raid_context; +- pRAID_Context->regLockFlags = 0; +- pRAID_Context->regLockRowLBA = 0; +- pRAID_Context->regLockLength = 0; ++ pRAID_Context->reg_lock_flags = 0; ++ pRAID_Context->reg_lock_row_lba = 0; ++ pRAID_Context->reg_lock_length = 0; + io_request->DataLength = cpu_to_le32(scsi_bufflen(scmd)); + io_request->LUN[1] = scmd->device->lun; +- pRAID_Context->RAIDFlags = MR_RAID_FLAGS_IO_SUB_TYPE_SYSTEM_PD ++ pRAID_Context->raid_flags = MR_RAID_FLAGS_IO_SUB_TYPE_SYSTEM_PD + << MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT; + + /* If FW supports PD sequence number */ +@@ -2148,24 +2240,27 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + /* TgtId must be incremented by 255 as jbod seq number is index + * below raid map + */ +- pRAID_Context->VirtualDiskTgtId = ++ pRAID_Context->virtual_disk_tgt_id = + cpu_to_le16(device_id + (MAX_PHYSICAL_DEVICES - 1)); +- pRAID_Context->configSeqNum = pd_sync->seq[pd_index].seqNum; ++ pRAID_Context->config_seq_num = pd_sync->seq[pd_index].seqNum; + io_request->DevHandle = pd_sync->seq[pd_index].devHandle; +- pRAID_Context->regLockFlags |= ++ if (instance->is_ventura) ++ io_request->RaidContext.raid_context_g35.routing_flags.bits.sqn = 1; ++ else ++ pRAID_Context->reg_lock_flags |= + (MR_RL_FLAGS_SEQ_NUM_ENABLE|MR_RL_FLAGS_GRANT_DESTINATION_CUDA); +- pRAID_Context->Type = MPI2_TYPE_CUDA; ++ pRAID_Context->type = MPI2_TYPE_CUDA; + pRAID_Context->nseg = 0x1; + } else if (fusion->fast_path_io) { +- pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); +- pRAID_Context->configSeqNum = 0; ++ pRAID_Context->virtual_disk_tgt_id = cpu_to_le16(device_id); ++ pRAID_Context->config_seq_num = 0; + local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; + io_request->DevHandle = + local_map_ptr->raidMap.devHndlInfo[device_id].curDevHdl; + } else { + /* Want to send all IO via FW path */ +- pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); +- pRAID_Context->configSeqNum = 0; ++ pRAID_Context->virtual_disk_tgt_id = cpu_to_le16(device_id); ++ pRAID_Context->config_seq_num = 0; + io_request->DevHandle = cpu_to_le16(0xFFFF); + } + +@@ -2181,14 +2276,14 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + cmd->request_desc->SCSIIO.RequestFlags = + (MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO << + MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); +- pRAID_Context->timeoutValue = cpu_to_le16(os_timeout_value); +- pRAID_Context->VirtualDiskTgtId = cpu_to_le16(device_id); ++ pRAID_Context->timeout_value = cpu_to_le16(os_timeout_value); ++ pRAID_Context->virtual_disk_tgt_id = cpu_to_le16(device_id); + } else { + /* system pd Fast Path */ + io_request->Function = MPI2_FUNCTION_SCSI_IO_REQUEST; + timeout_limit = (scmd->device->type == TYPE_DISK) ? + 255 : 0xFFFF; +- pRAID_Context->timeoutValue = ++ pRAID_Context->timeout_value = + cpu_to_le16((os_timeout_value > timeout_limit) ? + timeout_limit : os_timeout_value); + if (fusion->adapter_type == INVADER_SERIES) +@@ -2227,8 +2322,8 @@ megasas_build_io_fusion(struct megasas_instance *instance, + io_request->Control = 0; + io_request->EEDPBlockSize = 0; + io_request->ChainOffset = 0; +- io_request->RaidContext.raid_context.RAIDFlags = 0; +- io_request->RaidContext.raid_context.Type = 0; ++ io_request->RaidContext.raid_context.raid_flags = 0; ++ io_request->RaidContext.raid_context.type = 0; + io_request->RaidContext.raid_context.nseg = 0; + + memcpy(io_request->CDB.CDB32, scp->cmnd, scp->cmd_len); +@@ -2273,11 +2368,16 @@ megasas_build_io_fusion(struct megasas_instance *instance, + return 1; + } + +- /* numSGE store lower 8 bit of sge_count. +- * numSGEExt store higher 8 bit of sge_count +- */ +- io_request->RaidContext.raid_context.numSGE = sge_count; +- io_request->RaidContext.raid_context.numSGEExt = (u8)(sge_count >> 8); ++ if (instance->is_ventura) ++ io_request->RaidContext.raid_context_g35.num_sge = sge_count; ++ else { ++ /* numSGE store lower 8 bit of sge_count. ++ * numSGEExt store higher 8 bit of sge_count ++ */ ++ io_request->RaidContext.raid_context.num_sge = sge_count; ++ io_request->RaidContext.raid_context.num_sge_ext = ++ (u8)(sge_count >> 8); ++ } + + io_request->SGLFlags = cpu_to_le16(MPI2_SGE_FLAGS_64_BIT_ADDRESSING); + +@@ -2326,6 +2426,10 @@ void megasas_fpio_to_ldio(struct megasas_instance *instance, + struct megasas_cmd_fusion *cmd, struct scsi_cmnd *scmd) + { + struct fusion_context *fusion; ++ union RAID_CONTEXT_UNION *praid_context; ++ struct MR_LD_RAID *raid; ++ struct MR_DRV_RAID_MAP_ALL *local_map_ptr; ++ u32 device_id, ld; + + fusion = instance->ctrl_context; + cmd->request_desc->SCSIIO.RequestFlags = +@@ -2349,6 +2453,35 @@ void megasas_fpio_to_ldio(struct megasas_instance *instance, + cmd->io_request->Control = 0; + cmd->io_request->EEDPBlockSize = 0; + cmd->is_raid_1_fp_write = 0; ++ ++ device_id = MEGASAS_DEV_INDEX(cmd->scmd); ++ local_map_ptr = fusion->ld_drv_map[(instance->map_id & 1)]; ++ ld = MR_TargetIdToLdGet(device_id, local_map_ptr); ++ raid = MR_LdRaidGet(ld, local_map_ptr); ++ praid_context = &cmd->io_request->RaidContext; ++ if (cmd->scmd->sc_data_direction == PCI_DMA_FROMDEVICE) { ++ if ((raid->cpuAffinity.ldRead.cpu0) ++ && (raid->cpuAffinity.ldRead.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.ldRead.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ } else { ++ if ((raid->cpuAffinity.ldWrite.cpu0) ++ && (raid->cpuAffinity.ldWrite.cpu1)) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_FCFS; ++ else if (raid->cpuAffinity.ldWrite.cpu1) ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_1; ++ else ++ praid_context->raid_context_g35.routing_flags.bits.cpu_sel ++ = MR_RAID_CTX_CPUSEL_0; ++ } + } + + /* megasas_prepate_secondRaid1_IO +@@ -2585,7 +2718,7 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + + scmd_local = cmd_fusion->scmd; + status = scsi_io_req->RaidContext.raid_context.status; +- extStatus = scsi_io_req->RaidContext.raid_context.exStatus; ++ extStatus = scsi_io_req->RaidContext.raid_context.ex_status; + sense = cmd_fusion->sense; + data_length = scsi_io_req->DataLength; + +@@ -2653,13 +2786,13 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + status = + r1_cmd->io_request->RaidContext.raid_context.status; + extStatus = +- r1_cmd->io_request->RaidContext.raid_context.exStatus; ++ r1_cmd->io_request->RaidContext.raid_context.ex_status; + data_length = + r1_cmd->io_request->DataLength; + sense = r1_cmd->sense; + } + r1_cmd->io_request->RaidContext.raid_context.status = 0; +- r1_cmd->io_request->RaidContext.raid_context.exStatus = 0; ++ r1_cmd->io_request->RaidContext.raid_context.ex_status = 0; + cmd_fusion->is_raid_1_fp_write = 0; + r1_cmd->is_raid_1_fp_write = 0; + r1_cmd->cmd_completed = false; +@@ -2669,10 +2802,8 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + if (!cmd_fusion->is_raid_1_fp_write) { + map_cmd_status(fusion, scmd_local, status, + extStatus, data_length, sense); +- scsi_io_req->RaidContext.raid_context.status +- = 0; +- scsi_io_req->RaidContext.raid_context.exStatus +- = 0; ++ scsi_io_req->RaidContext.raid_context.status = 0; ++ scsi_io_req->RaidContext.raid_context.ex_status = 0; + megasas_return_cmd_fusion(instance, cmd_fusion); + scsi_dma_unmap(scmd_local); + scmd_local->scsi_done(scmd_local); +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index 7a3c3d1..2de12b4 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -59,6 +59,8 @@ + #define MR_RL_FLAGS_GRANT_DESTINATION_CPU1 0x10 + #define MR_RL_FLAGS_GRANT_DESTINATION_CUDA 0x80 + #define MR_RL_FLAGS_SEQ_NUM_ENABLE 0x8 ++#define MR_RL_WRITE_THROUGH_MODE 0x00 ++#define MR_RL_WRITE_BACK_MODE 0x01 + + /* T10 PI defines */ + #define MR_PROT_INFO_TYPE_CONTROLLER 0x8 +@@ -81,6 +83,11 @@ + enum MR_RAID_FLAGS_IO_SUB_TYPE { + MR_RAID_FLAGS_IO_SUB_TYPE_NONE = 0, + MR_RAID_FLAGS_IO_SUB_TYPE_SYSTEM_PD = 1, ++ MR_RAID_FLAGS_IO_SUB_TYPE_RMW_DATA = 2, ++ MR_RAID_FLAGS_IO_SUB_TYPE_RMW_P = 3, ++ MR_RAID_FLAGS_IO_SUB_TYPE_RMW_Q = 4, ++ MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS = 6, ++ MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7 + }; + + /* +@@ -109,29 +116,29 @@ enum MR_FUSION_ADAPTER_TYPE { + + struct RAID_CONTEXT { + #if defined(__BIG_ENDIAN_BITFIELD) +- u8 nseg:4; +- u8 Type:4; ++ u8 nseg:4; ++ u8 type:4; + #else +- u8 Type:4; +- u8 nseg:4; ++ u8 type:4; ++ u8 nseg:4; + #endif +- u8 resvd0; +- __le16 timeoutValue; +- u8 regLockFlags; +- u8 resvd1; +- __le16 VirtualDiskTgtId; +- __le64 regLockRowLBA; +- __le32 regLockLength; +- __le16 nextLMId; +- u8 exStatus; +- u8 status; +- u8 RAIDFlags; +- u8 numSGE; +- __le16 configSeqNum; +- u8 spanArm; +- u8 priority; +- u8 numSGEExt; +- u8 resvd2; ++ u8 resvd0; ++ __le16 timeout_value; ++ u8 reg_lock_flags; ++ u8 resvd1; ++ __le16 virtual_disk_tgt_id; ++ __le64 reg_lock_row_lba; ++ __le32 reg_lock_length; ++ __le16 next_lmid; ++ u8 ex_status; ++ u8 status; ++ u8 raid_flags; ++ u8 num_sge; ++ __le16 config_seq_num; ++ u8 span_arm; ++ u8 priority; ++ u8 num_sge_ext; ++ u8 resvd2; + }; + + /* +@@ -187,7 +194,7 @@ struct RAID_CONTEXT_G35 { + } smid; + u8 ex_status; /* 0x16 : OUT */ + u8 status; /* 0x17 status */ +- u8 RAIDFlags; /* 0x18 resvd[7:6], ioSubType[5:4], ++ u8 raid_flags; /* 0x18 resvd[7:6], ioSubType[5:4], + * resvd[3:1], preferredCpu[0] + */ + u8 span_arm; /* 0x1C span[7:5], arm[4:0] */ +@@ -672,14 +679,17 @@ struct MPI2_IOC_INIT_REQUEST { + #define MAX_RAIDMAP_ROW_SIZE (MAX_ROW_SIZE) + #define MAX_LOGICAL_DRIVES 64 + #define MAX_LOGICAL_DRIVES_EXT 256 ++#define MAX_LOGICAL_DRIVES_DYN 512 + #define MAX_RAIDMAP_LOGICAL_DRIVES (MAX_LOGICAL_DRIVES) + #define MAX_RAIDMAP_VIEWS (MAX_LOGICAL_DRIVES) + #define MAX_ARRAYS 128 + #define MAX_RAIDMAP_ARRAYS (MAX_ARRAYS) + #define MAX_ARRAYS_EXT 256 + #define MAX_API_ARRAYS_EXT (MAX_ARRAYS_EXT) ++#define MAX_API_ARRAYS_DYN 512 + #define MAX_PHYSICAL_DEVICES 256 + #define MAX_RAIDMAP_PHYSICAL_DEVICES (MAX_PHYSICAL_DEVICES) ++#define MAX_RAIDMAP_PHYSICAL_DEVICES_DYN 512 + #define MR_DCMD_LD_MAP_GET_INFO 0x0300e101 + #define MR_DCMD_SYSTEM_PD_MAP_GET_INFO 0x0200e102 + #define MR_DCMD_CTRL_SHARED_HOST_MEM_ALLOC 0x010e8485 /* SR-IOV HB alloc*/ +@@ -726,12 +736,56 @@ struct MR_SPAN_BLOCK_INFO { + struct MR_SPAN_INFO block_span_info; + }; + ++#define MR_RAID_CTX_CPUSEL_0 0 ++#define MR_RAID_CTX_CPUSEL_1 1 ++#define MR_RAID_CTX_CPUSEL_2 2 ++#define MR_RAID_CTX_CPUSEL_3 3 ++#define MR_RAID_CTX_CPUSEL_FCFS 0xF ++ ++struct MR_CPU_AFFINITY_MASK { ++ union { ++ struct { ++#ifndef MFI_BIG_ENDIAN ++ u8 hw_path:1; ++ u8 cpu0:1; ++ u8 cpu1:1; ++ u8 cpu2:1; ++ u8 cpu3:1; ++ u8 reserved:3; ++#else ++ u8 reserved:3; ++ u8 cpu3:1; ++ u8 cpu2:1; ++ u8 cpu1:1; ++ u8 cpu0:1; ++ u8 hw_path:1; ++#endif ++ }; ++ u8 core_mask; ++ }; ++}; ++ ++struct MR_IO_AFFINITY { ++ union { ++ struct { ++ struct MR_CPU_AFFINITY_MASK pdRead; ++ struct MR_CPU_AFFINITY_MASK pdWrite; ++ struct MR_CPU_AFFINITY_MASK ldRead; ++ struct MR_CPU_AFFINITY_MASK ldWrite; ++ }; ++ u32 word; ++ }; ++ u8 maxCores; /* Total cores + HW Path in ROC */ ++ u8 reserved[3]; ++}; ++ + struct MR_LD_RAID { + struct { + #if defined(__BIG_ENDIAN_BITFIELD) +- u32 reserved4:3; +- u32 fp_cache_bypass_capable:1; +- u32 fp_rmw_capable:1; ++ u32 reserved4:2; ++ u32 fp_cache_bypass_capable:1; ++ u32 fp_rmw_capable:1; ++ u32 disable_coalescing:1; + u32 fpBypassRegionLock:1; + u32 tmCapable:1; + u32 fpNonRWCapable:1; +@@ -759,9 +813,10 @@ struct MR_LD_RAID { + u32 fpNonRWCapable:1; + u32 tmCapable:1; + u32 fpBypassRegionLock:1; +- u32 fp_rmw_capable:1; +- u32 fp_cache_bypass_capable:1; +- u32 reserved4:3; ++ u32 disable_coalescing:1; ++ u32 fp_rmw_capable:1; ++ u32 fp_cache_bypass_capable:1; ++ u32 reserved4:2; + #endif + } capability; + __le32 reserved6; +@@ -788,7 +843,36 @@ struct MR_LD_RAID { + + u8 LUN[8]; /* 0x24 8 byte LUN field used for SCSI IO's */ + u8 fpIoTimeoutForLd;/*0x2C timeout value used by driver in FP IO*/ +- u8 reserved3[0x80-0x2D]; /* 0x2D */ ++ /* Ox2D This LD accept priority boost of this type */ ++ u8 ld_accept_priority_type; ++ u8 reserved2[2]; /* 0x2E - 0x2F */ ++ /* 0x30 - 0x33, Logical block size for the LD */ ++ u32 logical_block_length; ++ struct { ++#ifndef MFI_BIG_ENDIAN ++ /* 0x34, P_I_EXPONENT from READ CAPACITY 16 */ ++ u32 ld_pi_exp:4; ++ /* 0x34, LOGICAL BLOCKS PER PHYSICAL ++ * BLOCK EXPONENT from READ CAPACITY 16 ++ */ ++ u32 ld_logical_block_exp:4; ++ u32 reserved1:24; /* 0x34 */ ++#else ++ u32 reserved1:24; /* 0x34 */ ++ /* 0x34, LOGICAL BLOCKS PER PHYSICAL ++ * BLOCK EXPONENT from READ CAPACITY 16 ++ */ ++ u32 ld_logical_block_exp:4; ++ /* 0x34, P_I_EXPONENT from READ CAPACITY 16 */ ++ u32 ld_pi_exp:4; ++#endif ++ }; /* 0x34 - 0x37 */ ++ /* 0x38 - 0x3f, This will determine which ++ * core will process LD IO and PD IO. ++ */ ++ struct MR_IO_AFFINITY cpuAffinity; ++ /* Bit definiations are specified by MR_IO_AFFINITY */ ++ u8 reserved3[0x80-0x40]; /* 0x40 - 0x7f */ + }; + + struct MR_LD_SPAN_MAP { +@@ -846,6 +930,91 @@ struct MR_LD_TARGET_SYNC { + __le16 seqNum; + }; + ++/* ++ * RAID Map descriptor Types. ++ * Each element should uniquely idetify one data structure in the RAID map ++ */ ++enum MR_RAID_MAP_DESC_TYPE { ++ /* MR_DEV_HANDLE_INFO data */ ++ RAID_MAP_DESC_TYPE_DEVHDL_INFO = 0x0, ++ /* target to Ld num Index map */ ++ RAID_MAP_DESC_TYPE_TGTID_INFO = 0x1, ++ /* MR_ARRAY_INFO data */ ++ RAID_MAP_DESC_TYPE_ARRAY_INFO = 0x2, ++ /* MR_LD_SPAN_MAP data */ ++ RAID_MAP_DESC_TYPE_SPAN_INFO = 0x3, ++ RAID_MAP_DESC_TYPE_COUNT, ++}; ++ ++/* ++ * This table defines the offset, size and num elements of each descriptor ++ * type in the RAID Map buffer ++ */ ++struct MR_RAID_MAP_DESC_TABLE { ++ /* Raid map descriptor type */ ++ u32 raid_map_desc_type; ++ /* Offset into the RAID map buffer where ++ * descriptor data is saved ++ */ ++ u32 raid_map_desc_offset; ++ /* total size of the ++ * descriptor buffer ++ */ ++ u32 raid_map_desc_buffer_size; ++ /* Number of elements contained in the ++ * descriptor buffer ++ */ ++ u32 raid_map_desc_elements; ++}; ++ ++/* ++ * Dynamic Raid Map Structure. ++ */ ++struct MR_FW_RAID_MAP_DYNAMIC { ++ u32 raid_map_size; /* total size of RAID Map structure */ ++ u32 desc_table_offset;/* Offset of desc table into RAID map*/ ++ u32 desc_table_size; /* Total Size of desc table */ ++ /* Total Number of elements in the desc table */ ++ u32 desc_table_num_elements; ++ u64 reserved1; ++ u32 reserved2[3]; /*future use */ ++ /* timeout value used by driver in FP IOs */ ++ u8 fp_pd_io_timeout_sec; ++ u8 reserved3[3]; ++ /* when this seqNum increments, driver needs to ++ * release RMW buffers asap ++ */ ++ u32 rmw_fp_seq_num; ++ u16 ld_count; /* count of lds. */ ++ u16 ar_count; /* count of arrays */ ++ u16 span_count; /* count of spans */ ++ u16 reserved4[3]; ++/* ++ * The below structure of pointers is only to be used by the driver. ++ * This is added in the ,API to reduce the amount of code changes ++ * needed in the driver to support dynamic RAID map Firmware should ++ * not update these pointers while preparing the raid map ++ */ ++ union { ++ struct { ++ struct MR_DEV_HANDLE_INFO *dev_hndl_info; ++ u16 *ld_tgt_id_to_ld; ++ struct MR_ARRAY_INFO *ar_map_info; ++ struct MR_LD_SPAN_MAP *ld_span_map; ++ }; ++ u64 ptr_structure_size[RAID_MAP_DESC_TYPE_COUNT]; ++ }; ++/* ++ * RAID Map descriptor table defines the layout of data in the RAID Map. ++ * The size of the descriptor table itself could change. ++ */ ++ /* Variable Size descriptor Table. */ ++ struct MR_RAID_MAP_DESC_TABLE ++ raid_map_desc_table[RAID_MAP_DESC_TYPE_COUNT]; ++ /* Variable Size buffer containing all data */ ++ u32 raid_map_desc_data[1]; ++}; /* Dynamicaly sized RAID MAp structure */ ++ + #define IEEE_SGE_FLAGS_ADDR_MASK (0x03) + #define IEEE_SGE_FLAGS_SYSTEM_ADDR (0x00) + #define IEEE_SGE_FLAGS_IOCDDR_ADDR (0x01) +@@ -955,9 +1124,10 @@ struct MR_DRV_RAID_MAP { + __le16 spanCount; + __le16 reserve3; + +- struct MR_DEV_HANDLE_INFO devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES]; +- u8 ldTgtIdToLd[MAX_LOGICAL_DRIVES_EXT]; +- struct MR_ARRAY_INFO arMapInfo[MAX_API_ARRAYS_EXT]; ++ struct MR_DEV_HANDLE_INFO ++ devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES_DYN]; ++ u16 ldTgtIdToLd[MAX_LOGICAL_DRIVES_DYN]; ++ struct MR_ARRAY_INFO arMapInfo[MAX_API_ARRAYS_DYN]; + struct MR_LD_SPAN_MAP ldSpanMap[1]; + + }; +@@ -969,7 +1139,7 @@ struct MR_DRV_RAID_MAP { + struct MR_DRV_RAID_MAP_ALL { + + struct MR_DRV_RAID_MAP raidMap; +- struct MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES_EXT - 1]; ++ struct MR_LD_SPAN_MAP ldSpanMap[MAX_LOGICAL_DRIVES_DYN - 1]; + } __packed; + + +@@ -1088,7 +1258,7 @@ struct fusion_context { + u8 chain_offset_io_request; + u8 chain_offset_mfi_pthru; + +- struct MR_FW_RAID_MAP_ALL *ld_map[2]; ++ struct MR_FW_RAID_MAP_DYNAMIC *ld_map[2]; + dma_addr_t ld_map_phys[2]; + + /*Non dma-able memory. Driver local copy.*/ +@@ -1096,6 +1266,8 @@ struct fusion_context { + + u32 max_map_sz; + u32 current_map_sz; ++ u32 old_map_sz; ++ u32 new_map_sz; + u32 drv_map_sz; + u32 drv_map_pages; + struct MR_PD_CFG_SEQ_NUM_SYNC *pd_seq_sync[JBOD_MAPS_COUNT]; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0006-scsi-mpt3sas-Added-Device-ID-s-for-SAS35-devices-and.patch b/SOURCES/centos-linux-3.10-0006-scsi-mpt3sas-Added-Device-ID-s-for-SAS35-devices-and.patch new file mode 100644 index 0000000..1d1a251 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0006-scsi-mpt3sas-Added-Device-ID-s-for-SAS35-devices-and.patch @@ -0,0 +1,141 @@ +From 60eded7faed3769b20a519c65a04d9eb9dd48332 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:37 +0530 +Subject: [PATCH 06/11] scsi: mpt3sas: Added Device ID's for SAS35 devices and + updated MPI header. + +Added Device ID's for SAS35 devices (Ventura, Crusader, Harpoon & +Tomcat) and updated mpi header file for the same. Also added +"is_gen35_ioc" to MPT3SAS_ADAPTER structure for identifying SAS35 adapters. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h | 7 +++++++ + drivers/scsi/mpt3sas/mpt3sas_base.h | 1 + + drivers/scsi/mpt3sas/mpt3sas_ctl.c | 5 ++++- + drivers/scsi/mpt3sas/mpt3sas_ctl.h | 1 + + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 31 +++++++++++++++++++++++++++++++ + 5 files changed, 44 insertions(+), 1 deletion(-) + +diff --git a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h +index 95356a8..fa61baf 100644 +--- a/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h ++++ b/drivers/scsi/mpt3sas/mpi/mpi2_cnfg.h +@@ -478,6 +478,13 @@ typedef struct _MPI2_CONFIG_REPLY { + #define MPI26_MFGPAGE_DEVID_SAS3324_3 (0x00C2) + #define MPI26_MFGPAGE_DEVID_SAS3324_4 (0x00C3) + ++#define MPI26_MFGPAGE_DEVID_SAS3516 (0x00AA) ++#define MPI26_MFGPAGE_DEVID_SAS3516_1 (0x00AB) ++#define MPI26_MFGPAGE_DEVID_SAS3416 (0x00AC) ++#define MPI26_MFGPAGE_DEVID_SAS3508 (0x00AD) ++#define MPI26_MFGPAGE_DEVID_SAS3508_1 (0x00AE) ++#define MPI26_MFGPAGE_DEVID_SAS3408 (0x00AF) ++ + /*Manufacturing Page 0 */ + + typedef struct _MPI2_CONFIG_PAGE_MAN_0 { +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index 66cfa0f..c3a39e8 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -1205,6 +1205,7 @@ struct MPT3SAS_ADAPTER { + struct SL_WH_MPI_TRIGGERS_T diag_trigger_mpi; + void *device_remove_in_progress; + u16 device_remove_in_progress_sz; ++ u8 is_gen35_ioc; + }; + + typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, +diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +index a75f8a3..a66c0c8 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +@@ -1101,7 +1101,10 @@ _ctl_getiocinfo(struct MPT3SAS_ADAPTER *ioc, void __user *arg) + break; + case MPI25_VERSION: + case MPI26_VERSION: +- karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; ++ if (ioc->is_gen35_ioc) ++ karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS35; ++ else ++ karg.adapter_type = MPT3_IOCTL_INTERFACE_SAS3; + strcat(karg.driver_version, MPT3SAS_DRIVER_VERSION); + break; + } +diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.h b/drivers/scsi/mpt3sas/mpt3sas_ctl.h +index 8940835..f3e17a8 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.h +@@ -143,6 +143,7 @@ struct mpt3_ioctl_pci_info { + #define MPT2_IOCTL_INTERFACE_SAS2 (0x04) + #define MPT2_IOCTL_INTERFACE_SAS2_SSS6200 (0x05) + #define MPT3_IOCTL_INTERFACE_SAS3 (0x06) ++#define MPT3_IOCTL_INTERFACE_SAS35 (0x07) + #define MPT2_IOCTL_VERSION_LENGTH (32) + + /** +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index c6aa172..eaef45c 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -8722,6 +8722,12 @@ _scsih_determine_hba_mpi_version(struct pci_dev *pdev) + case MPI26_MFGPAGE_DEVID_SAS3324_2: + case MPI26_MFGPAGE_DEVID_SAS3324_3: + case MPI26_MFGPAGE_DEVID_SAS3324_4: ++ case MPI26_MFGPAGE_DEVID_SAS3508: ++ case MPI26_MFGPAGE_DEVID_SAS3508_1: ++ case MPI26_MFGPAGE_DEVID_SAS3408: ++ case MPI26_MFGPAGE_DEVID_SAS3516: ++ case MPI26_MFGPAGE_DEVID_SAS3516_1: ++ case MPI26_MFGPAGE_DEVID_SAS3416: + return MPI26_VERSION; + } + return 0; +@@ -8777,6 +8783,18 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id) + ioc->hba_mpi_version_belonged = hba_mpi_version; + ioc->id = mpt3_ids++; + sprintf(ioc->driver_name, "%s", MPT3SAS_DRIVER_NAME); ++ switch (pdev->device) { ++ case MPI26_MFGPAGE_DEVID_SAS3508: ++ case MPI26_MFGPAGE_DEVID_SAS3508_1: ++ case MPI26_MFGPAGE_DEVID_SAS3408: ++ case MPI26_MFGPAGE_DEVID_SAS3516: ++ case MPI26_MFGPAGE_DEVID_SAS3516_1: ++ case MPI26_MFGPAGE_DEVID_SAS3416: ++ ioc->is_gen35_ioc = 1; ++ break; ++ default: ++ ioc->is_gen35_ioc = 0; ++ } + if ((ioc->hba_mpi_version_belonged == MPI25_VERSION && + pdev->revision >= SAS3_PCI_DEVICE_C0_REVISION) || + (ioc->hba_mpi_version_belonged == MPI26_VERSION)) +@@ -9186,6 +9204,19 @@ static const struct pci_device_id mpt3sas_pci_table[] = { + PCI_ANY_ID, PCI_ANY_ID }, + { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3324_4, + PCI_ANY_ID, PCI_ANY_ID }, ++ /* Ventura, Crusader, Harpoon & Tomcat ~ 3516, 3416, 3508 & 3408*/ ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3508, ++ PCI_ANY_ID, PCI_ANY_ID }, ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3508_1, ++ PCI_ANY_ID, PCI_ANY_ID }, ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3408, ++ PCI_ANY_ID, PCI_ANY_ID }, ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3516, ++ PCI_ANY_ID, PCI_ANY_ID }, ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3516_1, ++ PCI_ANY_ID, PCI_ANY_ID }, ++ { MPI2_MFGPAGE_VENDORID_LSI, MPI26_MFGPAGE_DEVID_SAS3416, ++ PCI_ANY_ID, PCI_ANY_ID }, + #endif /* MPT2SAS_SCSI */ + {0} /* Terminating entry */ + }; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0007-scsi-megaraid_sas-Add-the-Support-for-SAS3.5-Generic.patch b/SOURCES/centos-linux-3.10-0007-scsi-megaraid_sas-Add-the-Support-for-SAS3.5-Generic.patch new file mode 100644 index 0000000..6e01fe2 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0007-scsi-megaraid_sas-Add-the-Support-for-SAS3.5-Generic.patch @@ -0,0 +1,183 @@ +From 1d7d67352bddfd44384bd8778f822da279ff78f8 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:49 -0500 +Subject: [PATCH 07/11] scsi: megaraid_sas: Add the Support for SAS3.5 Generic + Megaraid Controllers Capabilities + +The Megaraid driver has to support the SAS3.5 Generic Megaraid Controllers Firmware functionality. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas_base.c | 53 ++++++++++++++--------------- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 19 ++++++----- + drivers/scsi/megaraid/megaraid_sas_fusion.h | 1 + + 3 files changed, 37 insertions(+), 36 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index 1d8cf03..8b0c686 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -5089,34 +5089,29 @@ static int megasas_init_fw(struct megasas_instance *instance) + + reg_set = instance->reg_set; + +- switch (instance->pdev->device) { +- case PCI_DEVICE_ID_LSI_FUSION: +- case PCI_DEVICE_ID_LSI_PLASMA: +- case PCI_DEVICE_ID_LSI_INVADER: +- case PCI_DEVICE_ID_LSI_FURY: +- case PCI_DEVICE_ID_LSI_INTRUDER: +- case PCI_DEVICE_ID_LSI_INTRUDER_24: +- case PCI_DEVICE_ID_LSI_CUTLASS_52: +- case PCI_DEVICE_ID_LSI_CUTLASS_53: ++ if (fusion) + instance->instancet = &megasas_instance_template_fusion; +- break; +- case PCI_DEVICE_ID_LSI_SAS1078R: +- case PCI_DEVICE_ID_LSI_SAS1078DE: +- instance->instancet = &megasas_instance_template_ppc; +- break; +- case PCI_DEVICE_ID_LSI_SAS1078GEN2: +- case PCI_DEVICE_ID_LSI_SAS0079GEN2: +- instance->instancet = &megasas_instance_template_gen2; +- break; +- case PCI_DEVICE_ID_LSI_SAS0073SKINNY: +- case PCI_DEVICE_ID_LSI_SAS0071SKINNY: +- instance->instancet = &megasas_instance_template_skinny; +- break; +- case PCI_DEVICE_ID_LSI_SAS1064R: +- case PCI_DEVICE_ID_DELL_PERC5: +- default: +- instance->instancet = &megasas_instance_template_xscale; +- break; ++ else { ++ switch (instance->pdev->device) { ++ case PCI_DEVICE_ID_LSI_SAS1078R: ++ case PCI_DEVICE_ID_LSI_SAS1078DE: ++ instance->instancet = &megasas_instance_template_ppc; ++ break; ++ case PCI_DEVICE_ID_LSI_SAS1078GEN2: ++ case PCI_DEVICE_ID_LSI_SAS0079GEN2: ++ instance->instancet = &megasas_instance_template_gen2; ++ break; ++ case PCI_DEVICE_ID_LSI_SAS0073SKINNY: ++ case PCI_DEVICE_ID_LSI_SAS0071SKINNY: ++ instance->instancet = &megasas_instance_template_skinny; ++ break; ++ case PCI_DEVICE_ID_LSI_SAS1064R: ++ case PCI_DEVICE_ID_DELL_PERC5: ++ default: ++ instance->instancet = &megasas_instance_template_xscale; ++ instance->pd_list_not_supported = 1; ++ break; ++ } + } + + if (megasas_transition_to_ready(instance, 0)) { +@@ -5869,7 +5864,9 @@ static int megasas_probe_one(struct pci_dev *pdev, + if ((instance->pdev->device == PCI_DEVICE_ID_LSI_FUSION) || + (instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA)) + fusion->adapter_type = THUNDERBOLT_SERIES; +- else if (!instance->is_ventura) ++ else if (instance->is_ventura) ++ fusion->adapter_type = VENTURA_SERIES; ++ else + fusion->adapter_type = INVADER_SERIES; + } + break; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 178f166..1802c57 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -244,7 +244,10 @@ megasas_fusion_update_can_queue(struct megasas_instance *instance, int fw_boot_c + + reg_set = instance->reg_set; + +- cur_max_fw_cmds = readl(&instance->reg_set->outbound_scratch_pad_3) & 0x00FFFF; ++ /* ventura FW does not fill outbound_scratch_pad_3 with queue depth */ ++ if (!instance->is_ventura) ++ cur_max_fw_cmds = ++ readl(&instance->reg_set->outbound_scratch_pad_3) & 0x00FFFF; + + if (dual_qdepth_disable || !cur_max_fw_cmds) + cur_max_fw_cmds = instance->instancet->read_fw_status_reg(reg_set) & 0x00FFFF; +@@ -837,7 +840,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance) + drv_ops = (MFI_CAPABILITIES *) &(init_frame->driver_operations); + + /* driver support Extended MSIX */ +- if (fusion->adapter_type == INVADER_SERIES) ++ if (fusion->adapter_type >= INVADER_SERIES) + drv_ops->mfi_capabilities.support_additional_msix = 1; + /* driver supports HA / Remote LUN over Fast Path interface */ + drv_ops->mfi_capabilities.support_fp_remote_lun = 1; +@@ -1491,7 +1494,7 @@ megasas_make_sgl_fusion(struct megasas_instance *instance, + + fusion = instance->ctrl_context; + +- if (fusion->adapter_type == INVADER_SERIES) { ++ if (fusion->adapter_type >= INVADER_SERIES) { + struct MPI25_IEEE_SGE_CHAIN64 *sgl_ptr_end = sgl_ptr; + sgl_ptr_end += fusion->max_sge_in_main_msg - 1; + sgl_ptr_end->Flags = 0; +@@ -1508,7 +1511,7 @@ megasas_make_sgl_fusion(struct megasas_instance *instance, + sgl_ptr->Length = cpu_to_le32(sg_dma_len(os_sgl)); + sgl_ptr->Address = cpu_to_le64(sg_dma_address(os_sgl)); + sgl_ptr->Flags = 0; +- if (fusion->adapter_type == INVADER_SERIES) ++ if (fusion->adapter_type >= INVADER_SERIES) + if (i == sge_count - 1) + sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST; + sgl_ptr++; +@@ -1519,7 +1522,7 @@ megasas_make_sgl_fusion(struct megasas_instance *instance, + (sge_count > fusion->max_sge_in_main_msg)) { + + struct MPI25_IEEE_SGE_CHAIN64 *sg_chain; +- if (fusion->adapter_type == INVADER_SERIES) { ++ if (fusion->adapter_type >= INVADER_SERIES) { + if ((le16_to_cpu(cmd->io_request->IoFlags) & + MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) != + MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) +@@ -1535,7 +1538,7 @@ megasas_make_sgl_fusion(struct megasas_instance *instance, + sg_chain = sgl_ptr; + /* Prepare chain element */ + sg_chain->NextChainOffset = 0; +- if (fusion->adapter_type == INVADER_SERIES) ++ if (fusion->adapter_type >= INVADER_SERIES) + sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT; + else + sg_chain->Flags = +@@ -2286,7 +2289,7 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + pRAID_Context->timeout_value = + cpu_to_le16((os_timeout_value > timeout_limit) ? + timeout_limit : os_timeout_value); +- if (fusion->adapter_type == INVADER_SERIES) ++ if (fusion->adapter_type >= INVADER_SERIES) + io_request->IoFlags |= + cpu_to_le16(MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH); + +@@ -2995,7 +2998,7 @@ build_mpt_mfi_pass_thru(struct megasas_instance *instance, + + io_req = cmd->io_request; + +- if (fusion->adapter_type == INVADER_SERIES) { ++ if (fusion->adapter_type >= INVADER_SERIES) { + struct MPI25_IEEE_SGE_CHAIN64 *sgl_ptr_end = + (struct MPI25_IEEE_SGE_CHAIN64 *)&io_req->SGL; + sgl_ptr_end += fusion->max_sge_in_main_msg - 1; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index 2de12b4..b24262a 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -107,6 +107,7 @@ enum MR_RAID_FLAGS_IO_SUB_TYPE { + enum MR_FUSION_ADAPTER_TYPE { + THUNDERBOLT_SERIES = 0, + INVADER_SERIES = 1, ++ VENTURA_SERIES = 2, + }; + + /* +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0007-scsi-mpt3sas-Increased-Additional-MSIX-support-for-S.patch b/SOURCES/centos-linux-3.10-0007-scsi-mpt3sas-Increased-Additional-MSIX-support-for-S.patch new file mode 100644 index 0000000..45b0c9f --- /dev/null +++ b/SOURCES/centos-linux-3.10-0007-scsi-mpt3sas-Increased-Additional-MSIX-support-for-S.patch @@ -0,0 +1,141 @@ +From bd2314e40123381058f15b3ae49616d1cccb4f44 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:38 +0530 +Subject: [PATCH 07/11] scsi: mpt3sas: Increased/Additional MSIX support for + SAS35 devices. + +For SAS35 devices MSIX vectors are inceased to 128 from 96. To support this +Reply post host index register count is increased to 16. Also variable +msix96_vector is replaced with combined_reply_queue and variable +combined_reply_index_count is added to set different values for SAS3 and +SAS35 devices. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.c | 14 +++++++------- + drivers/scsi/mpt3sas/mpt3sas_base.h | 8 +++++--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 11 +++++++++-- + 3 files changed, 21 insertions(+), 12 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c +index ac87e12..b26fa23 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c +@@ -1079,7 +1079,7 @@ _base_interrupt(int irq, void *bus_id) + * new reply host index value in ReplyPostIndex Field and msix_index + * value in MSIxIndex field. + */ +- if (ioc->msix96_vector) ++ if (ioc->combined_reply_queue) + writel(reply_q->reply_post_host_index | ((msix_index & 7) << + MPI2_RPHI_MSIX_INDEX_SHIFT), + ioc->replyPostRegisterIndex[msix_index/8]); +@@ -2053,7 +2053,7 @@ mpt3sas_base_unmap_resources(struct MPT3SAS_ADAPTER *ioc) + _base_free_irq(ioc); + _base_disable_msix(ioc); + +- if (ioc->msix96_vector) { ++ if (ioc->combined_reply_queue) { + kfree(ioc->replyPostRegisterIndex); + ioc->replyPostRegisterIndex = NULL; + } +@@ -2163,7 +2163,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) + /* Use the Combined reply queue feature only for SAS3 C0 & higher + * revision HBAs and also only when reply queue count is greater than 8 + */ +- if (ioc->msix96_vector && ioc->reply_queue_count > 8) { ++ if (ioc->combined_reply_queue && ioc->reply_queue_count > 8) { + /* Determine the Supplemental Reply Post Host Index Registers + * Addresse. Supplemental Reply Post Host Index Registers + * starts at offset MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET and +@@ -2171,7 +2171,7 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) + * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET from previous one. + */ + ioc->replyPostRegisterIndex = kcalloc( +- MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT, ++ ioc->combined_reply_index_count, + sizeof(resource_size_t *), GFP_KERNEL); + if (!ioc->replyPostRegisterIndex) { + dfailprintk(ioc, printk(MPT3SAS_FMT +@@ -2181,14 +2181,14 @@ mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc) + goto out_fail; + } + +- for (i = 0; i < MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT; i++) { ++ for (i = 0; i < ioc->combined_reply_index_count; i++) { + ioc->replyPostRegisterIndex[i] = (resource_size_t *) + ((u8 *)&ioc->chip->Doorbell + + MPI25_SUP_REPLY_POST_HOST_INDEX_OFFSET + + (i * MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET)); + } + } else +- ioc->msix96_vector = 0; ++ ioc->combined_reply_queue = 0; + + list_for_each_entry(reply_q, &ioc->reply_queue_list, list) + pr_info(MPT3SAS_FMT "%s: IRQ %d\n", +@@ -5161,7 +5161,7 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) + + /* initialize reply post host index */ + list_for_each_entry(reply_q, &ioc->reply_queue_list, list) { +- if (ioc->msix96_vector) ++ if (ioc->combined_reply_queue) + writel((reply_q->msix_index & 7)<< + MPI2_RPHI_MSIX_INDEX_SHIFT, + ioc->replyPostRegisterIndex[reply_q->msix_index/8]); +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index c3a39e8..240c360 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -304,8 +304,9 @@ + * There are twelve Supplemental Reply Post Host Index Registers + * and each register is at offset 0x10 bytes from the previous one. + */ +-#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT 12 +-#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET (0x10) ++#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G3 12 ++#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G35 16 ++#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET (0x10) + + /* OEM Identifiers */ + #define MFG10_OEM_ID_INVALID (0x00000000) +@@ -1172,7 +1173,8 @@ struct MPT3SAS_ADAPTER { + u8 reply_queue_count; + struct list_head reply_queue_list; + +- u8 msix96_vector; ++ u8 combined_reply_queue; ++ u8 combined_reply_index_count; + /* reply post register index */ + resource_size_t **replyPostRegisterIndex; + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index eaef45c..980c69d 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -8797,8 +8797,15 @@ _scsih_probe(struct pci_dev *pdev, const struct pci_device_id *id) + } + if ((ioc->hba_mpi_version_belonged == MPI25_VERSION && + pdev->revision >= SAS3_PCI_DEVICE_C0_REVISION) || +- (ioc->hba_mpi_version_belonged == MPI26_VERSION)) +- ioc->msix96_vector = 1; ++ (ioc->hba_mpi_version_belonged == MPI26_VERSION)) { ++ ioc->combined_reply_queue = 1; ++ if (ioc->is_gen35_ioc) ++ ioc->combined_reply_index_count = ++ MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G35; ++ else ++ ioc->combined_reply_index_count = ++ MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G3; ++ } + break; + default: + return -ENODEV; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0008-scsi-megaraid_sas-Enable-or-Disable-Fast-path-based-.patch b/SOURCES/centos-linux-3.10-0008-scsi-megaraid_sas-Enable-or-Disable-Fast-path-based-.patch new file mode 100644 index 0000000..8b08508 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0008-scsi-megaraid_sas-Enable-or-Disable-Fast-path-based-.patch @@ -0,0 +1,249 @@ +From 87029b097c79483c8a03c68a065a78973e0456db Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:50 -0500 +Subject: [PATCH 08/11] scsi: megaraid_sas: Enable or Disable Fast path based + on the PCI Threshold Bandwidth + +Large SEQ IO workload should sent as non fast path commands + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 8 +++++ + drivers/scsi/megaraid/megaraid_sas_base.c | 48 +++++++++++++++++++++++++++++ + drivers/scsi/megaraid/megaraid_sas_fp.c | 7 +++++ + drivers/scsi/megaraid/megaraid_sas_fusion.c | 16 ++++++---- + drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 +- + 5 files changed, 74 insertions(+), 7 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index d5205c4..f6ac1b2 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -1429,6 +1429,8 @@ enum FW_BOOT_CONTEXT { + #define MFI_1068_FW_HANDSHAKE_OFFSET 0x64 + #define MFI_1068_FW_READY 0xDDDD0000 + ++#define MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL HZ ++ + #define MR_MAX_REPLY_QUEUES_OFFSET 0X0000001F + #define MR_MAX_REPLY_QUEUES_EXT_OFFSET 0X003FC000 + #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT 14 +@@ -2101,6 +2103,10 @@ struct megasas_instance { + atomic_t ldio_outstanding; + atomic_t fw_reset_no_pci_access; + ++ atomic64_t bytes_wrote; /* used for raid1 fast path enable or disable */ ++ atomic_t r1_write_fp_capable; ++ ++ + struct megasas_instance_template *instancet; + struct tasklet_struct isr_tasklet; + struct work_struct work_init; +@@ -2143,6 +2149,7 @@ struct megasas_instance { + long reset_flags; + struct mutex reset_mutex; + struct timer_list sriov_heartbeat_timer; ++ struct timer_list r1_fp_hold_timer; + char skip_heartbeat_timer_del; + u8 requestorId; + char PlasmaFW111; +@@ -2159,6 +2166,7 @@ struct megasas_instance { + bool is_ventura; + bool msix_combined; + u16 max_raid_mapsize; ++ u64 pci_threshold_bandwidth; /* used to control the fp writes */ + }; + struct MR_LD_VF_MAP { + u32 size; +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index 8b0c686..cab3be8 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -1959,6 +1959,9 @@ void megaraid_sas_kill_hba(struct megasas_instance *instance) + } + /* Complete outstanding ioctls when adapter is killed */ + megasas_complete_outstanding_ioctls(instance); ++ if (instance->is_ventura) ++ del_timer_sync(&instance->r1_fp_hold_timer); ++ + } + + /** +@@ -2457,6 +2460,24 @@ void megasas_sriov_heartbeat_handler(unsigned long instance_addr) + } + } + ++/*Handler for disabling/enabling raid 1 fast paths*/ ++void megasas_change_r1_fp_status(unsigned long instance_addr) ++{ ++ struct megasas_instance *instance = ++ (struct megasas_instance *)instance_addr; ++ if (atomic64_read(&instance->bytes_wrote) >= ++ instance->pci_threshold_bandwidth) { ++ ++ atomic64_set(&instance->bytes_wrote, 0); ++ atomic_set(&instance->r1_write_fp_capable, 0); ++ } else { ++ atomic64_set(&instance->bytes_wrote, 0); ++ atomic_set(&instance->r1_write_fp_capable, 1); ++ } ++ mod_timer(&instance->r1_fp_hold_timer, ++ jiffies + MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); ++} ++ + /** + * megasas_wait_for_outstanding - Wait for all outstanding cmds + * @instance: Adapter soft state +@@ -5403,6 +5424,17 @@ static int megasas_init_fw(struct megasas_instance *instance) + instance->skip_heartbeat_timer_del = 1; + } + ++ if (instance->is_ventura) { ++ atomic64_set(&instance->bytes_wrote, 0); ++ atomic_set(&instance->r1_write_fp_capable, 1); ++ megasas_start_timer(instance, ++ &instance->r1_fp_hold_timer, ++ megasas_change_r1_fp_status, ++ MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); ++ dev_info(&instance->pdev->dev, "starting the raid 1 fp timer with interval %d\n", ++ MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); ++ } ++ + return 0; + + fail_get_ld_pd_list: +@@ -6202,6 +6234,9 @@ megasas_suspend(struct pci_dev *pdev, pm_message_t state) + if (instance->requestorId && !instance->skip_heartbeat_timer_del) + del_timer_sync(&instance->sriov_heartbeat_timer); + ++ if (instance->is_ventura) ++ del_timer_sync(&instance->r1_fp_hold_timer); ++ + megasas_flush_cache(instance); + megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN); + +@@ -6321,6 +6356,16 @@ megasas_resume(struct pci_dev *pdev) + megasas_setup_jbod_map(instance); + instance->unload = 0; + ++ if (instance->is_ventura) { ++ atomic64_set(&instance->bytes_wrote, 0); ++ atomic_set(&instance->r1_write_fp_capable, 1); ++ megasas_start_timer(instance, ++ &instance->r1_fp_hold_timer, ++ megasas_change_r1_fp_status, ++ MEGASAS_RAID1_FAST_PATH_STATUS_CHECK_INTERVAL); ++ } ++ ++ + /* + * Initiate AEN (Asynchronous Event Notification) + */ +@@ -6381,6 +6426,9 @@ static void megasas_detach_one(struct pci_dev *pdev) + if (instance->requestorId && !instance->skip_heartbeat_timer_del) + del_timer_sync(&instance->sriov_heartbeat_timer); + ++ if (instance->is_ventura) ++ del_timer_sync(&instance->r1_fp_hold_timer); ++ + if (instance->fw_crash_state != UNAVAILABLE) + megasas_free_host_crash_buffer(instance); + scsi_remove_host(instance->host); +diff --git a/drivers/scsi/megaraid/megaraid_sas_fp.c b/drivers/scsi/megaraid/megaraid_sas_fp.c +index e45affe..5cad7c6 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fp.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fp.c +@@ -197,6 +197,9 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance) + + if (instance->max_raid_mapsize) { + fw_map_dyn = fusion->ld_map[(instance->map_id & 1)]; ++ if (fw_map_dyn->pci_threshold_bandwidth) ++ instance->pci_threshold_bandwidth = ++ le64_to_cpu(fw_map_dyn->pci_threshold_bandwidth); + #if VD_EXT_DEBUG + dev_dbg(&instance->pdev->dev, "raidMapSize 0x%x fw_map_dyn->descTableOffset 0x%x\n", + le32_to_cpu(fw_map_dyn->raid_map_size), +@@ -204,6 +207,8 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance) + dev_dbg(&instance->pdev->dev, "descTableSize 0x%x descTableNumElements 0x%x\n", + le32_to_cpu(fw_map_dyn->desc_table_size), + le32_to_cpu(fw_map_dyn->desc_table_num_elements)); ++ dev_dbg(&instance->pdev->dev, "PCIThreasholdBandwidth %llu\n", ++ instance->pci_threshold_bandwidth); + dev_dbg(&instance->pdev->dev, "drv map %p ldCount %d\n", + drv_map, fw_map_dyn->ld_count); + #endif +@@ -434,6 +439,8 @@ void MR_PopulateDrvRaidMap(struct megasas_instance *instance) + sizeof(struct MR_DEV_HANDLE_INFO) * + MAX_RAIDMAP_PHYSICAL_DEVICES); + } ++ if (instance->is_ventura && !instance->pci_threshold_bandwidth) ++ instance->pci_threshold_bandwidth = ULLONG_MAX; + } + + /* +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 1802c57..5689a44 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -95,6 +95,7 @@ extern unsigned int resetwaittime; + extern unsigned int dual_qdepth_disable; + static void megasas_free_rdpq_fusion(struct megasas_instance *instance); + static void megasas_free_reply_fusion(struct megasas_instance *instance); ++void megasas_change_r1_fp_status(unsigned long instance_addr); + + + +@@ -2628,8 +2629,9 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + * to get new command + */ + if (cmd->is_raid_1_fp_write && +- atomic_inc_return(&instance->fw_outstanding) > +- (instance->host->can_queue)) { ++ (atomic_inc_return(&instance->fw_outstanding) > ++ (instance->host->can_queue) || ++ (!atomic_read(&instance->r1_write_fp_capable)))) { + megasas_fpio_to_ldio(instance, cmd, cmd->scmd); + atomic_dec(&instance->fw_outstanding); + } else if (cmd->is_raid_1_fp_write) { +@@ -2638,17 +2640,19 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + megasas_prepare_secondRaid1_IO(instance, cmd, r1_cmd); + } + +- + /* + * Issue the command to the FW + */ ++ if (scmd->sc_data_direction == PCI_DMA_TODEVICE && instance->is_ventura) ++ atomic64_add(scsi_bufflen(scmd), &instance->bytes_wrote); + + megasas_fire_cmd_fusion(instance, req_desc, instance->is_ventura); + +- if (r1_cmd) ++ if (r1_cmd) { ++ atomic64_add(scsi_bufflen(scmd), &instance->bytes_wrote); + megasas_fire_cmd_fusion(instance, r1_cmd->request_desc, +- instance->is_ventura); +- ++ instance->is_ventura); ++ } + + return 0; + } +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index b24262a..f7384c1 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -977,7 +977,7 @@ struct MR_FW_RAID_MAP_DYNAMIC { + u32 desc_table_size; /* Total Size of desc table */ + /* Total Number of elements in the desc table */ + u32 desc_table_num_elements; +- u64 reserved1; ++ u64 pci_threshold_bandwidth; + u32 reserved2[3]; /*future use */ + /* timeout value used by driver in FP IOs */ + u8 fp_pd_io_timeout_sec; +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0008-scsi-mpt3sas-set-EEDP-escape-flags-for-SAS35-devices.patch b/SOURCES/centos-linux-3.10-0008-scsi-mpt3sas-set-EEDP-escape-flags-for-SAS35-devices.patch new file mode 100644 index 0000000..f099d87 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0008-scsi-mpt3sas-set-EEDP-escape-flags-for-SAS35-devices.patch @@ -0,0 +1,43 @@ +From cf10a0af2c72e9972fa436aa6c2420a00ac69e46 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:39 +0530 +Subject: [PATCH 08/11] scsi: mpt3sas: set EEDP-escape-flags for SAS35 devices. + +An UNMAP command on a PI formatted device will leave the Logical Block +Application Tag and Logical Block Reference Tag as all F's (for those LBAs +that are unmapped). To avoid IO errors if those LBAs are subsequently read +before they are written with valid tag fields, the MPI SCSI IO requests +need to set the EEDPFlags element EEDP Escape Mode field, Bits [7:6] +appropriately. A value of 2 should be set to disable all PI checks if the +Logical Block Application Tag is 0xFFFF for PI types 1 and 2. A value +of 3 should be set to disable all PI checks if the Logical Block +Application Tag is 0xFFFF and the Logical Block Reference Tag is +0xFFFFFFFF for PI type 3. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 980c69d..0ff2ed3 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -4040,6 +4040,9 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, + + mpi_request_3v->EEDPBlockSize = + cpu_to_le16(scmd->device->sector_size); ++ ++ if (ioc->is_gen35_ioc) ++ eedp_flags |= MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE; + mpi_request->EEDPFlags = cpu_to_le16(eedp_flags); + } + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0009-scsi-megaraid_sas-ldio_outstanding-variable-is-not-d.patch b/SOURCES/centos-linux-3.10-0009-scsi-megaraid_sas-ldio_outstanding-variable-is-not-d.patch new file mode 100644 index 0000000..5db5c08 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0009-scsi-megaraid_sas-ldio_outstanding-variable-is-not-d.patch @@ -0,0 +1,51 @@ +From b151f44de5717ff9be9695f744c9bd0060b3fcb4 Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:51 -0500 +Subject: [PATCH 09/11] scsi: megaraid_sas: ldio_outstanding variable is not + decremented in completion path + +ldio outstanding variable needs to be decremented in io completion path for +iMR dual queue depth + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas_fusion.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 5689a44..82dd2da 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -2580,7 +2580,6 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance, + + if (atomic_inc_return(&instance->fw_outstanding) > + instance->host->can_queue) { +- dev_err(&instance->pdev->dev, "Throttle IOs beyond Controller queue depth\n"); + atomic_dec(&instance->fw_outstanding); + return SCSI_MLQUEUE_HOST_BUSY; + } +@@ -2811,6 +2810,9 @@ complete_cmd_fusion(struct megasas_instance *instance, u32 MSIxIndex) + extStatus, data_length, sense); + scsi_io_req->RaidContext.raid_context.status = 0; + scsi_io_req->RaidContext.raid_context.ex_status = 0; ++ if (instance->ldio_threshold ++ && megasas_cmd_type(scmd_local) == READ_WRITE_LDIO) ++ atomic_dec(&instance->ldio_outstanding); + megasas_return_cmd_fusion(instance, cmd_fusion); + scsi_dma_unmap(scmd_local); + scmd_local->scsi_done(scmd_local); +@@ -3955,7 +3957,8 @@ int megasas_reset_fusion(struct Scsi_Host *shost, int reason) + scmd_local->result = + megasas_check_mpio_paths(instance, + scmd_local); +- if (megasas_cmd_type(scmd_local) == READ_WRITE_LDIO) ++ if (instance->ldio_threshold && ++ megasas_cmd_type(scmd_local) == READ_WRITE_LDIO) + atomic_dec(&instance->ldio_outstanding); + megasas_return_cmd_fusion(instance, cmd_fusion); + scsi_dma_unmap(scmd_local); +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0009-scsi-mpt3sas-Use-the-new-MPI-2.6-32-bit-Atomic-Reque.patch b/SOURCES/centos-linux-3.10-0009-scsi-mpt3sas-Use-the-new-MPI-2.6-32-bit-Atomic-Reque.patch new file mode 100644 index 0000000..b867d5b --- /dev/null +++ b/SOURCES/centos-linux-3.10-0009-scsi-mpt3sas-Use-the-new-MPI-2.6-32-bit-Atomic-Reque.patch @@ -0,0 +1,581 @@ +From 081008132942c3c50c43d1fded60080cfa8cda91 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:40 +0530 +Subject: [PATCH 09/11] scsi: mpt3sas: Use the new MPI 2.6 32-bit Atomic + Request Descriptors for SAS35 devices. + +Support Atomic Request Descriptors for Ventura/SAS35 devices. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.c | 141 +++++++++++++++++++++++++++---- + drivers/scsi/mpt3sas/mpt3sas_base.h | 18 ++-- + drivers/scsi/mpt3sas/mpt3sas_config.c | 2 +- + drivers/scsi/mpt3sas/mpt3sas_ctl.c | 22 ++--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 24 +++--- + drivers/scsi/mpt3sas/mpt3sas_transport.c | 8 +- + 6 files changed, 161 insertions(+), 54 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c +index b26fa23..9ef253b 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.c +@@ -850,7 +850,7 @@ _base_async_event(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, u32 reply) + ack_request->EventContext = mpi_reply->EventContext; + ack_request->VF_ID = 0; /* TODO */ + ack_request->VP_ID = 0; +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + + out: + +@@ -2454,15 +2454,15 @@ _base_writeq(__u64 b, volatile void __iomem *addr, spinlock_t *writeq_lock) + #endif + + /** +- * mpt3sas_base_put_smid_scsi_io - send SCSI_IO request to firmware ++ * _base_put_smid_scsi_io - send SCSI_IO request to firmware + * @ioc: per adapter object + * @smid: system request message index + * @handle: device handle + * + * Return nothing. + */ +-void +-mpt3sas_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle) ++static void ++_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle) + { + Mpi2RequestDescriptorUnion_t descriptor; + u64 *request = (u64 *)&descriptor; +@@ -2478,15 +2478,15 @@ mpt3sas_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 handle) + } + + /** +- * mpt3sas_base_put_smid_fast_path - send fast path request to firmware ++ * _base_put_smid_fast_path - send fast path request to firmware + * @ioc: per adapter object + * @smid: system request message index + * @handle: device handle + * + * Return nothing. + */ +-void +-mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, ++static void ++_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, + u16 handle) + { + Mpi2RequestDescriptorUnion_t descriptor; +@@ -2503,14 +2503,14 @@ mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, + } + + /** +- * mpt3sas_base_put_smid_hi_priority - send Task Managment request to firmware ++ * _base_put_smid_hi_priority - send Task Management request to firmware + * @ioc: per adapter object + * @smid: system request message index + * @msix_task: msix_task will be same as msix of IO incase of task abort else 0. + * Return nothing. + */ +-void +-mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, ++static void ++_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, + u16 msix_task) + { + Mpi2RequestDescriptorUnion_t descriptor; +@@ -2527,14 +2527,14 @@ mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, u16 smid, + } + + /** +- * mpt3sas_base_put_smid_default - Default, primarily used for config pages ++ * _base_put_smid_default - Default, primarily used for config pages + * @ioc: per adapter object + * @smid: system request message index + * + * Return nothing. + */ +-void +-mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) ++static void ++_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) + { + Mpi2RequestDescriptorUnion_t descriptor; + u64 *request = (u64 *)&descriptor; +@@ -2549,6 +2549,95 @@ mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid) + } + + /** ++* _base_put_smid_scsi_io_atomic - send SCSI_IO request to firmware using ++* Atomic Request Descriptor ++* @ioc: per adapter object ++* @smid: system request message index ++* @handle: device handle, unused in this function, for function type match ++* ++* Return nothing. ++*/ ++static void ++_base_put_smid_scsi_io_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, ++ u16 handle) ++{ ++ Mpi26AtomicRequestDescriptor_t descriptor; ++ u32 *request = (u32 *)&descriptor; ++ ++ descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO; ++ descriptor.MSIxIndex = _base_get_msix_index(ioc); ++ descriptor.SMID = cpu_to_le16(smid); ++ ++ writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); ++} ++ ++/** ++ * _base_put_smid_fast_path_atomic - send fast path request to firmware ++ * using Atomic Request Descriptor ++ * @ioc: per adapter object ++ * @smid: system request message index ++ * @handle: device handle, unused in this function, for function type match ++ * Return nothing ++ */ ++static void ++_base_put_smid_fast_path_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, ++ u16 handle) ++{ ++ Mpi26AtomicRequestDescriptor_t descriptor; ++ u32 *request = (u32 *)&descriptor; ++ ++ descriptor.RequestFlags = MPI25_REQ_DESCRIPT_FLAGS_FAST_PATH_SCSI_IO; ++ descriptor.MSIxIndex = _base_get_msix_index(ioc); ++ descriptor.SMID = cpu_to_le16(smid); ++ ++ writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); ++} ++ ++/** ++ * _base_put_smid_hi_priority_atomic - send Task Management request to ++ * firmware using Atomic Request Descriptor ++ * @ioc: per adapter object ++ * @smid: system request message index ++ * @msix_task: msix_task will be same as msix of IO incase of task abort else 0 ++ * ++ * Return nothing. ++ */ ++static void ++_base_put_smid_hi_priority_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid, ++ u16 msix_task) ++{ ++ Mpi26AtomicRequestDescriptor_t descriptor; ++ u32 *request = (u32 *)&descriptor; ++ ++ descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY; ++ descriptor.MSIxIndex = msix_task; ++ descriptor.SMID = cpu_to_le16(smid); ++ ++ writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); ++} ++ ++/** ++ * _base_put_smid_default - Default, primarily used for config pages ++ * use Atomic Request Descriptor ++ * @ioc: per adapter object ++ * @smid: system request message index ++ * ++ * Return nothing. ++ */ ++static void ++_base_put_smid_default_atomic(struct MPT3SAS_ADAPTER *ioc, u16 smid) ++{ ++ Mpi26AtomicRequestDescriptor_t descriptor; ++ u32 *request = (u32 *)&descriptor; ++ ++ descriptor.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; ++ descriptor.MSIxIndex = _base_get_msix_index(ioc); ++ descriptor.SMID = cpu_to_le16(smid); ++ ++ writel(cpu_to_le32(*request), &ioc->chip->AtomicRequestDescriptorPost); ++} ++ ++/** + * _base_display_OEMs_branding - Display branding string + * @ioc: per adapter object + * +@@ -4058,7 +4147,7 @@ mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc, + mpi_request->Operation == MPI2_SAS_OP_PHY_LINK_RESET) + ioc->ioc_link_reset_in_progress = 1; + init_completion(&ioc->base_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->base_cmds.done, + msecs_to_jiffies(10000)); + if ((mpi_request->Operation == MPI2_SAS_OP_PHY_HARD_RESET || +@@ -4160,7 +4249,7 @@ mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc, + ioc->base_cmds.smid = smid; + memcpy(request, mpi_request, sizeof(Mpi2SepReply_t)); + init_completion(&ioc->base_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->base_cmds.done, + msecs_to_jiffies(10000)); + if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) { +@@ -4351,6 +4440,8 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) + if ((facts->IOCCapabilities & + MPI2_IOCFACTS_CAPABILITY_RDPQ_ARRAY_CAPABLE)) + ioc->rdpq_array_capable = 1; ++ if (facts->IOCCapabilities & MPI26_IOCFACTS_CAPABILITY_ATOMIC_REQ) ++ ioc->atomic_desc_capable = 1; + facts->FWVersion.Word = le32_to_cpu(mpi_reply.FWVersion.Word); + facts->IOCRequestFrameSize = + le16_to_cpu(mpi_reply.IOCRequestFrameSize); +@@ -4582,7 +4673,7 @@ _base_send_port_enable(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) + mpi_request->Function = MPI2_FUNCTION_PORT_ENABLE; + + init_completion(&ioc->port_enable_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->port_enable_cmds.done, + 300*HZ); + if (!(ioc->port_enable_cmds.status & MPT3_CMD_COMPLETE)) { +@@ -4646,7 +4737,7 @@ mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc) + memset(mpi_request, 0, sizeof(Mpi2PortEnableRequest_t)); + mpi_request->Function = MPI2_FUNCTION_PORT_ENABLE; + +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + return 0; + } + +@@ -4767,7 +4858,7 @@ _base_event_notification(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) + mpi_request->EventMasks[i] = + cpu_to_le32(ioc->event_masks[i]); + init_completion(&ioc->base_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->base_cmds.done, 30*HZ); + if (!(ioc->base_cmds.status & MPT3_CMD_COMPLETE)) { + pr_err(MPT3SAS_FMT "%s: timeout\n", +@@ -5316,9 +5407,23 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) + ioc->build_sg = &_base_build_sg_ieee; + ioc->build_zero_len_sge = &_base_build_zero_len_sge_ieee; + ioc->sge_size_ieee = sizeof(Mpi2IeeeSgeSimple64_t); ++ + break; + } + ++ if (ioc->atomic_desc_capable) { ++ ioc->put_smid_default = &_base_put_smid_default_atomic; ++ ioc->put_smid_scsi_io = &_base_put_smid_scsi_io_atomic; ++ ioc->put_smid_fast_path = &_base_put_smid_fast_path_atomic; ++ ioc->put_smid_hi_priority = &_base_put_smid_hi_priority_atomic; ++ } else { ++ ioc->put_smid_default = &_base_put_smid_default; ++ ioc->put_smid_scsi_io = &_base_put_smid_scsi_io; ++ ioc->put_smid_fast_path = &_base_put_smid_fast_path; ++ ioc->put_smid_hi_priority = &_base_put_smid_hi_priority; ++ } ++ ++ + /* + * These function pointers for other requests that don't + * the require IEEE scatter gather elements. +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index 240c360..b8c8be4 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -740,7 +740,10 @@ typedef void (*MPT_BUILD_SG)(struct MPT3SAS_ADAPTER *ioc, void *psge, + typedef void (*MPT_BUILD_ZERO_LEN_SGE)(struct MPT3SAS_ADAPTER *ioc, + void *paddr); + +- ++/* To support atomic and non atomic descriptors*/ ++typedef void (*PUT_SMID_IO_FP_HIP) (struct MPT3SAS_ADAPTER *ioc, u16 smid, ++ u16 funcdep); ++typedef void (*PUT_SMID_DEFAULT) (struct MPT3SAS_ADAPTER *ioc, u16 smid); + + /* IOC Facts and Port Facts converted from little endian to cpu */ + union mpi3_version_union { +@@ -1208,6 +1211,12 @@ struct MPT3SAS_ADAPTER { + void *device_remove_in_progress; + u16 device_remove_in_progress_sz; + u8 is_gen35_ioc; ++ u8 atomic_desc_capable; ++ PUT_SMID_IO_FP_HIP put_smid_scsi_io; ++ PUT_SMID_IO_FP_HIP put_smid_fast_path; ++ PUT_SMID_IO_FP_HIP put_smid_hi_priority; ++ PUT_SMID_DEFAULT put_smid_default; ++ + }; + + typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, +@@ -1253,13 +1262,6 @@ u16 mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx, + + u16 mpt3sas_base_get_smid(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx); + void mpt3sas_base_free_smid(struct MPT3SAS_ADAPTER *ioc, u16 smid); +-void mpt3sas_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid, +- u16 handle); +-void mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid, +- u16 handle); +-void mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc, +- u16 smid, u16 msix_task); +-void mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid); + void mpt3sas_base_initialize_callback_handler(void); + u8 mpt3sas_base_register_callback_handler(MPT_CALLBACK cb_func); + void mpt3sas_base_release_callback_handler(u8 cb_idx); +diff --git a/drivers/scsi/mpt3sas/mpt3sas_config.c b/drivers/scsi/mpt3sas/mpt3sas_config.c +index a6914ec..b024e14 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_config.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_config.c +@@ -385,7 +385,7 @@ _config_request(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigRequest_t + memcpy(config_request, mpi_request, sizeof(Mpi2ConfigRequest_t)); + _config_display_some_debug(ioc, smid, "config_request", NULL); + init_completion(&ioc->config_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->config_cmds.done, + timeout*HZ); + if (!(ioc->config_cmds.status & MPT3_CMD_COMPLETE)) { +diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +index a66c0c8..8273e8c 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c +@@ -813,9 +813,9 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, + data_in_dma, data_in_sz); + if (mpi_request->Function == MPI2_FUNCTION_SCSI_IO_REQUEST) +- mpt3sas_base_put_smid_scsi_io(ioc, smid, device_handle); ++ ioc->put_smid_scsi_io(ioc, smid, device_handle); + else +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + case MPI2_FUNCTION_SCSI_TASK_MGMT: +@@ -850,7 +850,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + tm_request->DevHandle)); + ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, + data_in_dma, data_in_sz); +- mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); ++ ioc->put_smid_hi_priority(ioc, smid, 0); + break; + } + case MPI2_FUNCTION_SMP_PASSTHROUGH: +@@ -881,7 +881,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + } + ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, + data_in_sz); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + case MPI2_FUNCTION_SATA_PASSTHROUGH: +@@ -896,7 +896,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + } + ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, + data_in_sz); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + case MPI2_FUNCTION_FW_DOWNLOAD: +@@ -904,7 +904,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + { + ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, + data_in_sz); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + case MPI2_FUNCTION_TOOLBOX: +@@ -919,7 +919,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, + data_in_dma, data_in_sz); + } +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + case MPI2_FUNCTION_SAS_IO_UNIT_CONTROL: +@@ -938,7 +938,7 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, + default: + ioc->build_sg_mpi(ioc, psge, data_out_dma, data_out_sz, + data_in_dma, data_in_sz); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + break; + } + +@@ -1533,7 +1533,7 @@ _ctl_diag_register_2(struct MPT3SAS_ADAPTER *ioc, + cpu_to_le32(ioc->product_specific[buffer_type][i]); + + init_completion(&ioc->ctl_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->ctl_cmds.done, + MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); + +@@ -1882,7 +1882,7 @@ mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type, + mpi_request->VP_ID = 0; + + init_completion(&ioc->ctl_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->ctl_cmds.done, + MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); + +@@ -2150,7 +2150,7 @@ _ctl_diag_read_buffer(struct MPT3SAS_ADAPTER *ioc, void __user *arg) + mpi_request->VP_ID = 0; + + init_completion(&ioc->ctl_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->ctl_cmds.done, + MPT3_IOCTL_DEFAULT_TIMEOUT*HZ); + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 0ff2ed3..0dcf826 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -2339,7 +2339,7 @@ mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel, + msix_task = scsi_lookup->msix_io; + else + msix_task = 0; +- mpt3sas_base_put_smid_hi_priority(ioc, smid, msix_task); ++ ioc->put_smid_hi_priority(ioc, smid, msix_task); + timeleft = wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); + if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) { + pr_err(MPT3SAS_FMT "%s: timeout\n", +@@ -3252,7 +3252,7 @@ _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) + mpi_request->DevHandle = cpu_to_le16(handle); + mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET; + set_bit(handle, ioc->device_remove_in_progress); +- mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); ++ ioc->put_smid_hi_priority(ioc, smid, 0); + mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); + + out: +@@ -3351,7 +3351,7 @@ _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, + mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; + mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; + mpi_request->DevHandle = mpi_request_tm->DevHandle; +- mpt3sas_base_put_smid_default(ioc, smid_sas_ctrl); ++ ioc->put_smid_default(ioc, smid_sas_ctrl); + + return _scsih_check_for_pending_tm(ioc, smid); + } +@@ -3446,7 +3446,7 @@ _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) + mpi_request->Function = MPI2_FUNCTION_SCSI_TASK_MGMT; + mpi_request->DevHandle = cpu_to_le16(handle); + mpi_request->TaskType = MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET; +- mpt3sas_base_put_smid_hi_priority(ioc, smid, 0); ++ ioc->put_smid_hi_priority(ioc, smid, 0); + } + + /** +@@ -3538,7 +3538,7 @@ _scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, u16 event, + ack_request->EventContext = event_context; + ack_request->VF_ID = 0; /* TODO */ + ack_request->VP_ID = 0; +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + } + + /** +@@ -3595,7 +3595,7 @@ _scsih_issue_delayed_sas_io_unit_ctrl(struct MPT3SAS_ADAPTER *ioc, + mpi_request->Function = MPI2_FUNCTION_SAS_IO_UNIT_CONTROL; + mpi_request->Operation = MPI2_SAS_OP_REMOVE_DEVICE; + mpi_request->DevHandle = handle; +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + } + + /** +@@ -4218,12 +4218,12 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd) + if (sas_target_priv_data->flags & MPT_TARGET_FASTPATH_IO) { + mpi_request->IoFlags = cpu_to_le16(scmd->cmd_len | + MPI25_SCSIIO_IOFLAGS_FAST_PATH); +- mpt3sas_base_put_smid_fast_path(ioc, smid, handle); ++ ioc->put_smid_fast_path(ioc, smid, handle); + } else +- mpt3sas_base_put_smid_scsi_io(ioc, smid, ++ ioc->put_smid_scsi_io(ioc, smid, + le16_to_cpu(mpi_request->DevHandle)); + } else +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + return 0; + + out: +@@ -4719,7 +4719,7 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) + memcpy(mpi_request->CDB.CDB32, scmd->cmnd, scmd->cmd_len); + mpi_request->DevHandle = + cpu_to_le16(sas_device_priv_data->sas_target->handle); +- mpt3sas_base_put_smid_scsi_io(ioc, smid, ++ ioc->put_smid_scsi_io(ioc, smid, + sas_device_priv_data->sas_target->handle); + return 0; + } +@@ -6330,7 +6330,7 @@ _scsih_ir_fastpath(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phys_disk_num) + handle, phys_disk_num)); + + init_completion(&ioc->scsih_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); + + if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { +@@ -8180,7 +8180,7 @@ _scsih_ir_shutdown(struct MPT3SAS_ADAPTER *ioc) + if (!ioc->hide_ir_msg) + pr_info(MPT3SAS_FMT "IR shutdown (sending)\n", ioc->name); + init_completion(&ioc->scsih_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); + + if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { +diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c +index a01b235..4b7c32b 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_transport.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c +@@ -393,7 +393,7 @@ _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc, + "report_manufacture - send to sas_addr(0x%016llx)\n", + ioc->name, (unsigned long long)sas_address)); + init_completion(&ioc->transport_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done, + 10*HZ); + +@@ -1197,7 +1197,7 @@ _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc, + ioc->name, (unsigned long long)phy->identify.sas_address, + phy->number)); + init_completion(&ioc->transport_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done, + 10*HZ); + +@@ -1516,7 +1516,7 @@ _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc, + ioc->name, (unsigned long long)phy->identify.sas_address, + phy->number, phy_operation)); + init_completion(&ioc->transport_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done, + 10*HZ); + +@@ -2036,7 +2036,7 @@ _transport_smp_handler(struct Scsi_Host *shost, struct sas_rphy *rphy, + "%s - sending smp request\n", ioc->name, __func__)); + + init_completion(&ioc->transport_cmds.done); +- mpt3sas_base_put_smid_default(ioc, smid); ++ ioc->put_smid_default(ioc, smid); + timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done, + 10*HZ); + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0010-scsi-megaraid_sas-Implement-the-PD-Map-support-for-S.patch b/SOURCES/centos-linux-3.10-0010-scsi-megaraid_sas-Implement-the-PD-Map-support-for-S.patch new file mode 100644 index 0000000..831b3c5 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0010-scsi-megaraid_sas-Implement-the-PD-Map-support-for-S.patch @@ -0,0 +1,211 @@ +From dffd1263c440568ca20d97ff01aea74b1f20223c Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:52 -0500 +Subject: [PATCH 10/11] scsi: megaraid_sas: Implement the PD Map support for + SAS3.5 Generic Megaraid Controllers + +Update Linux driver to use new pdTargetId field for JBOD target ID + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 105 +++++++++++++++++++++------- + drivers/scsi/megaraid/megaraid_sas_base.c | 3 + + drivers/scsi/megaraid/megaraid_sas_fusion.c | 6 ++ + drivers/scsi/megaraid/megaraid_sas_fusion.h | 3 +- + 4 files changed, 89 insertions(+), 28 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index f6ac1b2..a38dbe5 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -1317,7 +1317,55 @@ struct megasas_ctrl_info { + #endif + } adapterOperations3; + +- u8 pad[0x800-0x7EC]; ++ struct { ++#if defined(__BIG_ENDIAN_BITFIELD) ++ u8 reserved:7; ++ /* Indicates whether the CPLD image is part of ++ * the package and stored in flash ++ */ ++ u8 cpld_in_flash:1; ++#else ++ u8 cpld_in_flash:1; ++ u8 reserved:7; ++#endif ++ u8 reserved1[3]; ++ /* Null terminated string. Has the version ++ * information if cpld_in_flash = FALSE ++ */ ++ u8 userCodeDefinition[12]; ++ } cpld; /* Valid only if upgradableCPLD is TRUE */ ++ ++ struct { ++ #if defined(__BIG_ENDIAN_BITFIELD) ++ u16 reserved:8; ++ u16 fw_swaps_bbu_vpd_info:1; ++ u16 support_pd_map_target_id:1; ++ u16 support_ses_ctrl_in_multipathcfg:1; ++ u16 image_upload_supported:1; ++ u16 support_encrypted_mfc:1; ++ u16 supported_enc_algo:1; ++ u16 support_ibutton_less:1; ++ u16 ctrl_info_ext_supported:1; ++ #else ++ ++ u16 ctrl_info_ext_supported:1; ++ u16 support_ibutton_less:1; ++ u16 supported_enc_algo:1; ++ u16 support_encrypted_mfc:1; ++ u16 image_upload_supported:1; ++ /* FW supports LUN based association and target port based */ ++ u16 support_ses_ctrl_in_multipathcfg:1; ++ /* association for the SES device connected in multipath mode */ ++ /* FW defines Jbod target Id within MR_PD_CFG_SEQ */ ++ u16 support_pd_map_target_id:1; ++ /* FW swaps relevant fields in MR_BBU_VPD_INFO_FIXED to ++ * provide the data in little endian order ++ */ ++ u16 fw_swaps_bbu_vpd_info:1; ++ u16 reserved:8; ++ #endif ++ } adapter_operations4; ++ u8 pad[0x800-0x7FE]; /* 0x7FE pad to 2K for expansion */ + } __packed; + + /* +@@ -1557,33 +1605,35 @@ union megasas_sgl_frame { + typedef union _MFI_CAPABILITIES { + struct { + #if defined(__BIG_ENDIAN_BITFIELD) +- u32 reserved:20; +- u32 support_qd_throttling:1; +- u32 support_fp_rlbypass:1; +- u32 support_vfid_in_ioframe:1; +- u32 support_ext_io_size:1; +- u32 support_ext_queue_depth:1; +- u32 security_protocol_cmds_fw:1; +- u32 support_core_affinity:1; +- u32 support_ndrive_r1_lb:1; +- u32 support_max_255lds:1; +- u32 support_fastpath_wb:1; +- u32 support_additional_msix:1; +- u32 support_fp_remote_lun:1; ++ u32 reserved:19; ++ u32 support_pd_map_target_id:1; ++ u32 support_qd_throttling:1; ++ u32 support_fp_rlbypass:1; ++ u32 support_vfid_in_ioframe:1; ++ u32 support_ext_io_size:1; ++ u32 support_ext_queue_depth:1; ++ u32 security_protocol_cmds_fw:1; ++ u32 support_core_affinity:1; ++ u32 support_ndrive_r1_lb:1; ++ u32 support_max_255lds:1; ++ u32 support_fastpath_wb:1; ++ u32 support_additional_msix:1; ++ u32 support_fp_remote_lun:1; + #else +- u32 support_fp_remote_lun:1; +- u32 support_additional_msix:1; +- u32 support_fastpath_wb:1; +- u32 support_max_255lds:1; +- u32 support_ndrive_r1_lb:1; +- u32 support_core_affinity:1; +- u32 security_protocol_cmds_fw:1; +- u32 support_ext_queue_depth:1; +- u32 support_ext_io_size:1; +- u32 support_vfid_in_ioframe:1; +- u32 support_fp_rlbypass:1; +- u32 support_qd_throttling:1; +- u32 reserved:20; ++ u32 support_fp_remote_lun:1; ++ u32 support_additional_msix:1; ++ u32 support_fastpath_wb:1; ++ u32 support_max_255lds:1; ++ u32 support_ndrive_r1_lb:1; ++ u32 support_core_affinity:1; ++ u32 security_protocol_cmds_fw:1; ++ u32 support_ext_queue_depth:1; ++ u32 support_ext_io_size:1; ++ u32 support_vfid_in_ioframe:1; ++ u32 support_fp_rlbypass:1; ++ u32 support_qd_throttling:1; ++ u32 support_pd_map_target_id:1; ++ u32 reserved:19; + #endif + } mfi_capabilities; + __le32 reg; +@@ -2052,6 +2102,7 @@ struct megasas_instance { + u32 crash_dump_drv_support; + u32 crash_dump_app_support; + u32 secure_jbod_support; ++ u32 support_morethan256jbod; /* FW support for more than 256 PD/JBOD */ + bool use_seqnum_jbod_fp; /* Added for PD sequence */ + spinlock_t crashdump_lock; + +diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c +index cab3be8..e7249f9 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_base.c ++++ b/drivers/scsi/megaraid/megaraid_sas_base.c +@@ -4609,6 +4609,7 @@ megasas_get_ctrl_info(struct megasas_instance *instance) + le32_to_cpus((u32 *)&ctrl_info->properties.OnOffProperties); + le32_to_cpus((u32 *)&ctrl_info->adapterOperations2); + le32_to_cpus((u32 *)&ctrl_info->adapterOperations3); ++ le16_to_cpus((u16 *)&ctrl_info->adapter_operations4); + + /* Update the latest Ext VD info. + * From Init path, store current firmware details. +@@ -4618,6 +4619,8 @@ megasas_get_ctrl_info(struct megasas_instance *instance) + megasas_update_ext_vd_details(instance); + instance->use_seqnum_jbod_fp = + ctrl_info->adapterOperations3.useSeqNumJbodFP; ++ instance->support_morethan256jbod = ++ ctrl_info->adapter_operations4.support_pd_map_target_id; + + /*Check whether controller is iMR or MR */ + instance->is_imr = (ctrl_info->memory_size ? 0 : 1); +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c +index 82dd2da..85f0af6 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c +@@ -858,6 +858,7 @@ megasas_ioc_init_fusion(struct megasas_instance *instance) + drv_ops->mfi_capabilities.support_ext_queue_depth = 1; + + drv_ops->mfi_capabilities.support_qd_throttling = 1; ++ drv_ops->mfi_capabilities.support_pd_map_target_id = 1; + /* Convert capability to LE32 */ + cpu_to_le32s((u32 *)&init_frame->driver_operations.mfi_capabilities); + +@@ -2244,6 +2245,11 @@ megasas_build_syspd_fusion(struct megasas_instance *instance, + /* TgtId must be incremented by 255 as jbod seq number is index + * below raid map + */ ++ /* More than 256 PD/JBOD support for Ventura */ ++ if (instance->support_morethan256jbod) ++ pRAID_Context->virtual_disk_tgt_id = ++ pd_sync->seq[pd_index].pd_target_id; ++ else + pRAID_Context->virtual_disk_tgt_id = + cpu_to_le16(device_id + (MAX_PHYSICAL_DEVICES - 1)); + pRAID_Context->config_seq_num = pd_sync->seq[pd_index].seqNum; +diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h +index f7384c1..ad68a85 100644 +--- a/drivers/scsi/megaraid/megaraid_sas_fusion.h ++++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h +@@ -1189,7 +1189,8 @@ struct MR_PD_CFG_SEQ { + u8 reserved:7; + #endif + } capability; +- u8 reserved[3]; ++ u8 reserved; ++ u16 pd_target_id; + } __packed; + + struct MR_PD_CFG_SEQ_NUM_SYNC { +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0010-scsi-mpt3sas-Fix-for-Endianness-issue.patch b/SOURCES/centos-linux-3.10-0010-scsi-mpt3sas-Fix-for-Endianness-issue.patch new file mode 100644 index 0000000..da80a74 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0010-scsi-mpt3sas-Fix-for-Endianness-issue.patch @@ -0,0 +1,67 @@ +From c73c42f25ffbb9a519ea942a9a943069abf6d6be Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:41 +0530 +Subject: [PATCH 10/11] scsi: mpt3sas: Fix for Endianness issue. + +Use le16_to_cpu only for accessing two byte data provided by controller. + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Reviewed-by: Hannes Reinecke +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +index 0dcf826..55b4472 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -5442,10 +5442,10 @@ _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, + sas_device->handle, handle); + sas_target_priv_data->handle = handle; + sas_device->handle = handle; +- if (sas_device_pg0.Flags & ++ if (le16_to_cpu(sas_device_pg0.Flags) & + MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { + sas_device->enclosure_level = +- le16_to_cpu(sas_device_pg0.EnclosureLevel); ++ sas_device_pg0.EnclosureLevel; + memcpy(&sas_device->connector_name[0], + &sas_device_pg0.ConnectorName[0], 4); + } else { +@@ -5573,9 +5573,10 @@ _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, + sas_device->fast_path = (le16_to_cpu(sas_device_pg0.Flags) & + MPI25_SAS_DEVICE0_FLAGS_FAST_PATH_CAPABLE) ? 1 : 0; + +- if (sas_device_pg0.Flags & MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { ++ if (le16_to_cpu(sas_device_pg0.Flags) ++ & MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { + sas_device->enclosure_level = +- le16_to_cpu(sas_device_pg0.EnclosureLevel); ++ sas_device_pg0.EnclosureLevel; + memcpy(&sas_device->connector_name[0], + &sas_device_pg0.ConnectorName[0], 4); + } else { +@@ -7115,7 +7116,7 @@ Mpi2SasDevicePage0_t *sas_device_pg0) + if (sas_device_pg0->Flags & + MPI2_SAS_DEVICE0_FLAGS_ENCL_LEVEL_VALID) { + sas_device->enclosure_level = +- le16_to_cpu(sas_device_pg0->EnclosureLevel); ++ sas_device_pg0->EnclosureLevel; + memcpy(&sas_device->connector_name[0], + &sas_device_pg0->ConnectorName[0], 4); + } else { +@@ -7177,6 +7178,7 @@ _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) + sas_device_pg0.SASAddress = + le64_to_cpu(sas_device_pg0.SASAddress); + sas_device_pg0.Slot = le16_to_cpu(sas_device_pg0.Slot); ++ sas_device_pg0.Flags = le16_to_cpu(sas_device_pg0.Flags); + _scsih_mark_responding_sas_device(ioc, &sas_device_pg0); + } + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0011-scsi-megaraid_sas-driver-version-upgrade.patch b/SOURCES/centos-linux-3.10-0011-scsi-megaraid_sas-driver-version-upgrade.patch new file mode 100644 index 0000000..1425953 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0011-scsi-megaraid_sas-driver-version-upgrade.patch @@ -0,0 +1,32 @@ +From 50c9c8f47e8ab6e4bc5a3a374a8b3ac5833aab1f Mon Sep 17 00:00:00 2001 +From: Sasikumar Chandrasekaran +Date: Tue, 10 Jan 2017 18:20:53 -0500 +Subject: [PATCH 11/11] scsi: megaraid_sas: driver version upgrade + +Upgrade driver version. + +Signed-off-by: Sasikumar Chandrasekaran +Reviewed-by: Tomas Henzl +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/megaraid/megaraid_sas.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h +index a38dbe5..83886a5 100644 +--- a/drivers/scsi/megaraid/megaraid_sas.h ++++ b/drivers/scsi/megaraid/megaraid_sas.h +@@ -35,8 +35,8 @@ + /* + * MegaRAID SAS Driver meta data + */ +-#define MEGASAS_VERSION "06.811.02.00-rh1" +-#define MEGASAS_RELDATE "April 12, 2016" ++#define MEGASAS_VERSION "07.700.00.00-rc1" ++#define MEGASAS_RELDATE "November 29, 2016" + + /* + * Device IDs +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-0011-scsi-mpt3sas-Bump-driver-version-as-14.101.00.00.patch b/SOURCES/centos-linux-3.10-0011-scsi-mpt3sas-Bump-driver-version-as-14.101.00.00.patch new file mode 100644 index 0000000..3616401 --- /dev/null +++ b/SOURCES/centos-linux-3.10-0011-scsi-mpt3sas-Bump-driver-version-as-14.101.00.00.patch @@ -0,0 +1,32 @@ +From 9b19a8b6bc41be91ddeb74e1ef3e484774f87a21 Mon Sep 17 00:00:00 2001 +From: Suganath Prabu Subramani +Date: Wed, 26 Oct 2016 13:34:42 +0530 +Subject: [PATCH 11/11] scsi: mpt3sas: Bump driver version as "14.101.00.00" + +Signed-off-by: Chaitra P B +Signed-off-by: Sathya Prakash +Signed-off-by: Suganath Prabu S +Signed-off-by: Martin K. Petersen +--- + drivers/scsi/mpt3sas/mpt3sas_base.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h +index b8c8be4..ab8d6eb 100644 +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -73,9 +73,9 @@ + #define MPT3SAS_DRIVER_NAME "mpt3sas" + #define MPT3SAS_AUTHOR "Avago Technologies " + #define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver" +-#define MPT3SAS_DRIVER_VERSION "14.100.00.00" ++#define MPT3SAS_DRIVER_VERSION "14.101.00.00" + #define MPT3SAS_MAJOR_VERSION 14 +-#define MPT3SAS_MINOR_VERSION 100 ++#define MPT3SAS_MINOR_VERSION 101 + #define MPT3SAS_BUILD_VERSION 0 + #define MPT3SAS_RELEASE_VERSION 00 + +-- +1.8.3.1 + diff --git a/SOURCES/centos-linux-3.10-fix-ecryptfs-error-bug7369.patch b/SOURCES/centos-linux-3.10-fix-ecryptfs-error-bug7369.patch new file mode 100644 index 0000000..b5028c9 --- /dev/null +++ b/SOURCES/centos-linux-3.10-fix-ecryptfs-error-bug7369.patch @@ -0,0 +1,31 @@ +https://bugs.centos.org/view.php?id=7369 +http://kozlex.blogspot.com/2015/05/building-ecryptfs-on-redhat-7_19.html + +To fix ecryptfs and build it in the kernel follow is the partial fix: +This is a fix that will not be proposed to upstream cause it is not +compatible with other kernels; instead it is a patch to make ecryptfs +work on Rhel7 only. + +--- a/fs/ecryptfs/main.c 2015-03-06 13:45:38.000000000 -0800 ++++ b/fs/ecryptfs/main.c 2015-07-02 14:46:37.000000000 -0700 +@@ -500,6 +500,7 @@ static struct dentry *ecryptfs_mount(str + struct path path; + uid_t check_ruid; + int rc; ++ int *s_stack_depth; + + sbi = kmem_cache_zalloc(ecryptfs_sb_info_cache, GFP_KERNEL); + if (!sbi) { +@@ -567,10 +568,10 @@ static struct dentry *ecryptfs_mount(str + s->s_maxbytes = path.dentry->d_sb->s_maxbytes; + s->s_blocksize = path.dentry->d_sb->s_blocksize; + s->s_magic = ECRYPTFS_SUPER_MAGIC; +- s->s_stack_depth = path.dentry->d_sb->s_stack_depth + 1; ++ s_stack_depth = get_s_stack_depth(path.dentry->d_sb); + + rc = -EINVAL; +- if (s->s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { ++ if ( *s_stack_depth > FILESYSTEM_MAX_STACK_DEPTH) { + pr_err("eCryptfs: maximum fs stacking depth exceeded\n"); + goto out_free; + } diff --git a/SOURCES/centos-linux-3.10-fix-em28xx-cards-bug8285.patch b/SOURCES/centos-linux-3.10-fix-em28xx-cards-bug8285.patch new file mode 100644 index 0000000..95ebc46 --- /dev/null +++ b/SOURCES/centos-linux-3.10-fix-em28xx-cards-bug8285.patch @@ -0,0 +1,25 @@ +centosplus kernel patch (bug#8285) + +Reported by armada: +DVB-T Receiver "Terratec Cinergy Hybrid T USB XS" not working + +My problem is exactly the same as described in +http://linuxtv.org/pipermail/linux-dvb/2014-May/032967.html [^] +This post also has a patch which solved the problem for me. + +The em28xx driver causes the : +em2882/3 #0: /2: dvb frontend not attached. Can't attach xc3028 + +Changing the USB_DEVICE(0x0ccd, 0x0042) from driver_info = EM2882_BOARD_TERRATEC_HYBRID_XS to EM2880_BOARD_TERRATEC_HYBRID_XS solved the problem. + +--- a/drivers/media/usb/em28xx/em28xx-cards.c 2015-01-29 15:15:53.000000000 -0800 ++++ b/drivers/media/usb/em28xx/em28xx-cards.c 2015-03-07 08:50:38.737699310 -0800 +@@ -2091,7 +2091,7 @@ struct usb_device_id em28xx_id_table[] = + { USB_DEVICE(0x0ccd, 0x005e), + .driver_info = EM2882_BOARD_TERRATEC_HYBRID_XS }, + { USB_DEVICE(0x0ccd, 0x0042), +- .driver_info = EM2882_BOARD_TERRATEC_HYBRID_XS }, ++ .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS }, + { USB_DEVICE(0x0ccd, 0x0043), + .driver_info = EM2870_BOARD_TERRATEC_XS }, + { USB_DEVICE(0x0ccd, 0x008e), /* Cinergy HTC USB XS Rev. 1 */ diff --git a/SOURCES/centos-linux-3.10-hid-non-LogiTech-remote-bug5780.patch b/SOURCES/centos-linux-3.10-hid-non-LogiTech-remote-bug5780.patch new file mode 100644 index 0000000..31ff1d5 --- /dev/null +++ b/SOURCES/centos-linux-3.10-hid-non-LogiTech-remote-bug5780.patch @@ -0,0 +1,45 @@ +CentOS-7 patch: Allow non-LogiTech remote to work with a generic wireless +keyboard reciever that sends LogiTech scancodes. + +CentOSplus bug: 0005780 +Submitted by: Alex Timm + +LIRCD and devinput driver connected to the HOLTEK USB Keyboard remote reciever, +connected on /dev/input/eventx, was not reading the scancodes that should be +found in drivers/hid/lg.c. The following patch adds the scan codes to +hid-input.c as they were in centos/centosplus 5. + +Applied by: Akemi Yagi + +--- a/drivers/hid/hid-input.c 2009-12-02 21:51:21.000000000 -0600 ++++ b/drivers/hid/hid-input.c 2012-06-20 15:20:04.000000000 -0500 +@@ -886,7 +886,28 @@ static void hidinput_configure_usage(str + goto ignore; + + case HID_UP_LOGIVENDOR: +- goto ignore; ++ set_bit(EV_REP, input->evbit); ++ switch(usage->hid & HID_USAGE) { ++ case 0x004: map_key_clear(KEY_AGAIN); break; ++ case 0x00d: map_key_clear(KEY_HOME); break; ++ case 0x024: map_key_clear(KEY_SHUFFLE); break; ++ case 0x025: map_key_clear(KEY_TV); break; ++ case 0x026: map_key_clear(KEY_MENU); break; ++ case 0x031: map_key_clear(KEY_AUDIO); break; ++ case 0x032: map_key_clear(KEY_TEXT); break; ++ case 0x033: map_key_clear(KEY_LAST); break; ++ case 0x047: map_key_clear(KEY_MP3); break; ++ case 0x048: map_key_clear(KEY_DVD); break; ++ case 0x049: map_key_clear(KEY_MEDIA); break; ++ case 0x04a: map_key_clear(KEY_VIDEO); break; ++ case 0x04b: map_key_clear(KEY_ANGLE); break; ++ case 0x04c: map_key_clear(KEY_LANGUAGE); break; ++ case 0x04d: map_key_clear(KEY_SUBTITLE); break; ++ case 0x051: map_key_clear(KEY_RED); break; ++ case 0x052: map_key_clear(KEY_CLOSE); break; ++ default: goto ignore; ++ } ++ break; + + case HID_UP_PID: + switch (usage->hid & HID_USAGE) { diff --git a/SOURCES/centos-linux-3.10-ipv6refcnt-bug12711.patch b/SOURCES/centos-linux-3.10-ipv6refcnt-bug12711.patch new file mode 100644 index 0000000..18539c9 --- /dev/null +++ b/SOURCES/centos-linux-3.10-ipv6refcnt-bug12711.patch @@ -0,0 +1,59 @@ +centosplus patch [bug#12711] + +commit 751eb6b6042a596b0080967c1a529a9fe98dac1d +Author: Wei Yongjun +Date: Mon Sep 5 16:06:31 2016 +0800 + + ipv6: addrconf: fix dev refcont leak when DAD failed + + In general, when DAD detected IPv6 duplicate address, ifp->state + will be set to INET6_IFADDR_STATE_ERRDAD and DAD is stopped by a + delayed work, the call tree should be like this: + + ndisc_recv_ns + -> addrconf_dad_failure <- missing ifp put + -> addrconf_mod_dad_work + -> schedule addrconf_dad_work() + -> addrconf_dad_stop() <- missing ifp hold before call it + + addrconf_dad_failure() called with ifp refcont holding but not put. + addrconf_dad_work() call addrconf_dad_stop() without extra holding + refcount. This will not cause any issue normally. + + But the race between addrconf_dad_failure() and addrconf_dad_work() + may cause ifp refcount leak and netdevice can not be unregister, + dmesg show the following messages: + + IPv6: eth0: IPv6 duplicate address fe80::XX:XXXX:XXXX:XX detected! + ... + unregister_netdevice: waiting for eth0 to become free. Usage count = 1 + + Cc: stable@vger.kernel.org + Fixes: c15b1ccadb32 ("ipv6: move DAD and addrconf_verify processing + to workqueue") + Signed-off-by: Wei Yongjun + Signed-off-by: David S. Miller + + Submitted-by: alfredo + Applied-by: Akemi Yagi + +diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c +index b7d5ce6..dc65579 100644 +--- a/net/ipv6/addrconf.c ++++ b/net/ipv6/addrconf.c +@@ -1656,6 +1656,7 @@ void addrconf_dad_failure(struct inet6_ifaddr *ifp) + spin_unlock_bh(&ifp->state_lock); + + addrconf_mod_dad_work(ifp, 0); ++ in6_ifa_put(ifp); + } + + /* Join to solicited addr multicast group. +@@ -3300,6 +3301,7 @@ static void addrconf_dad_work(struct work_struct *w) + addrconf_dad_begin(ifp); + goto out; + } else if (action == DAD_ABORT) { ++ in6_ifa_hold(ifp); + addrconf_dad_stop(ifp, 1); + goto out; + } diff --git a/SOURCES/centos-linux-3.10-ixgbe-force-VLNCTRL_VFE-bug12653.patch b/SOURCES/centos-linux-3.10-ixgbe-force-VLNCTRL_VFE-bug12653.patch new file mode 100644 index 0000000..97588c6 --- /dev/null +++ b/SOURCES/centos-linux-3.10-ixgbe-force-VLNCTRL_VFE-bug12653.patch @@ -0,0 +1,76 @@ +centosplus patch [bug#12653] + +commit f60439bc21e3337429838e477903214f5bd8277f + +ixgbe: Force VLNCTRL.VFE to be set in all VMDq paths +When I was adding the code for enabling VLAN promiscuous mode with SR-IOV +enabled I had inadvertently left the VLNCTRL.VFE bit unchanged as I has +assumed there was code in another path that was setting it when we enabled +SR-IOV. This wasn't the case and as a result we were just disabling VLAN +filtering for all the VFs apparently. + +Also the previous patches were always clearing CFIEN which was always set +to 0 by the hardware anyway so I am dropping the redundant bit clearing. + +Fixes: 16369564915a ("ixgbe: Add support for VLAN promiscuous with SR-IOV") +Signed-off-by: Alexander Duyck +Tested-by: Andrew Bowers +Signed-off-by: Jeff Kirsher + +Applied-by: Akemi Yagi + +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c 2016-11-16 09:52:06.000000000 -0800 ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c 2017-01-14 07:54:51.280709835 -0800 +@@ -4066,6 +4066,8 @@ static void ixgbe_vlan_promisc_enable(st + struct ixgbe_hw *hw = &adapter->hw; + u32 vlnctrl, i; + ++ vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL); ++ + switch (hw->mac.type) { + case ixgbe_mac_82599EB: + case ixgbe_mac_X540: +@@ -4078,8 +4080,7 @@ static void ixgbe_vlan_promisc_enable(st + /* fall through */ + case ixgbe_mac_82598EB: + /* legacy case, we can just disable VLAN filtering */ +- vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL); +- vlnctrl &= ~(IXGBE_VLNCTRL_VFE | IXGBE_VLNCTRL_CFIEN); ++ vlnctrl &= ~IXGBE_VLNCTRL_VFE; + IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl); + return; + } +@@ -4091,6 +4092,10 @@ static void ixgbe_vlan_promisc_enable(st + /* Set flag so we don't redo unnecessary work */ + adapter->flags2 |= IXGBE_FLAG2_VLAN_PROMISC; + ++ /* For VMDq and SR-IOV we must leave VLAN filtering enabled */ ++ vlnctrl |= IXGBE_VLNCTRL_VFE; ++ IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl); ++ + /* Add PF to all active pools */ + for (i = IXGBE_VLVF_ENTRIES; --i;) { + u32 reg_offset = IXGBE_VLVFB(i * 2 + VMDQ_P(0) / 32); +@@ -4157,6 +4162,11 @@ static void ixgbe_vlan_promisc_disable(s + struct ixgbe_hw *hw = &adapter->hw; + u32 vlnctrl, i; + ++ /* Set VLAN filtering to enabled */ ++ vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL); ++ vlnctrl |= IXGBE_VLNCTRL_VFE; ++ IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl); ++ + switch (hw->mac.type) { + case ixgbe_mac_82599EB: + case ixgbe_mac_X540: +@@ -4168,10 +4178,6 @@ static void ixgbe_vlan_promisc_disable(s + break; + /* fall through */ + case ixgbe_mac_82598EB: +- vlnctrl = IXGBE_READ_REG(hw, IXGBE_VLNCTRL); +- vlnctrl &= ~IXGBE_VLNCTRL_CFIEN; +- vlnctrl |= IXGBE_VLNCTRL_VFE; +- IXGBE_WRITE_REG(hw, IXGBE_VLNCTRL, vlnctrl); + return; + } + diff --git a/SOURCES/centos-linux-3.10-mlx5-fix-32-bit-build-error-bug13344.patch b/SOURCES/centos-linux-3.10-mlx5-fix-32-bit-build-error-bug13344.patch new file mode 100644 index 0000000..4f0ee78 --- /dev/null +++ b/SOURCES/centos-linux-3.10-mlx5-fix-32-bit-build-error-bug13344.patch @@ -0,0 +1,39 @@ +centosplus patch bug #13344 + +commit 9afd895271d91cd6ed743d22fce043f8c28b30ce +Author: Arnd Bergmann +Date: Thu Dec 8 22:57:03 2016 +0100 + + net/mlx5e: use %pad format string for dma_addr_t + + On 32-bit ARM with 64-bit dma_addr_t I get this warning about an + incorrect format string: + + In file included from /git/arm-soc/drivers/net/ethernet/mellanox/mlx5/core/alloc.c:42:0: + drivers/net/ethernet/mellanox/mlx5/core/alloc.c: In function ‘mlx5_frag_buf_alloc_node’: + drivers/net/ethernet/mellanox/mlx5/core/alloc.c:134:12: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] + + We have the special %pad format for printing dma_addr_t, so use that + to print the correct address and avoid the warning. + + Fixes: 1c1b522808a1 ("net/mlx5e: Implement Fragmented Work Queue (WQ)") + Signed-off-by: Arnd Bergmann + Signed-off-by: David S. Miller + + Applied-by: Akemi Yagi + +diff --git a/drivers/net/ethernet/mellanox/mlx5/core/alloc.c b/drivers/net/ethernet/mellanox/mlx5/core/alloc.c +index 44791de..66bd213 100644 +--- a/drivers/net/ethernet/mellanox/mlx5/core/alloc.c ++++ b/drivers/net/ethernet/mellanox/mlx5/core/alloc.c +@@ -130,8 +130,8 @@ int mlx5_frag_buf_alloc_node(struct mlx5_core_dev *dev, int size, + if (frag->map & ((1 << buf->page_shift) - 1)) { + dma_free_coherent(&dev->pdev->dev, frag_sz, + buf->frags[i].buf, buf->frags[i].map); +- mlx5_core_warn(dev, "unexpected map alignment: 0x%p, page_shift=%d\n", +- (void *)frag->map, buf->page_shift); ++ mlx5_core_warn(dev, "unexpected map alignment: %pad, page_shift=%d\n", ++ &frag->map, buf->page_shift); + goto err_free_buf; + } + size -= frag_sz; diff --git a/SOURCES/centos-linux-3.10-neigh-do-not-modify-unlinked-entris-bug13241.patch b/SOURCES/centos-linux-3.10-neigh-do-not-modify-unlinked-entris-bug13241.patch new file mode 100644 index 0000000..c913dd5 --- /dev/null +++ b/SOURCES/centos-linux-3.10-neigh-do-not-modify-unlinked-entris-bug13241.patch @@ -0,0 +1,80 @@ +centosplus patch [bug #13241] + +commit 2c51a97f76d20ebf1f50fef908b986cb051fdff9 +Author: Julian Anastasov +Date: Tue Jun 16 22:56:39 2015 +0300 + + neigh: do not modify unlinked entries + + The lockless lookups can return entry that is unlinked. + Sometimes they get reference before last neigh_cleanup_and_release, + sometimes they do not need reference. Later, any + modification attempts may result in the following problems: + + 1. entry is not destroyed immediately because neigh_update + can start the timer for dead entry, eg. on change to NUD_REACHABLE + state. As result, entry lives for some time but is invisible + and out of control. + + 2. __neigh_event_send can run in parallel with neigh_destroy + while refcnt=0 but if timer is started and expired refcnt can + reach 0 for second time leading to second neigh_destroy and + possible crash. + + Thanks to Eric Dumazet and Ying Xue for their work and analyze + on the __neigh_event_send change. + + Fixes: 767e97e1e0db ("neigh: RCU conversion of struct neighbour") + Fixes: a263b3093641 ("ipv4: Make neigh lookups directly in output packet path.") + Fixes: 6fd6ce2056de ("ipv6: Do not depend on rt->n in ip6_finish_output2().") + Cc: Eric Dumazet + Cc: Ying Xue + Signed-off-by: Julian Anastasov + Acked-by: Eric Dumazet + Signed-off-by: David S. Miller + + Applied-by: Akemi Yagi + +--- a/net/core/neighbour.c 2017-04-21 23:17:16.000000000 -0700 ++++ b/net/core/neighbour.c 2017-06-14 10:32:06.663195962 -0700 +@@ -973,6 +973,8 @@ int __neigh_event_send(struct neighbour + rc = 0; + if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE)) + goto out_unlock_bh; ++ if (neigh->dead) ++ goto out_dead; + + if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) { + if (NEIGH_VAR(neigh->parms, MCAST_PROBES) + +@@ -1029,6 +1031,13 @@ out_unlock_bh: + write_unlock(&neigh->lock); + local_bh_enable(); + return rc; ++ ++out_dead: ++ if (neigh->nud_state & NUD_STALE) ++ goto out_unlock_bh; ++ write_unlock_bh(&neigh->lock); ++ kfree_skb(skb); ++ return 1; + } + EXPORT_SYMBOL(__neigh_event_send); + +@@ -1092,6 +1101,8 @@ int neigh_update(struct neighbour *neigh + if (!(flags & NEIGH_UPDATE_F_ADMIN) && + (old & (NUD_NOARP | NUD_PERMANENT))) + goto out; ++ if (neigh->dead) ++ goto out; + + if (!(new & NUD_VALID)) { + neigh_del_timer(neigh); +@@ -1241,6 +1252,8 @@ EXPORT_SYMBOL(neigh_update); + */ + void __neigh_set_probe_once(struct neighbour *neigh) + { ++ if (neigh->dead) ++ return; + neigh->updated = jiffies; + if (!(neigh->nud_state & NUD_FAILED)) + return; diff --git a/SOURCES/centos-linux-3.10-reiserfs-fix-redefine-error.patch b/SOURCES/centos-linux-3.10-reiserfs-fix-redefine-error.patch new file mode 100644 index 0000000..5a61e68 --- /dev/null +++ b/SOURCES/centos-linux-3.10-reiserfs-fix-redefine-error.patch @@ -0,0 +1,25 @@ +centosplus patch + +Building reiserfs.ko under EL7.1 produces error: + +In file included from fs/reiserfs/bitmap.c:7:0: +fs/reiserfs/reiserfs.h:1957:0: error: "U32_MAX" redefined [-Werror] + #define U32_MAX (~(__u32)0) + +Solution: + +In EL7.1 kernels (>= 210), U32_MAX is defined in include/linux/kernel.h +This define now needs to be deleted from reiserfs.h + +Applied-by: Akemi Yagi + +--- a/fs/reiserfs/reiserfs.h 2014-11-24 14:38:58.000000000 -0800 ++++ b/fs/reiserfs/reiserfs.h 2015-01-12 15:34:40.187297040 -0800 +@@ -1954,7 +1954,6 @@ struct treepath var = {.path_length = IL + #define MAX_US_INT 0xffff + + // reiserfs version 2 has max offset 60 bits. Version 1 - 32 bit offset +-#define U32_MAX (~(__u32)0) + + static inline loff_t max_reiserfs_offset(struct inode *inode) + { diff --git a/SOURCES/centos-linux-3.10-scsi-storvsc-fix-bug12841.patch b/SOURCES/centos-linux-3.10-scsi-storvsc-fix-bug12841.patch new file mode 100644 index 0000000..80bca4f --- /dev/null +++ b/SOURCES/centos-linux-3.10-scsi-storvsc-fix-bug12841.patch @@ -0,0 +1,35 @@ +centosplus kernel patch [bug#12841] + +commit b0120d9906253570f593daf82016a5331bbee2b8 +Author: Cathy Avery +Date: Wed Nov 23 08:46:33 2016 -0500 + + scsi: storvsc: Payload buffer incorrectly sized for 32 bit kernels. + + On a 32 bit kernel sizeof(void *) is not 64 bits as hv_mpb_array + requires. Also the buffer needs to be cleared or the upper bytes will + contain junk. + + Suggested-by: Vitaly Kuznetsov + Signed-off-by: Cathy Avery + Reviewed-by: K. Y. Srinivasan + Signed-off-by: Martin K. Petersen + + Applied-by: Akemi Yagi + +diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c +index 8ccfc9e..05526b7 100644 +--- a/drivers/scsi/storvsc_drv.c ++++ b/drivers/scsi/storvsc_drv.c +@@ -1495,9 +1495,9 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd) + if (sg_count) { + if (sg_count > MAX_PAGE_BUFFER_COUNT) { + +- payload_sz = (sg_count * sizeof(void *) + ++ payload_sz = (sg_count * sizeof(u64) + + sizeof(struct vmbus_packet_mpb_array)); +- payload = kmalloc(payload_sz, GFP_ATOMIC); ++ payload = kzalloc(payload_sz, GFP_ATOMIC); + if (!payload) + return SCSI_MLQUEUE_DEVICE_BUSY; + } diff --git a/SOURCES/centos-linux-3.10-support-MacBookPro-bug10447.patch b/SOURCES/centos-linux-3.10-support-MacBookPro-bug10447.patch new file mode 100644 index 0000000..4081205 --- /dev/null +++ b/SOURCES/centos-linux-3.10-support-MacBookPro-bug10447.patch @@ -0,0 +1,466 @@ +centosplus patch (bug#10447) +support for touchpad and fn key support for MacBookPro 12,1 + +https://kernel.googlesource.com/pub/scm/linux/kernel/git/groeck/linux-staging/+/dbe08116b87cdc2217f11a78b5b70e29068b7efd%5E1..dbe08116b87cdc2217f11a78b5b70e29068b7efd/ + +Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input + +Pull input fixes from Dmitry Torokhov: + "The main change is support for keyboards and touchpads found in 2015 + editions of Macbooks" + +* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: + Revert "Input: zforce - don't overwrite the stack" + Input: bcm5974 - add support for the 2015 Macbook Pro + HID: apple: Add support for the 2015 Macbook Pro + Input: bcm5974 - prepare for a new trackpad generation + Input: synaptics - dump ext10 capabilities as well + +Applied-by Akemi Yagi + +--- a/drivers/hid/hid-apple.c 2016-01-23 00:53:07.000000000 -0800 ++++ b/drivers/hid/hid-apple.c 2016-03-08 12:41:27.147368677 -0800 +@@ -552,6 +552,12 @@ static const struct hid_device_id apple_ + .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS), + .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI), ++ .driver_data = APPLE_HAS_FN }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO), ++ .driver_data = APPLE_HAS_FN | APPLE_ISO_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS), ++ .driver_data = APPLE_HAS_FN | APPLE_RDESC_JIS }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), + .driver_data = APPLE_NUMLOCK_EMULATION | APPLE_HAS_FN }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), +--- a/drivers/hid/hid-core.c 2016-01-23 00:53:07.000000000 -0800 ++++ b/drivers/hid/hid-core.c 2016-03-08 12:45:44.846880469 -0800 +@@ -1643,6 +1643,9 @@ static const struct hid_device_id hid_ha + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, +@@ -2284,6 +2287,9 @@ static const struct hid_device_id hid_mo + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, + { } +--- a/drivers/hid/hid-ids.h 2016-01-23 00:53:07.000000000 -0800 ++++ b/drivers/hid/hid-ids.h 2016-03-08 12:48:25.532198900 -0800 +@@ -138,6 +138,9 @@ + #define USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI 0x0290 + #define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO 0x0291 + #define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS 0x0292 ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI 0x0272 ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO 0x0273 ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS 0x0274 + #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY 0x030a + #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY 0x030b + #define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240 +--- a/drivers/input/mouse/bcm5974.c 2016-01-23 00:53:07.000000000 -0800 ++++ b/drivers/input/mouse/bcm5974.c 2016-03-08 13:37:14.906154047 -0800 +@@ -2,6 +2,7 @@ + * Apple USB BCM5974 (Macbook Air and Penryn Macbook Pro) multitouch driver + * + * Copyright (C) 2008 Henrik Rydberg (rydberg@euromail.se) ++ * Copyright (C) 2015 John Horan (knasher@gmail.com) + * + * The USB initialization and package decoding was made by + * Scott Shawcroft as part of the touchd user-space driver project: +@@ -92,6 +93,10 @@ + #define USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI 0x0290 + #define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO 0x0291 + #define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS 0x0292 ++/* MacbookPro12,1 (2015) */ ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI 0x0272 ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO 0x0273 ++#define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS 0x0274 + + #define BCM5974_DEVICE(prod) { \ + .match_flags = (USB_DEVICE_ID_MATCH_DEVICE | \ +@@ -153,6 +158,10 @@ static const struct usb_device_id bcm597 + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_ISO), + BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING8_JIS), ++ /* MacbookPro12,1 */ ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_ISO), ++ BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING9_JIS), + /* Terminating entry */ + {} + }; +@@ -181,21 +190,47 @@ struct bt_data { + enum tp_type { + TYPE1, /* plain trackpad */ + TYPE2, /* button integrated in trackpad */ +- TYPE3 /* additional header fields since June 2013 */ ++ TYPE3, /* additional header fields since June 2013 */ ++ TYPE4 /* additional header field for pressure data */ + }; + + /* trackpad finger data offsets, le16-aligned */ +-#define FINGER_TYPE1 (13 * sizeof(__le16)) +-#define FINGER_TYPE2 (15 * sizeof(__le16)) +-#define FINGER_TYPE3 (19 * sizeof(__le16)) ++#define HEADER_TYPE1 (13 * sizeof(__le16)) ++#define HEADER_TYPE2 (15 * sizeof(__le16)) ++#define HEADER_TYPE3 (19 * sizeof(__le16)) ++#define HEADER_TYPE4 (23 * sizeof(__le16)) + + /* trackpad button data offsets */ ++#define BUTTON_TYPE1 0 + #define BUTTON_TYPE2 15 + #define BUTTON_TYPE3 23 ++#define BUTTON_TYPE4 31 + + /* list of device capability bits */ + #define HAS_INTEGRATED_BUTTON 1 + ++/* trackpad finger data block size */ ++#define FSIZE_TYPE1 (14 * sizeof(__le16)) ++#define FSIZE_TYPE2 (14 * sizeof(__le16)) ++#define FSIZE_TYPE3 (14 * sizeof(__le16)) ++#define FSIZE_TYPE4 (15 * sizeof(__le16)) ++ ++/* offset from header to finger struct */ ++#define DELTA_TYPE1 (0 * sizeof(__le16)) ++#define DELTA_TYPE2 (0 * sizeof(__le16)) ++#define DELTA_TYPE3 (0 * sizeof(__le16)) ++#define DELTA_TYPE4 (1 * sizeof(__le16)) ++ ++/* usb control message mode switch data */ ++#define USBMSG_TYPE1 8, 0x300, 0, 0, 0x1, 0x8 ++#define USBMSG_TYPE2 8, 0x300, 0, 0, 0x1, 0x8 ++#define USBMSG_TYPE3 8, 0x300, 0, 0, 0x1, 0x8 ++#define USBMSG_TYPE4 2, 0x302, 2, 1, 0x1, 0x0 ++ ++/* Wellspring initialization constants */ ++#define BCM5974_WELLSPRING_MODE_READ_REQUEST_ID 1 ++#define BCM5974_WELLSPRING_MODE_WRITE_REQUEST_ID 9 ++ + /* trackpad finger structure, le16-aligned */ + struct tp_finger { + __le16 origin; /* zero when switching track finger */ +@@ -208,14 +243,13 @@ struct tp_finger { + __le16 orientation; /* 16384 when point, else 15 bit angle */ + __le16 touch_major; /* touch area, major axis */ + __le16 touch_minor; /* touch area, minor axis */ +- __le16 unused[3]; /* zeros */ ++ __le16 unused[2]; /* zeros */ ++ __le16 pressure; /* pressure on forcetouch touchpad */ + __le16 multi; /* one finger: varies, more fingers: constant */ + } __attribute__((packed,aligned(2))); + + /* trackpad finger data size, empirically at least ten fingers */ + #define MAX_FINGERS 16 +-#define SIZEOF_FINGER sizeof(struct tp_finger) +-#define SIZEOF_ALL_FINGERS (MAX_FINGERS * SIZEOF_FINGER) + #define MAX_FINGER_ORIENTATION 16384 + + /* device-specific parameters */ +@@ -233,8 +267,17 @@ struct bcm5974_config { + int bt_datalen; /* data length of the button interface */ + int tp_ep; /* the endpoint of the trackpad interface */ + enum tp_type tp_type; /* type of trackpad interface */ +- int tp_offset; /* offset to trackpad finger data */ ++ int tp_header; /* bytes in header block */ + int tp_datalen; /* data length of the trackpad interface */ ++ int tp_button; /* offset to button data */ ++ int tp_fsize; /* bytes in single finger block */ ++ int tp_delta; /* offset from header to finger struct */ ++ int um_size; /* usb control message length */ ++ int um_req_val; /* usb control message value */ ++ int um_req_idx; /* usb control message index */ ++ int um_switch_idx; /* usb control message mode switch index */ ++ int um_switch_on; /* usb control message mode switch on */ ++ int um_switch_off; /* usb control message mode switch off */ + struct bcm5974_param p; /* finger pressure limits */ + struct bcm5974_param w; /* finger width limits */ + struct bcm5974_param x; /* horizontal limits */ +@@ -260,6 +303,24 @@ struct bcm5974 { + int slots[MAX_FINGERS]; /* slot assignments */ + }; + ++/* trackpad finger block data, le16-aligned */ ++static const struct tp_finger *get_tp_finger(const struct bcm5974 *dev, int i) ++{ ++ const struct bcm5974_config *c = &dev->cfg; ++ u8 *f_base = dev->tp_data + c->tp_header + c->tp_delta; ++ ++ return (const struct tp_finger *)(f_base + i * c->tp_fsize); ++} ++ ++#define DATAFORMAT(type) \ ++ type, \ ++ HEADER_##type, \ ++ HEADER_##type + (MAX_FINGERS) * (FSIZE_##type), \ ++ BUTTON_##type, \ ++ FSIZE_##type, \ ++ DELTA_##type, \ ++ USBMSG_##type ++ + /* logical signal quality */ + #define SN_PRESSURE 45 /* pressure signal-to-noise ratio */ + #define SN_WIDTH 25 /* width signal-to-noise ratio */ +@@ -274,7 +335,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING_JIS, + 0, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE1, FINGER_TYPE1, FINGER_TYPE1 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE1), + { SN_PRESSURE, 0, 256 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4824, 5342 }, +@@ -287,7 +348,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING2_JIS, + 0, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE1, FINGER_TYPE1, FINGER_TYPE1 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE1), + { SN_PRESSURE, 0, 256 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4824, 4824 }, +@@ -300,7 +361,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING3_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4460, 5166 }, +@@ -313,7 +374,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING4_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4620, 5140 }, +@@ -326,7 +387,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4616, 5112 }, +@@ -339,7 +400,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING5_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4415, 5050 }, +@@ -352,7 +413,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING6_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4620, 5140 }, +@@ -365,7 +426,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4750, 5280 }, +@@ -378,7 +439,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4620, 5140 }, +@@ -391,7 +452,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING7_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4750, 5280 }, +@@ -404,7 +465,7 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS, + HAS_INTEGRATED_BUTTON, + 0x84, sizeof(struct bt_data), +- 0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS, ++ 0x81, DATAFORMAT(TYPE2), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4750, 5280 }, +@@ -417,13 +478,26 @@ static const struct bcm5974_config bcm59 + USB_DEVICE_ID_APPLE_WELLSPRING8_JIS, + HAS_INTEGRATED_BUTTON, + 0, sizeof(struct bt_data), +- 0x83, TYPE3, FINGER_TYPE3, FINGER_TYPE3 + SIZEOF_ALL_FINGERS, ++ 0x83, DATAFORMAT(TYPE3), + { SN_PRESSURE, 0, 300 }, + { SN_WIDTH, 0, 2048 }, + { SN_COORD, -4620, 5140 }, + { SN_COORD, -150, 6600 }, + { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION } + }, ++ { ++ USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI, ++ USB_DEVICE_ID_APPLE_WELLSPRING9_ISO, ++ USB_DEVICE_ID_APPLE_WELLSPRING9_JIS, ++ HAS_INTEGRATED_BUTTON, ++ 0, sizeof(struct bt_data), ++ 0x83, DATAFORMAT(TYPE4), ++ { SN_PRESSURE, 0, 300 }, ++ { SN_WIDTH, 0, 2048 }, ++ { SN_COORD, -4828, 5345 }, ++ { SN_COORD, -203, 6803 }, ++ { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION } ++ }, + {} + }; + +@@ -550,19 +624,18 @@ static int report_tp_state(struct bcm597 + struct input_dev *input = dev->input; + int raw_n, i, n = 0; + +- if (size < c->tp_offset || (size - c->tp_offset) % SIZEOF_FINGER != 0) ++ if (size < c->tp_header || (size - c->tp_header) % c->tp_fsize != 0) + return -EIO; + +- /* finger data, le16-aligned */ +- f = (const struct tp_finger *)(dev->tp_data + c->tp_offset); +- raw_n = (size - c->tp_offset) / SIZEOF_FINGER; ++ raw_n = (size - c->tp_header) / c->tp_fsize; + + for (i = 0; i < raw_n; i++) { +- if (raw2int(f[i].touch_major) == 0) ++ f = get_tp_finger(dev, i); ++ if (raw2int(f->touch_major) == 0) + continue; +- dev->pos[n].x = raw2int(f[i].abs_x); +- dev->pos[n].y = c->y.min + c->y.max - raw2int(f[i].abs_y); +- dev->index[n++] = &f[i]; ++ dev->pos[n].x = raw2int(f->abs_x); ++ dev->pos[n].y = c->y.min + c->y.max - raw2int(f->abs_y); ++ dev->index[n++] = f; + } + + input_mt_assign_slots(input, dev->slots, dev->pos, n); +@@ -573,32 +646,22 @@ static int report_tp_state(struct bcm597 + + input_mt_sync_frame(input); + +- report_synaptics_data(input, c, f, raw_n); ++ report_synaptics_data(input, c, get_tp_finger(dev, 0), raw_n); + +- /* type 2 reports button events via ibt only */ +- if (c->tp_type == TYPE2) { +- int ibt = raw2int(dev->tp_data[BUTTON_TYPE2]); ++ /* later types report button events via integrated button only */ ++ if (c->caps & HAS_INTEGRATED_BUTTON) { ++ int ibt = raw2int(dev->tp_data[c->tp_button]); + input_report_key(input, BTN_LEFT, ibt); + } + +- if (c->tp_type == TYPE3) +- input_report_key(input, BTN_LEFT, dev->tp_data[BUTTON_TYPE3]); +- + input_sync(input); + + return 0; + } + +-/* Wellspring initialization constants */ +-#define BCM5974_WELLSPRING_MODE_READ_REQUEST_ID 1 +-#define BCM5974_WELLSPRING_MODE_WRITE_REQUEST_ID 9 +-#define BCM5974_WELLSPRING_MODE_REQUEST_VALUE 0x300 +-#define BCM5974_WELLSPRING_MODE_REQUEST_INDEX 0 +-#define BCM5974_WELLSPRING_MODE_VENDOR_VALUE 0x01 +-#define BCM5974_WELLSPRING_MODE_NORMAL_VALUE 0x08 +- + static int bcm5974_wellspring_mode(struct bcm5974 *dev, bool on) + { ++ const struct bcm5974_config *c = &dev->cfg; + int retval = 0, size; + char *data; + +@@ -606,7 +669,7 @@ static int bcm5974_wellspring_mode(struc + if (dev->cfg.tp_type == TYPE3) + return 0; + +- data = kmalloc(8, GFP_KERNEL); ++ data = kmalloc(c->um_size, GFP_KERNEL); + if (!data) { + dev_err(&dev->intf->dev, "out of memory\n"); + retval = -ENOMEM; +@@ -617,28 +680,24 @@ static int bcm5974_wellspring_mode(struc + size = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), + BCM5974_WELLSPRING_MODE_READ_REQUEST_ID, + USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, +- BCM5974_WELLSPRING_MODE_REQUEST_VALUE, +- BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); ++ c->um_req_val, c->um_req_idx, data, c->um_size, 5000); + +- if (size != 8) { ++ if (size != c->um_size) { + dev_err(&dev->intf->dev, "could not read from device\n"); + retval = -EIO; + goto out; + } + + /* apply the mode switch */ +- data[0] = on ? +- BCM5974_WELLSPRING_MODE_VENDOR_VALUE : +- BCM5974_WELLSPRING_MODE_NORMAL_VALUE; ++ data[c->um_switch_idx] = on ? c->um_switch_on : c->um_switch_off; + + /* write configuration */ + size = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), + BCM5974_WELLSPRING_MODE_WRITE_REQUEST_ID, + USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, +- BCM5974_WELLSPRING_MODE_REQUEST_VALUE, +- BCM5974_WELLSPRING_MODE_REQUEST_INDEX, data, 8, 5000); ++ c->um_req_val, c->um_req_idx, data, c->um_size, 5000); + +- if (size != 8) { ++ if (size != c->um_size) { + dev_err(&dev->intf->dev, "could not write to device\n"); + retval = -EIO; + goto out; +--- a/drivers/input/mouse/synaptics.c 2016-01-23 00:53:07.000000000 -0800 ++++ b/drivers/input/mouse/synaptics.c 2016-03-08 13:50:00.835861449 -0800 +@@ -1724,12 +1724,12 @@ static int __synaptics_init(struct psmou + priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS; + + psmouse_info(psmouse, +- "Touchpad model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx, board id: %lu, fw id: %lu\n", ++ "Touchpad model: %ld, fw: %ld.%ld, id: %#lx, caps: %#lx/%#lx/%#lx/%#lx, board id: %lu, fw id: %lu\n", + SYN_ID_MODEL(priv->identity), + SYN_ID_MAJOR(priv->identity), SYN_ID_MINOR(priv->identity), + priv->model_id, + priv->capabilities, priv->ext_cap, priv->ext_cap_0c, +- priv->board_id, priv->firmware_id); ++ priv->ext_cap_10, priv->board_id, priv->firmware_id); + + set_input_params(psmouse, priv); + diff --git a/SOURCES/centos-linux-3.10-x86-perf-uncore-Avoid-kernel-panic-on-missing-topolo-bug12818.patch b/SOURCES/centos-linux-3.10-x86-perf-uncore-Avoid-kernel-panic-on-missing-topolo-bug12818.patch new file mode 100644 index 0000000..4cc9105 --- /dev/null +++ b/SOURCES/centos-linux-3.10-x86-perf-uncore-Avoid-kernel-panic-on-missing-topolo-bug12818.patch @@ -0,0 +1,44 @@ +centosplus kernel patch [bug#12818] + +From ac68351410df683a149e7eea09df178884cf2419 Mon Sep 17 00:00:00 2001 +From: Marcus Sundberg +Date: Mon, 13 Feb 2017 22:57:11 +0100 +Subject: [PATCH] [x86] perf: uncore: Avoid kernel panic on missing topology + +The uncore code is heavily dependent on the CPU topology mapping code, +so if we do not even have a working topology for the boot CPU we just +give up. +This happens for example on HPE DL360 Gen9 servers with x2APIC enabled +in the firmware settings, where the kernel only finds a single core. +--- + arch/x86/events/intel/uncore.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c +index 77ec6c0..88d79f6 100644 +--- a/arch/x86/events/intel/uncore.c ++++ b/arch/x86/events/intel/uncore.c +@@ -1394,6 +1394,20 @@ static int __init intel_uncore_init(void) + if (is_kdump_kernel()) + return -ENODEV; + ++ /* Sanity check - do not even try to proceed if we have no ++ working topology mapping for the boot CPU. */ ++ if (rh_boot_cpu_data.logical_proc_id < 0 || ++ topology_phys_to_logical_pkg(boot_cpu_data.phys_proc_id) < 0) { ++ printk(KERN_ERR ++ "no mapping between physical and logical CPU, " ++ "boot CPU phys: %d, logical: %d/%d\n", ++ (int)boot_cpu_data.phys_proc_id, ++ (int)rh_boot_cpu_data.logical_proc_id, ++ (int)topology_phys_to_logical_pkg( ++ boot_cpu_data.phys_proc_id)); ++ return -ENODEV; ++ } ++ + max_packages = topology_max_packages(); + + pret = uncore_pci_init(); +-- +2.5.0 + diff --git a/SOURCES/clear-32bit-Werror-warnings.patch b/SOURCES/clear-32bit-Werror-warnings.patch new file mode 100644 index 0000000..a8b6583 --- /dev/null +++ b/SOURCES/clear-32bit-Werror-warnings.patch @@ -0,0 +1,27 @@ +From 87a5a3683110ec3d30d95036c57f5cfa330ca9d9 Mon Sep 17 00:00:00 2001 +From: Marcus Sundberg +Date: Fri, 16 Dec 2016 22:53:51 +0100 +Subject: [PATCH] gpt: Use correct type for gpt->gdp. + +It should be a pointer to gte_t, to avoid warnings when +CONFIG_HIGHMEM64G is enabled. +--- + include/linux/gpt.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/linux/gpt.h b/include/linux/gpt.h +index 134e02b..56715f1 100644 +--- a/include/linux/gpt.h ++++ b/include/linux/gpt.h +@@ -45,7 +45,7 @@ + struct gpt { + unsigned long start; + unsigned long end; +- unsigned long *gdp; ++ gte_t *gdp; + atomic_t refcount; + spinlock_t lock; + uint8_t nlevels; +-- +1.8.3.1 + diff --git a/SOURCES/cpufreq.patch b/SOURCES/cpufreq.patch new file mode 100644 index 0000000..beabf01 --- /dev/null +++ b/SOURCES/cpufreq.patch @@ -0,0 +1,394 @@ +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/cpufreq-nforce2.c linux-3.10.0-229.el7/drivers/cpufreq/cpufreq-nforce2.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/cpufreq-nforce2.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/cpufreq-nforce2.c 2015-03-09 09:22:18.376023945 -0400 +@@ -270,7 +270,7 @@ + pr_debug("Old CPU frequency %d kHz, new %d kHz\n", + freqs.old, freqs.new); + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + /* Disable IRQs */ + /* local_irq_save(flags); */ +@@ -285,7 +285,7 @@ + /* Enable IRQs */ + /* local_irq_restore(flags); */ + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + return 0; + } +Binary files linux-3.10.0-229.el7.original/drivers/cpufreq/.cpufreq-nforce2.c.swp and linux-3.10.0-229.el7/drivers/cpufreq/.cpufreq-nforce2.c.swp differ +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/exynos5440-cpufreq.c linux-3.10.0-229.el7/drivers/cpufreq/exynos5440-cpufreq.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/exynos5440-cpufreq.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/exynos5440-cpufreq.c 2015-03-09 09:22:18.377023945 -0400 +@@ -238,7 +238,7 @@ + freqs.old = dvfs_info->cur_frequency; + freqs.new = freq_table[index].frequency; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + /* Set the target frequency in all C0_3_PSTATE register */ + for_each_cpu(i, policy->cpus) { +@@ -279,7 +279,7 @@ + dev_crit(dvfs_info->dev, "New frequency out of range\n"); + freqs.new = dvfs_info->cur_frequency; + } +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + cpufreq_cpu_put(policy); + mutex_unlock(&cpufreq_lock); +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/gx-suspmod.c linux-3.10.0-229.el7/drivers/cpufreq/gx-suspmod.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/gx-suspmod.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/gx-suspmod.c 2015-03-09 09:22:18.377023945 -0400 +@@ -265,7 +265,7 @@ + + freqs.new = new_khz; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + local_irq_save(flags); + + if (new_khz != stock_freq) { +@@ -314,7 +314,7 @@ + + gx_params->pci_suscfg = suscfg; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + pr_debug("suspend modulation w/ duration of ON:%d us, OFF:%d us\n", + gx_params->on_duration * 32, gx_params->off_duration * 32); +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/integrator-cpufreq.c linux-3.10.0-229.el7/drivers/cpufreq/integrator-cpufreq.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/integrator-cpufreq.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/integrator-cpufreq.c 2015-03-09 09:22:18.377023945 -0400 +@@ -121,7 +121,7 @@ + return 0; + } + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + cm_osc = __raw_readl(CM_OSC); + +@@ -142,7 +142,7 @@ + */ + set_cpus_allowed(current, cpus_allowed); + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + return 0; + } +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/longhaul.c linux-3.10.0-229.el7/drivers/cpufreq/longhaul.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/longhaul.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/longhaul.c 2015-03-09 09:22:18.377023945 -0400 +@@ -269,7 +269,7 @@ + freqs.old = calc_speed(longhaul_get_cpu_mult()); + freqs.new = speed; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + pr_debug("Setting to FSB:%dMHz Mult:%d.%dx (%s)\n", + fsb, mult/10, mult%10, print_speed(speed/1000)); +@@ -386,7 +386,7 @@ + } + } + /* Report true CPU frequency */ +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + if (!bm_timeout) + printk(KERN_INFO PFX "Warning: Timeout while waiting for " +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/powernow-k6.c linux-3.10.0-229.el7/drivers/cpufreq/powernow-k6.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/powernow-k6.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/powernow-k6.c 2015-03-09 09:23:09.182024898 -0400 +@@ -83,7 +83,7 @@ + freqs.old = busfreq * powernow_k6_get_cpu_multiplier(); + freqs.new = busfreq * clock_ratio[best_i].driver_data; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + /* we now need to transform best_i to the BVC format, see AMD#23446 */ + +@@ -98,7 +98,7 @@ + msrval = POWERNOW_IOPORT + 0x0; + wrmsr(MSR_K6_EPMR, msrval, 0); /* disable it again */ + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + return; + } +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/powernow-k7.c linux-3.10.0-229.el7/drivers/cpufreq/powernow-k7.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/powernow-k7.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/powernow-k7.c 2015-03-09 09:23:52.126025704 -0400 +@@ -269,7 +269,7 @@ + + freqs.new = powernow_table[index].frequency; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + /* Now do the magic poking into the MSRs. */ + +@@ -290,7 +290,7 @@ + if (have_a0 == 1) + local_irq_enable(); + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + } + + +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/sh-cpufreq.c linux-3.10.0-229.el7/drivers/cpufreq/sh-cpufreq.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/sh-cpufreq.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/sh-cpufreq.c 2015-03-09 09:22:18.378023945 -0400 +@@ -68,10 +68,10 @@ + freqs.new = (freq + 500) / 1000; + freqs.flags = 0; + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + set_cpus_allowed_ptr(current, &cpus_allowed); + clk_set_rate(cpuclk, freq); +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, 0); + + dev_dbg(dev, "set frequency %lu Hz\n", freq); + +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-centrino.c linux-3.10.0-229.el7/drivers/cpufreq/speedstep-centrino.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-centrino.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/speedstep-centrino.c 2015-03-09 09:58:30.112064688 -0400 +@@ -345,7 +345,6 @@ + struct cpuinfo_x86 *cpu = &cpu_data(policy->cpu); + unsigned freq; + unsigned l, h; +- int ret; + int i; + + /* Only Intel makes Enhanced Speedstep-capable CPUs */ +@@ -402,15 +401,8 @@ + + pr_debug("centrino_cpu_init: cur=%dkHz\n", policy->cur); + +- ret = cpufreq_frequency_table_cpuinfo(policy, ++ return cpufreq_table_validate_and_show(policy, + per_cpu(centrino_model, policy->cpu)->op_points); +- if (ret) +- return (ret); +- +- cpufreq_frequency_table_get_attr( +- per_cpu(centrino_model, policy->cpu)->op_points, policy->cpu); +- +- return 0; + } + + static int centrino_cpu_exit(struct cpufreq_policy *policy) +@@ -428,19 +420,6 @@ + } + + /** +- * centrino_verify - verifies a new CPUFreq policy +- * @policy: new policy +- * +- * Limit must be within this model's frequency range at least one +- * border included. +- */ +-static int centrino_verify (struct cpufreq_policy *policy) +-{ +- return cpufreq_frequency_table_verify(policy, +- per_cpu(centrino_model, policy->cpu)->op_points); +-} +- +-/** + * centrino_setpolicy - set a new CPUFreq policy + * @policy: new policy + * @target_freq: the target frequency +@@ -561,20 +540,15 @@ + return retval; + } + +-static struct freq_attr* centrino_attr[] = { +- &cpufreq_freq_attr_scaling_available_freqs, +- NULL, +-}; +- + static struct cpufreq_driver centrino_driver = { + .name = "centrino", /* should be speedstep-centrino, + but there's a 16 char limit */ + .init = centrino_cpu_init, + .exit = centrino_cpu_exit, +- .verify = centrino_verify, ++ .verify = cpufreq_generic_frequency_table_verify, + .target = centrino_target, + .get = get_cur_freq, +- .attr = centrino_attr, ++ .attr = cpufreq_generic_attr, + }; + + /* +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-ich.c linux-3.10.0-229.el7/drivers/cpufreq/speedstep-ich.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-ich.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/speedstep-ich.c 2015-03-09 09:58:30.113064688 -0400 +@@ -289,18 +289,6 @@ + } + + +-/** +- * speedstep_verify - verifies a new CPUFreq policy +- * @policy: new policy +- * +- * Limit must be within speedstep_low_freq and speedstep_high_freq, with +- * at least one border included. +- */ +-static int speedstep_verify(struct cpufreq_policy *policy) +-{ +- return cpufreq_frequency_table_verify(policy, &speedstep_freqs[0]); +-} +- + struct get_freqs { + struct cpufreq_policy *policy; + int ret; +@@ -320,7 +308,6 @@ + + static int speedstep_cpu_init(struct cpufreq_policy *policy) + { +- int result; + unsigned int policy_cpu, speed; + struct get_freqs gf; + +@@ -349,36 +336,18 @@ + /* cpuinfo and default policy values */ + policy->cur = speed; + +- result = cpufreq_frequency_table_cpuinfo(policy, speedstep_freqs); +- if (result) +- return result; +- +- cpufreq_frequency_table_get_attr(speedstep_freqs, policy->cpu); +- +- return 0; ++ return cpufreq_table_validate_and_show(policy, speedstep_freqs); + } + + +-static int speedstep_cpu_exit(struct cpufreq_policy *policy) +-{ +- cpufreq_frequency_table_put_attr(policy->cpu); +- return 0; +-} +- +-static struct freq_attr *speedstep_attr[] = { +- &cpufreq_freq_attr_scaling_available_freqs, +- NULL, +-}; +- +- + static struct cpufreq_driver speedstep_driver = { + .name = "speedstep-ich", +- .verify = speedstep_verify, ++ .verify = cpufreq_generic_frequency_table_verify, + .target = speedstep_target, + .init = speedstep_cpu_init, +- .exit = speedstep_cpu_exit, ++ .exit = cpufreq_generic_exit, + .get = speedstep_get, +- .attr = speedstep_attr, ++ .attr = cpufreq_generic_attr, + }; + + static const struct x86_cpu_id ss_smi_ids[] = { +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-smi.c linux-3.10.0-229.el7/drivers/cpufreq/speedstep-smi.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/speedstep-smi.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/speedstep-smi.c 2015-03-09 09:58:30.113064688 -0400 +@@ -264,19 +264,6 @@ + } + + +-/** +- * speedstep_verify - verifies a new CPUFreq policy +- * @policy: new policy +- * +- * Limit must be within speedstep_low_freq and speedstep_high_freq, with +- * at least one border included. +- */ +-static int speedstep_verify(struct cpufreq_policy *policy) +-{ +- return cpufreq_frequency_table_verify(policy, &speedstep_freqs[0]); +-} +- +- + static int speedstep_cpu_init(struct cpufreq_policy *policy) + { + int result; +@@ -329,19 +316,7 @@ + policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; + policy->cur = speed; + +- result = cpufreq_frequency_table_cpuinfo(policy, speedstep_freqs); +- if (result) +- return result; +- +- cpufreq_frequency_table_get_attr(speedstep_freqs, policy->cpu); +- +- return 0; +-} +- +-static int speedstep_cpu_exit(struct cpufreq_policy *policy) +-{ +- cpufreq_frequency_table_put_attr(policy->cpu); +- return 0; ++ return cpufreq_table_validate_and_show(policy, speedstep_freqs); + } + + static unsigned int speedstep_get(unsigned int cpu) +@@ -362,20 +337,15 @@ + return result; + } + +-static struct freq_attr *speedstep_attr[] = { +- &cpufreq_freq_attr_scaling_available_freqs, +- NULL, +-}; +- + static struct cpufreq_driver speedstep_driver = { + .name = "speedstep-smi", +- .verify = speedstep_verify, ++ .verify = cpufreq_generic_frequency_table_verify, + .target = speedstep_target, + .init = speedstep_cpu_init, +- .exit = speedstep_cpu_exit, ++ .exit = cpufreq_generic_exit, + .get = speedstep_get, + .resume = speedstep_resume, +- .attr = speedstep_attr, ++ .attr = cpufreq_generic_attr, + }; + + static const struct x86_cpu_id ss_smi_ids[] = { +diff -urN linux-3.10.0-229.el7.original/drivers/cpufreq/unicore2-cpufreq.c linux-3.10.0-229.el7/drivers/cpufreq/unicore2-cpufreq.c +--- linux-3.10.0-229.el7.original/drivers/cpufreq/unicore2-cpufreq.c 2015-01-29 18:15:53.000000000 -0500 ++++ linux-3.10.0-229.el7/drivers/cpufreq/unicore2-cpufreq.c 2015-03-09 09:24:33.053026472 -0400 +@@ -50,14 +50,14 @@ + struct cpufreq_freqs freqs; + struct clk *mclk = clk_get(NULL, "MAIN_CLK"); + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); ++ cpufreq_freq_transition_begin(policy, &freqs); + + if (!clk_set_rate(mclk, target_freq * 1000)) { + freqs.old = cur; + freqs.new = target_freq; + } + +- cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); ++ cpufreq_freq_transition_end(policy, &freqs, ret); + + return 0; + } diff --git a/SOURCES/i386-audit-stop-scri-stack-frame.patch b/SOURCES/i386-audit-stop-scri-stack-frame.patch new file mode 100644 index 0000000..48393aa --- /dev/null +++ b/SOURCES/i386-audit-stop-scri-stack-frame.patch @@ -0,0 +1,31 @@ +Note: this bug was taken from Commit-ID: 26c2d2b39128adba276d140eefa2745591b88536 +and corrected for white space differences between the RHEL-7.1 3.10.0-229 upstream +kernel. +--- +diff -uNrp a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S +--- a/arch/x86/kernel/entry_32.S 2015-05-17 07:39:14.371778177 -0500 ++++ b/arch/x86/kernel/entry_32.S 2015-05-17 07:36:13.654610869 -0500 +@@ -457,15 +457,14 @@ sysenter_exit: + sysenter_audit: + testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%ebp) + jnz syscall_trace_entry +- addl $4,%esp +- CFI_ADJUST_CFA_OFFSET -4 +- movl %esi,4(%esp) /* 5th arg: 4th syscall arg */ +- movl %edx,(%esp) /* 4th arg: 3rd syscall arg */ +- /* %ecx already in %ecx 3rd arg: 2nd syscall arg */ +- movl %ebx,%edx /* 2nd arg: 1st syscall arg */ +- /* %eax already in %eax 1st arg: syscall number */ ++ /* movl PT_EAX(%esp), %eax already set, syscall number: 1st arg to audit */ ++ movl PT_EBX(%esp), %edx /* ebx/a0: 2nd arg to audit */ ++ /* movl PT_ECX(%esp), %ecx already set, a1: 3nd arg to audit */ ++ pushl_cfi PT_ESI(%esp) /* a3: 5th arg */ ++ pushl_cfi PT_EDX+4(%esp) /* a2: 4th arg */ + call __audit_syscall_entry +- pushl_cfi %ebx ++ popl_cfi %ecx /* get that remapped edx off the stack */ ++ popl_cfi %ecx /* get that remapped esi off the stack */ + movl PT_EAX(%esp),%eax /* reload syscall number */ + jmp sysenter_do_call + +--- diff --git a/SOURCES/kernel-3.10.0-i686.config b/SOURCES/kernel-3.10.0-i686.config new file mode 100644 index 0000000..ecda234 --- /dev/null +++ b/SOURCES/kernel-3.10.0-i686.config @@ -0,0 +1,5868 @@ +# x86 +# +# CONFIG_64BIT is not set +CONFIG_X86_32=y +CONFIG_X86=y +CONFIG_INSTRUCTION_DECODER=y +CONFIG_OUTPUT_FORMAT="elf32-i386" +CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig" +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_MMU=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_HAS_CPU_RELAX=y +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CPU_AUTOPROBE=y +CONFIG_HAVE_SETUP_PER_CPU_AREA=y +CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y +CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +# CONFIG_ZONE_DMA32 is not set +# CONFIG_AUDIT_ARCH is not set +CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_HAVE_INTEL_TXT=y +CONFIG_X86_INTEL_MPX=y +CONFIG_X86_32_SMP=y +CONFIG_X86_HT=y +CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx" +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_EXTABLE_SORT=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_CROSS_COMPILE="" +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_BZIP2=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_BZIP2 is not set +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +CONFIG_FHANDLE=y +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_AUDIT_WATCH=y +CONFIG_AUDIT_TREE=y +CONFIG_HAVE_GENERIC_HARDIRQS=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_IRQ_DOMAIN=y +# CONFIG_IRQ_DOMAIN_DEBUG is not set +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y +CONFIG_KTIME_SCALAR=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y +CONFIG_GENERIC_CMOS_UPDATE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_PREEMPT_RCU is not set +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_FANOUT=32 +CONFIG_RCU_FANOUT_LEAF=16 +# CONFIG_RCU_FANOUT_EXACT is not set +# CONFIG_RCU_FAST_NO_HZ is not set +# CONFIG_TREE_RCU_TRACE is not set +CONFIG_RCU_NOCB_CPU=y +CONFIG_RCU_NOCB_CPU_NONE=y +# CONFIG_RCU_NOCB_CPU_ZERO is not set +# CONFIG_RCU_NOCB_CPU_ALL is not set +# CONFIG_BUILD_BIN2C is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=20 +CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y +CONFIG_CGROUPS=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_PAGE_COUNTER=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_MEMCG_KMEM=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_BLK_CGROUP=y +# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_UIDGID_STRICT_TYPE_CHECKS=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_MM_OWNER=y +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_HAVE_PCSPKR_PLATFORM=y +# CONFIG_EXPERT is not set +CONFIG_UID16=y +# CONFIG_SYSCTL_SYSCALL is not set +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_PCSPKR_PLATFORM=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_USERFAULTFD=y +CONFIG_PCI_QUIRKS=y +# CONFIG_EMBEDDED is not set +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +# CONFIG_COMPAT_BRK is not set +# CONFIG_SLAB is not set +CONFIG_SLUB=y +CONFIG_PROFILING=y +CONFIG_TRACEPOINTS=y +CONFIG_OPROFILE=m +CONFIG_OPROFILE_EVENT_MULTIPLEX=y +CONFIG_HAVE_OPROFILE=y +CONFIG_OPROFILE_NMI_TIMER=y +CONFIG_KPROBES=y +CONFIG_JUMP_LABEL=y +CONFIG_OPTPROBES=y +CONFIG_KPROBES_ON_FTRACE=y +CONFIG_UPROBES=y +# CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_KRETPROBES=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_KPROBES_ON_FTRACE=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_ATTRS=y +CONFIG_USE_GENERIC_SMP_HELPERS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_DMA_API_DEBUG=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y +CONFIG_HAVE_USER_RETURN_NOTIFIER=y +CONFIG_HAVE_PERF_EVENTS_NMI=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP_FILTER=y +CONFIG_HAVE_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR=y +# CONFIG_CC_STACKPROTECTOR_NONE is not set +# CONFIG_CC_STACKPROTECTOR_REGULAR is not set +CONFIG_CC_STACKPROTECTOR_STRONG=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_SOFT_DIRTY=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_BLACKLIST_KEYRING=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_SIG=y +# CONFIG_MODULE_SIG_FORCE is not set +CONFIG_MODULE_SIG_ALL=y +CONFIG_MODULE_SIG_UEFI=y +# CONFIG_MODULE_SIG_SHA1 is not set +# CONFIG_MODULE_SIG_SHA224 is not set +CONFIG_MODULE_SIG_SHA256=y +# CONFIG_MODULE_SIG_SHA384 is not set +# CONFIG_MODULE_SIG_SHA512 is not set +CONFIG_MODULE_SIG_HASH="sha256" +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBDAF=y +CONFIG_BLK_DEV_BSG=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_BLK_DEV_INTEGRITY=y +CONFIG_BLK_DEV_THROTTLING=y + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +CONFIG_OSF_PARTITION=y +CONFIG_AMIGA_PARTITION=y +# CONFIG_ATARI_PARTITION is not set +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +CONFIG_MINIX_SUBPARTITION=y +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +# CONFIG_LDM_PARTITION is not set +CONFIG_SGI_PARTITION=y +# CONFIG_ULTRIX_PARTITION is not set +CONFIG_SUN_PARTITION=y +CONFIG_KARMA_PARTITION=y +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_DEFAULT_DEADLINE=y +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="deadline" +CONFIG_PADATA=y +CONFIG_ASN1=y +CONFIG_UNINLINE_SPIN_UNLOCK=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_FREEZER=y + +# +# Processor type and features +# +CONFIG_ZONE_DMA=y +CONFIG_SMP=y +CONFIG_X86_MPPARSE=y +CONFIG_X86_BIGSMP=y +CONFIG_X86_EXTENDED_PLATFORM=y +# CONFIG_X86_GOLDFISH is not set +# CONFIG_X86_WANT_INTEL_MID is not set +# CONFIG_X86_INTEL_LPSS is not set +# CONFIG_X86_RDC321X is not set +# CONFIG_X86_32_NON_STANDARD is not set +CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y +CONFIG_X86_32_IRIS=m +CONFIG_SCHED_OMIT_FRAME_POINTER=y +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +# CONFIG_PARAVIRT_DEBUG is not set +CONFIG_PARAVIRT_SPINLOCKS=y +CONFIG_XEN=y +# CONFIG_XEN_DOM0 is not set +# CONFIG_XEN_PRIVILEGED_GUEST is not set +CONFIG_XEN_PVHVM=y +CONFIG_XEN_MAX_DOMAIN_MEMORY=64 +CONFIG_XEN_SAVE_RESTORE=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_KVM_GUEST=y +# CONFIG_KVM_DEBUG_FS is not set +# CONFIG_LGUEST_GUEST is not set +CONFIG_PARAVIRT_TIME_ACCOUNTING=y +CONFIG_PARAVIRT_CLOCK=y +CONFIG_NO_BOOTMEM=y +# CONFIG_MEMTEST is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +CONFIG_M686=y +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MELAN is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +# CONFIG_MCORE2 is not set +# CONFIG_MATOM is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_INTERNODE_CACHE_SHIFT=6 +CONFIG_X86_L1_CACHE_SHIFT=6 +# CONFIG_X86_PPRO_FENCE is not set +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMPXCHG64=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=5 +CONFIG_X86_DEBUGCTLMSR=y +CONFIG_CPU_SUP_INTEL=y +CONFIG_CPU_SUP_AMD=y +CONFIG_CPU_SUP_CENTAUR=y +CONFIG_CPU_SUP_TRANSMETA_32=y +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_DMI=y +CONFIG_SWIOTLB=y +CONFIG_IOMMU_HELPER=y +CONFIG_NR_CPUS=32 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_INTEL=y +CONFIG_X86_MCE_AMD=y +# CONFIG_X86_ANCIENT_MCE is not set +CONFIG_X86_MCE_THRESHOLD=y +CONFIG_X86_MCE_INJECT=m +CONFIG_X86_THERMAL_VECTOR=y +CONFIG_VM86=y +CONFIG_TOSHIBA=m +CONFIG_I8K=m +# CONFIG_X86_REBOOTFIXUPS is not set +CONFIG_MICROCODE=y +CONFIG_MICROCODE_INTEL=y +CONFIG_MICROCODE_AMD=y +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_X86_MSR=y +CONFIG_X86_CPUID=y +# CONFIG_NOHIGHMEM is not set +# CONFIG_HIGHMEM4G is not set +CONFIG_HIGHMEM64G=y +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_HIGHMEM=y +CONFIG_X86_PAE=y +CONFIG_ARCH_PHYS_ADDR_T_64BIT=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +# CONFIG_TRACK_DIRTY_PAGES is not set +# CONFIG_NUMA is not set +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ILLEGAL_POINTER_VALUE=0 +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_HAVE_MEMBLOCK=y +CONFIG_HAVE_MEMBLOCK_NODE_MAP=y +CONFIG_ARCH_DISCARD_MEMBLOCK=y +CONFIG_MEMORY_ISOLATION=y +# CONFIG_HAVE_BOOTMEM_INFO_NODE is not set +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_MEMORY_BALLOON=y +CONFIG_BALLOON_COMPACTION=y +CONFIG_COMPACTION=y +CONFIG_MIGRATION=y +CONFIG_HMM=y +CONFIG_HMM_MIGRATE=y +CONFIG_HMM_MIRROR=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_VIRT_TO_BUS=y +CONFIG_MMU_NOTIFIER=y +CONFIG_KSM=y +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +CONFIG_MEMORY_FAILURE=y +CONFIG_HWPOISON_INJECT=m +# CONFIG_TRANSPARENT_HUGEPAGE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +CONFIG_CLEANCACHE=y +CONFIG_FRONTSWAP=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set +CONFIG_MEM_SOFT_DIRTY=y +CONFIG_ZSWAP=y +CONFIG_ZPOOL=y +CONFIG_ZBUD=y +CONFIG_ZSMALLOC=y +# CONFIG_PGTABLE_MAPPING is not set +CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y +CONFIG_X86_PMEM_LEGACY_DEVICE=y +CONFIG_X86_PMEM_LEGACY=m +CONFIG_HIGHPTE=y +CONFIG_X86_CHECK_BIOS_CORRUPTION=y +# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set +CONFIG_X86_RESERVE_LOW=64 +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +CONFIG_MTRR_SANITIZER=y +CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1 +CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1 +CONFIG_X86_PAT=y +CONFIG_ARCH_USES_PG_UNCACHED=y +CONFIG_ARCH_RANDOM=y +CONFIG_X86_SMAP=y +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_SECURE_BOOT_SECURELEVEL=y +CONFIG_SECCOMP=y +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +CONFIG_HZ_1000=y +CONFIG_HZ=1000 +CONFIG_SCHED_HRTICK=y +CONFIG_KEXEC=y +CONFIG_KEXEC_AUTO_RESERVE=y +CONFIG_CRASH_DUMP=y +# CONFIG_KEXEC_JUMP is not set +CONFIG_PHYSICAL_START=0x400000 +CONFIG_RELOCATABLE=y +CONFIG_X86_NEED_RELOCS=y +CONFIG_PHYSICAL_ALIGN=0x400000 +CONFIG_HOTPLUG_CPU=y +CONFIG_BOOTPARAM_HOTPLUG_CPU0=y +# CONFIG_DEBUG_HOTPLUG_CPU0 is not set +# CONFIG_COMPAT_VDSO is not set +# CONFIG_CMDLINE_BOOL is not set +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y + +# +# Power management and ACPI options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_HIBERNATION=y +CONFIG_PM_STD_PARTITION="" +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM_RUNTIME=y +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_CLK=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_PROCFS=y +# CONFIG_ACPI_PROCFS_POWER is not set +CONFIG_ACPI_EC_DEBUGFS=m +# CONFIG_ACPI_PROC_EVENT is not set +CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY=y +CONFIG_ACPI_BUTTON=y +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=y +CONFIG_ACPI_DOCK=y +CONFIG_ACPI_PROCESSOR=y +CONFIG_ACPI_IPMI=m +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_PROCESSOR_AGGREGATOR=m +CONFIG_ACPI_THERMAL=y +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_PCI_SLOT=y +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=y +CONFIG_ACPI_SBS=m +CONFIG_ACPI_HED=y +CONFIG_ACPI_CUSTOM_METHOD=m +CONFIG_ACPI_BGRT=y +CONFIG_ACPI_NFIT=m +# CONFIG_ACPI_NFIT_DEBUG is not set +CONFIG_ACPI_APEI=y +CONFIG_ACPI_APEI_GHES=y +CONFIG_ACPI_APEI_PCIEAER=y +CONFIG_ACPI_APEI_MEMORY_FAILURE=y +CONFIG_ACPI_APEI_EINJ=m +# CONFIG_ACPI_APEI_ERST_DEBUG is not set +CONFIG_ACPI_EXTLOG=m +CONFIG_SFI=y +CONFIG_X86_APM_BOOT=y +CONFIG_APM=y +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +# CONFIG_APM_DO_ENABLE is not set +CONFIG_APM_CPU_IDLE=y +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_ALLOW_INTS is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=m +CONFIG_CPU_FREQ_STAT_DETAILS=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y + +# +# x86 CPU frequency scaling drivers +# +CONFIG_X86_INTEL_PSTATE=y +CONFIG_X86_PCC_CPUFREQ=m +CONFIG_X86_ACPI_CPUFREQ=m +CONFIG_X86_ACPI_CPUFREQ_CPB=y +# CONFIG_X86_POWERNOW_K6 is not set +# CONFIG_X86_POWERNOW_K7 is not set +CONFIG_X86_POWERNOW_K8=m +CONFIG_X86_AMD_FREQ_SENSITIVITY=m +# CONFIG_X86_GX_SUSPMOD is not set +# CONFIG_X86_SPEEDSTEP_CENTRINO is not set +# CONFIG_X86_SPEEDSTEP_ICH is not set +# CONFIG_X86_SPEEDSTEP_SMI is not set +CONFIG_X86_P4_CLOCKMOD=m +# CONFIG_X86_CPUFREQ_NFORCE2 is not set +CONFIG_X86_LONGRUN=y +# CONFIG_X86_LONGHAUL is not set +# CONFIG_X86_E_POWERSAVER is not set + +# +# shared options +# +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +# CONFIG_CPU_IDLE_GOV_LADDER is not set +CONFIG_CPU_IDLE_GOV_MENU=y +# CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set +CONFIG_INTEL_IDLE=y + +# +# Bus options (PCI etc.) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCI_XEN=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=y +CONFIG_PCIEAER=y +CONFIG_PCIE_ECRC=y +CONFIG_PCIEAER_INJECT=m +CONFIG_PCIEASPM=y +# CONFIG_PCIEASPM_DEBUG is not set +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +CONFIG_PCIE_PME=y +CONFIG_PCI_BUS_ADDR_T_64BIT=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set +CONFIG_PCI_STUB=y +# CONFIG_XEN_PCIDEV_FRONTEND is not set +CONFIG_HT_IRQ=y +CONFIG_PCI_ATS=y +CONFIG_PCI_IOV=y +CONFIG_PCI_PRI=y +CONFIG_PCI_PASID=y +CONFIG_PCI_IOAPIC=y +CONFIG_PCI_LABEL=y +CONFIG_ISA_DMA_API=y +# CONFIG_ISA is not set +# CONFIG_SCx200 is not set +# CONFIG_ALIX is not set +# CONFIG_NET5501 is not set +# CONFIG_GEOS is not set +CONFIG_AMD_NB=y +CONFIG_PCCARD=y +# CONFIG_PCMCIA is not set +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +CONFIG_YENTA=m +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_COMPAQ=m +# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set +CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_HOTPLUG_PCI_ACPI=y +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +# CONFIG_HOTPLUG_PCI_CPCI is not set +# CONFIG_HOTPLUG_PCI_SHPC is not set +# CONFIG_RAPIDIO is not set + +# +# Executable file formats / Emulations +# +CONFIG_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +CONFIG_BINFMT_MISC=m +CONFIG_COREDUMP=y +CONFIG_HAVE_ATOMIC_IOMAP=y +CONFIG_HAVE_TEXT_POKE_SMP=y +CONFIG_IOSF_MBI=m +CONFIG_VMD=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_PACKET_DIAG=m +CONFIG_UNIX=y +CONFIG_UNIX_DIAG=m +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_MIGRATE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_XFRM_IPCOMP=m +CONFIG_NET_KEY=m +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_FIB_TRIE_STATS=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_ROUTE_CLASSID=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IP_TUNNEL=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=m +CONFIG_NET_UDP_TUNNEL=m +# CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_LRO=y +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_INET_UDP_DIAG=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=y +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m +CONFIG_DEFAULT_CUBIC=y +# CONFIG_DEFAULT_RENO is not set +CONFIG_DEFAULT_TCP_CONG="cubic" +CONFIG_TCP_MD5SIG=y +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +CONFIG_IPV6_MIP6=m +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m +CONFIG_IPV6_VTI=m +CONFIG_IPV6_SIT=m +CONFIG_IPV6_SIT_6RD=y +CONFIG_IPV6_NDISC_NODETYPE=y +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_GRE is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +CONFIG_IPV6_MROUTE=y +CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y +CONFIG_IPV6_PIMSM_V2=y +CONFIG_NETLABEL=y +CONFIG_NETWORK_SECMARK=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=m + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_ACCT=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_LOG_COMMON=m +CONFIG_NF_CONNTRACK_MARK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_ZONES=y +CONFIG_NF_CONNTRACK_PROCFS=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_TIMEOUT=y +CONFIG_NF_CONNTRACK_TIMESTAMP=y +CONFIG_NF_CONNTRACK_LABELS=y +CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_BROADCAST=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_SNMP=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NF_CT_NETLINK_TIMEOUT=m +CONFIG_NF_CT_NETLINK_HELPER=m +CONFIG_NETFILTER_NETLINK_QUEUE_CT=y +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_NF_NAT_PROTO_DCCP=m +CONFIG_NF_NAT_PROTO_UDPLITE=m +CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_SIP=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_REDIRECT=m +CONFIG_NETFILTER_SYNPROXY=m +CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m +CONFIG_NFT_EXTHDR=m +CONFIG_NFT_META=m +CONFIG_NFT_CT=m +CONFIG_NFT_RBTREE=m +CONFIG_NFT_HASH=m +CONFIG_NFT_COUNTER=m +CONFIG_NFT_LOG=m +CONFIG_NFT_LIMIT=m +CONFIG_NFT_MASQ=m +CONFIG_NFT_REDIR=m +CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m +CONFIG_NFT_REJECT_INET=m +CONFIG_NFT_COMPAT=m +CONFIG_NETFILTER_XTABLES=y + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +CONFIG_NETFILTER_XT_CONNMARK=m +CONFIG_NETFILTER_XT_SET=m + +# +# Xtables targets +# +CONFIG_NETFILTER_XT_TARGET_AUDIT=m +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m +CONFIG_NETFILTER_XT_TARGET_CT=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_HL=m +CONFIG_NETFILTER_XT_TARGET_HMARK=m +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m +CONFIG_NETFILTER_XT_TARGET_LED=m +CONFIG_NETFILTER_XT_TARGET_LOG=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_NAT=m +CONFIG_NETFILTER_XT_TARGET_NETMAP=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_RATEEST=m +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_TEE=m +CONFIG_NETFILTER_XT_TARGET_TPROXY=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m +CONFIG_NETFILTER_XT_MATCH_CLUSTER=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_CPU=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ECN=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPRANGE=m +CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_NFACCT=m +CONFIG_NETFILTER_XT_MATCH_OSF=m +CONFIG_NETFILTER_XT_MATCH_OWNER=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_RATEEST=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_RECENT=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_SOCKET=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_TIME=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_IP_SET=m +CONFIG_IP_SET_MAX=256 +CONFIG_IP_SET_BITMAP_IP=m +CONFIG_IP_SET_BITMAP_IPMAC=m +CONFIG_IP_SET_BITMAP_PORT=m +CONFIG_IP_SET_HASH_IP=m +CONFIG_IP_SET_HASH_IPPORT=m +CONFIG_IP_SET_HASH_IPPORTIP=m +CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_NET=m +CONFIG_IP_SET_HASH_NETPORT=m +CONFIG_IP_SET_HASH_NETIFACE=m +CONFIG_IP_SET_LIST_SET=m +CONFIG_IP_VS=m +CONFIG_IP_VS_IPV6=y +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_AH_ESP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y +CONFIG_IP_VS_PROTO_SCTP=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m + +# +# IPVS SH scheduler +# +CONFIG_IP_VS_SH_TAB_BITS=8 + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=m +CONFIG_IP_VS_NFCT=y +CONFIG_IP_VS_PE_SIP=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_NF_CONNTRACK_IPV4=m +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set +CONFIG_NF_TABLES_IPV4=m +CONFIG_NFT_CHAIN_ROUTE_IPV4=m +CONFIG_NFT_REJECT_IPV4=m +CONFIG_NFT_DUP_IPV4=m +CONFIG_NF_TABLES_ARP=m +CONFIG_NF_DUP_IPV4=m +CONFIG_NF_LOG_IPV4=m +CONFIG_NF_REJECT_IPV4=m +CONFIG_NF_NAT_IPV4=m +CONFIG_NFT_CHAIN_NAT_IPV4=m +CONFIG_NF_NAT_MASQUERADE_IPV4=m +CONFIG_NFT_MASQ_IPV4=m +CONFIG_NFT_REDIR_IPV4=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_RPFILTER=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_SYNPROXY=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_RAW=m +CONFIG_IP_NF_SECURITY=m +CONFIG_IP_NF_ARPTABLES=m +CONFIG_IP_NF_ARPFILTER=m +CONFIG_IP_NF_ARP_MANGLE=m + +# +# IPv6: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV6=m +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_TABLES_IPV6=m +CONFIG_NFT_CHAIN_ROUTE_IPV6=m +CONFIG_NFT_REJECT_IPV6=m +CONFIG_NFT_DUP_IPV6=m +CONFIG_NF_DUP_IPV6=m +CONFIG_NF_REJECT_IPV6=m +CONFIG_NF_LOG_IPV6=m +CONFIG_NF_NAT_IPV6=m +CONFIG_NFT_CHAIN_NAT_IPV6=m +CONFIG_NF_NAT_MASQUERADE_IPV6=m +CONFIG_NFT_MASQ_IPV6=m +CONFIG_NFT_REDIR_IPV6=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_RPFILTER=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_TARGET_SYNPROXY=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_RAW=m +CONFIG_IP6_NF_SECURITY=m +CONFIG_IP6_NF_NAT=m +CONFIG_IP6_NF_TARGET_MASQUERADE=m +# CONFIG_IP6_NF_TARGET_NPT is not set +CONFIG_NF_TABLES_BRIDGE=m +CONFIG_NFT_BRIDGE_META=m +CONFIG_NFT_BRIDGE_REJECT=m +# CONFIG_NF_LOG_BRIDGE is not set +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_IP6=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +CONFIG_BRIDGE_EBT_NFLOG=m +CONFIG_IP_DCCP=m +CONFIG_INET_DCCP_DIAG=m + +# +# DCCP CCIDs Configuration +# +# CONFIG_IP_DCCP_CCID2_DEBUG is not set +CONFIG_IP_DCCP_CCID3=y +# CONFIG_IP_DCCP_CCID3_DEBUG is not set +CONFIG_IP_DCCP_TFRC_LIB=y + +# +# DCCP Kernel Hacking +# +# CONFIG_IP_DCCP_DEBUG is not set +# CONFIG_NET_DCCPPROBE is not set +CONFIG_IP_SCTP=m +CONFIG_NET_SCTPPROBE=m +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set +CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y +# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set +CONFIG_SCTP_COOKIE_HMAC_MD5=y +CONFIG_SCTP_COOKIE_HMAC_SHA1=y +CONFIG_INET_SCTP_DIAG=m +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +# CONFIG_ATM_CLIP_NO_ICMP is not set +CONFIG_ATM_LANE=m +# CONFIG_ATM_MPOA is not set +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_L2TP=m +CONFIG_L2TP_DEBUGFS=m +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=m +CONFIG_L2TP_ETH=m +CONFIG_STP=m +CONFIG_GARP=m +CONFIG_MRP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_HAVE_NET_DSA=y +CONFIG_VLAN_8021Q=m +CONFIG_VLAN_8021Q_GVRP=y +CONFIG_VLAN_8021Q_MVRP=y +# CONFIG_DECNET is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +CONFIG_6LOWPAN=m +# CONFIG_6LOWPAN_DEBUGFS is not set +CONFIG_6LOWPAN_NHC=m +CONFIG_6LOWPAN_NHC_DEST=m +CONFIG_6LOWPAN_NHC_FRAGMENT=m +CONFIG_6LOWPAN_NHC_HOP=m +CONFIG_6LOWPAN_NHC_IPV6=m +CONFIG_6LOWPAN_NHC_MOBILITY=m +CONFIG_6LOWPAN_NHC_ROUTING=m +CONFIG_6LOWPAN_NHC_UDP=m +# CONFIG_6LOWPAN_GHC_EXT_HDR_HOP is not set +# CONFIG_6LOWPAN_GHC_UDP is not set +# CONFIG_6LOWPAN_GHC_ICMPV6 is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_DEST is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_FRAG is not set +# CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE is not set +CONFIG_IEEE802154=m +# CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set +CONFIG_IEEE802154_SOCKET=m +CONFIG_IEEE802154_6LOWPAN=m +CONFIG_MAC802154=m +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_MULTIQ=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFB=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_DRR=m +CONFIG_NET_SCH_MQPRIO=m +CONFIG_NET_SCH_CHOKE=m +CONFIG_NET_SCH_QFQ=m +CONFIG_NET_SCH_CODEL=m +CONFIG_NET_SCH_FQ_CODEL=m +CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_SCH_PLUG=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +CONFIG_NET_CLS_FLOW=m +CONFIG_NET_CLS_CGROUP=y +CONFIG_NET_CLS_BPF=m +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_STACK=32 +CONFIG_NET_EMATCH_CMP=m +CONFIG_NET_EMATCH_NBYTE=m +CONFIG_NET_EMATCH_U32=m +CONFIG_NET_EMATCH_META=m +CONFIG_NET_EMATCH_TEXT=m +# CONFIG_NET_EMATCH_CANID is not set +CONFIG_NET_EMATCH_IPSET=m +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_NAT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +CONFIG_NET_ACT_SKBEDIT=m +CONFIG_NET_ACT_CSUM=m +CONFIG_NET_CLS_IND=y +CONFIG_NET_SCH_FIFO=y +CONFIG_DCB=y +CONFIG_DNS_RESOLVER=m +# CONFIG_BATMAN_ADV is not set +CONFIG_OPENVSWITCH=m +CONFIG_OPENVSWITCH_GRE=m +CONFIG_OPENVSWITCH_VXLAN=m +CONFIG_OPENVSWITCH_GENEVE=m +CONFIG_VSOCKETS=m +CONFIG_VMWARE_VMCI_VSOCKETS=m +CONFIG_NETLINK_MMAP=y +CONFIG_NETLINK_DIAG=m +CONFIG_NET_MPLS_GSO=m +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_XPS=y +CONFIG_NETPRIO_CGROUP=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +# CONFIG_NET_TCPPROBE is not set +CONFIG_NET_DROP_MONITOR=y +# CONFIG_HAMRADIO is not set +CONFIG_CAN=m +CONFIG_CAN_RAW=m +CONFIG_CAN_BCM=m +CONFIG_CAN_GW=m + +# +# CAN Device Drivers +# +CONFIG_CAN_VCAN=m +CONFIG_CAN_SLCAN=m +CONFIG_CAN_DEV=m +CONFIG_CAN_CALC_BITTIMING=y +CONFIG_CAN_LEDS=y +# CONFIG_CAN_MCP251X is not set +# CONFIG_PCH_CAN is not set +CONFIG_CAN_SJA1000=m +# CONFIG_CAN_SJA1000_ISA is not set +CONFIG_CAN_SJA1000_PLATFORM=m +CONFIG_CAN_EMS_PCI=m +CONFIG_CAN_PEAK_PCI=m +CONFIG_CAN_PEAK_PCIEC=y +CONFIG_CAN_KVASER_PCI=m +CONFIG_CAN_PLX_PCI=m +CONFIG_CAN_C_CAN=m +CONFIG_CAN_C_CAN_PLATFORM=m +CONFIG_CAN_C_CAN_PCI=m +CONFIG_CAN_CC770=m +# CONFIG_CAN_CC770_ISA is not set +CONFIG_CAN_CC770_PLATFORM=m + +# +# CAN USB interfaces +# +CONFIG_CAN_EMS_USB=m +CONFIG_CAN_ESD_USB2=m +CONFIG_CAN_KVASER_USB=m +CONFIG_CAN_PEAK_USB=m +CONFIG_CAN_8DEV_USB=m +CONFIG_CAN_SOFTING=m +# CONFIG_CAN_DEBUG_DEVICES is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m +CONFIG_BT_HS=y +CONFIG_BT_LE=y +# CONFIG_BT_6LOWPAN is not set +# CONFIG_BT_LEDS is not set +# CONFIG_BT_SELFTEST is not set +CONFIG_BT_DEBUGFS=y + +# +# Bluetooth device drivers +# +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_RTL=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_3WIRE=y +# CONFIG_BT_HCIUART_INTEL is not set +# CONFIG_BT_HCIUART_BCM is not set +# CONFIG_BT_HCIUART_QCA is not set +# CONFIG_BT_HCIUART_AG6XX is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +# CONFIG_BT_WILINK is not set +# CONFIG_AF_RXRPC is not set +CONFIG_FIB_RULES=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_EXT=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_WEXT_PRIV=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CFG80211_DEFAULT_PS=y +# CONFIG_CFG80211_DEBUGFS is not set +# CONFIG_CFG80211_INTERNAL_REGDB is not set +CONFIG_CFG80211_CRDA_SUPPORT=y +CONFIG_CFG80211_WEXT=y +CONFIG_LIB80211=m +# CONFIG_LIB80211_DEBUG is not set +CONFIG_MAC80211=m +CONFIG_MAC80211_HAS_RC=y +CONFIG_MAC80211_RC_MINSTREL=y +CONFIG_MAC80211_RC_MINSTREL_HT=y +# CONFIG_MAC80211_RC_MINSTREL_VHT is not set +CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y +CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +# CONFIG_WIMAX is not set +CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_GPIO is not set +CONFIG_NET_9P=m +CONFIG_NET_9P_VIRTIO=m +# CONFIG_NET_9P_RDMA is not set +# CONFIG_NET_9P_DEBUG is not set +# CONFIG_CAIF is not set +CONFIG_CEPH_LIB=m +# CONFIG_CEPH_LIB_PRETTYDEBUG is not set +CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y +# CONFIG_NFC is not set +CONFIG_LWTUNNEL=y +CONFIG_DST_CACHE=y +CONFIG_NET_DEVLINK=m + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_FIRMWARE_IN_KERNEL is not set +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_FW_LOADER_USER_HELPER is not set +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +CONFIG_SYS_HYPERVISOR=y +# CONFIG_GENERIC_CPU_DEVICES is not set +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=m +CONFIG_REGMAP_SPI=m +CONFIG_DMA_SHARED_BUFFER=y + +# +# Bus devices +# +CONFIG_CONNECTOR=y +CONFIG_PROC_EVENTS=y +CONFIG_MTD=m +# CONFIG_MTD_TESTS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AR7_PARTS is not set + +# +# User Modules And Translation Layers +# +# CONFIG_MTD_BLKDEVS is not set +# CONFIG_MTD_BLOCK is not set +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +# CONFIG_MTD_OOPS is not set +# CONFIG_MTD_SWAP is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_TS5500 is not set +# CONFIG_MTD_INTEL_VR_NOR is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_M25P80 is not set +# CONFIG_MTD_SST25L is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +# CONFIG_MTD_NAND is not set +# CONFIG_MTD_ONENAND is not set + +# +# LPDDR flash memory drivers +# +# CONFIG_MTD_LPDDR is not set +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +# CONFIG_PARPORT_PC_FIFO is not set +# CONFIG_PARPORT_PC_SUPERIO is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y +CONFIG_PNP=y +# CONFIG_PNP_DEBUG_MESSAGES is not set + +# +# Protocols +# +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_NULL_BLK=m +CONFIG_BLK_DEV_FD=m +# CONFIG_PARIDE is not set +CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m +CONFIG_ZRAM=m +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=m +CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_OSD=m +CONFIG_BLK_DEV_SX8=m +CONFIG_BLK_DEV_RAM=m +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=16384 +CONFIG_BLK_DEV_RAM_DAX=y +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +# CONFIG_CDROM_PKTCDVD_WCACHE is not set +CONFIG_ATA_OVER_ETH=m +CONFIG_XEN_BLKDEV_FRONTEND=m +CONFIG_VIRTIO_BLK=m +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_RBD=m +# CONFIG_BLK_DEV_RSXX is not set +CONFIG_BLK_DEV_NVME=m + +# +# Misc devices +# +CONFIG_SENSORS_LIS3LV02D=m +# CONFIG_AD525X_DPOT is not set +# CONFIG_ATMEL_PWM is not set +# CONFIG_DUMMY_IRQ is not set +CONFIG_IBM_ASM=m +# CONFIG_PHANTOM is not set +# CONFIG_INTEL_MID_PTI is not set +# CONFIG_SGI_IOC4 is not set +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +# CONFIG_ICS932S401 is not set +# CONFIG_ATMEL_SSC is not set +CONFIG_ENCLOSURE_SERVICES=m +CONFIG_HP_ILO=m +CONFIG_APDS9802ALS=m +CONFIG_ISL29003=m +CONFIG_ISL29020=m +CONFIG_SENSORS_TSL2550=m +# CONFIG_SENSORS_BH1780 is not set +CONFIG_SENSORS_BH1770=m +CONFIG_SENSORS_APDS990X=m +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_TI_DAC7512 is not set +CONFIG_VMWARE_BALLOON=m +# CONFIG_BMP085_I2C is not set +# CONFIG_BMP085_SPI is not set +CONFIG_PCH_PHUB=m +# CONFIG_USB_SWITCH_FSA9480 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set +# CONFIG_SRAM is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=m +# CONFIG_EEPROM_AT25 is not set +CONFIG_EEPROM_LEGACY=m +CONFIG_EEPROM_MAX6875=m +CONFIG_EEPROM_93CX6=m +# CONFIG_EEPROM_93XX46 is not set +CONFIG_CB710_CORE=m +# CONFIG_CB710_DEBUG is not set +CONFIG_CB710_DEBUG_ASSUMPTIONS=y + +# +# Texas Instruments shared transport line discipline +# +CONFIG_TI_ST=m +CONFIG_SENSORS_LIS3_I2C=m + +# +# Altera FPGA firmware download module +# +CONFIG_ALTERA_STAPL=m +CONFIG_INTEL_MEI=m +CONFIG_INTEL_MEI_ME=m +# CONFIG_INTEL_MEI_TXE is not set +CONFIG_VMWARE_VMCI=m +# CONFIG_CXL_BASE is not set +# CONFIG_CXL_KERNEL_API is not set +# CONFIG_CXL_EEH is not set +CONFIG_HAVE_IDE=y +# CONFIG_IDE is not set + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +CONFIG_RAID_ATTRS=m +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +CONFIG_BLK_DEV_SR_VENDOR=y +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_SCH=m +CONFIG_SCSI_ENCLOSURE=m +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_FC_TGT_ATTRS=y +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_LIBSAS=m +CONFIG_SCSI_SAS_ATA=y +CONFIG_SCSI_SAS_HOST_SMP=y +CONFIG_SCSI_SRP_ATTRS=m +CONFIG_SCSI_SRP_TGT_ATTRS=y +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_ISCSI_BOOT_SYSFS=m +CONFIG_SCSI_CXGB3_ISCSI=m +CONFIG_SCSI_CXGB4_ISCSI=m +CONFIG_SCSI_BNX2_ISCSI=m +CONFIG_SCSI_BNX2X_FCOE=m +CONFIG_BE2ISCSI=m +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +CONFIG_SCSI_HPSA=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_3W_SAS=m +# CONFIG_SCSI_ACARD is not set +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +CONFIG_AIC7XXX_DEBUG_ENABLE=y +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +# CONFIG_SCSI_AIC7XXX_OLD is not set +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=4 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set +# CONFIG_SCSI_AIC94XX is not set +CONFIG_SCSI_MVSAS=m +# CONFIG_SCSI_MVSAS_DEBUG is not set +CONFIG_SCSI_MVSAS_TASKLET=y +CONFIG_SCSI_MVUMI=m +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +CONFIG_SCSI_ARCMSR=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m +CONFIG_SCSI_MPT2SAS=m +CONFIG_SCSI_MPT3SAS=m +CONFIG_SCSI_MPT2SAS_MAX_SGE=128 +CONFIG_SCSI_MPT3SAS_MAX_SGE=128 +CONFIG_SCSI_SMARTPQI=m +CONFIG_SCSI_UFSHCD=m +CONFIG_SCSI_UFSHCD_PCI=m +# CONFIG_SCSI_UFSHCD_PLATFORM is not set +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_BUSLOGIC=m +# CONFIG_SCSI_FLASHPOINT is not set +CONFIG_VMWARE_PVSCSI=m +CONFIG_HYPERV_STORAGE=m +CONFIG_LIBFC=m +CONFIG_LIBFCOE=m +CONFIG_FCOE=m +CONFIG_FCOE_FNIC=m +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +CONFIG_SCSI_ISCI=m +# CONFIG_SCSI_IPS is not set +CONFIG_SCSI_INITIO=m +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +CONFIG_SCSI_STEX=m +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_IPR is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +CONFIG_SCSI_QLA_FC=m +# CONFIG_TCM_QLA2XXX is not set +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_LPFC=m +# CONFIG_SCSI_LPFC_DEBUG_FS is not set +# CONFIG_SCSI_DC395x is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_NSP32 is not set +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_PMCRAID=m +CONFIG_SCSI_PM8001=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_BFA_FC=m +CONFIG_SCSI_VIRTIO=m +# CONFIG_SCSI_CHELSIO_FCOE is not set +CONFIG_SCSI_DH=y +CONFIG_SCSI_DH_RDAC=y +CONFIG_SCSI_DH_HP_SW=y +CONFIG_SCSI_DH_EMC=y +CONFIG_SCSI_DH_ALUA=y +CONFIG_SCSI_OSD_INITIATOR=m +CONFIG_SCSI_OSD_ULD=m +CONFIG_SCSI_OSD_DPRINT_SENSE=1 +# CONFIG_SCSI_OSD_DEBUG is not set +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_ACPI=y +# CONFIG_SATA_ZPODD is not set +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=m +CONFIG_SATA_AHCI_PLATFORM=m +# CONFIG_SATA_INIC162X is not set +CONFIG_SATA_ACARD_AHCI=m +CONFIG_SATA_SIL24=m +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_SX4=m +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +CONFIG_ATA_PIIX=m +# CONFIG_SATA_HIGHBANK is not set +CONFIG_SATA_MV=m +CONFIG_SATA_NV=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIS=m +CONFIG_SATA_SVW=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m + +# +# PATA SFF controllers with BMDMA +# +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARASAN_CF=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +CONFIG_PATA_ATP867X=m +CONFIG_PATA_CMD64X=m +# CONFIG_PATA_CS5520 is not set +# CONFIG_PATA_CS5530 is not set +CONFIG_PATA_CS5535=m +CONFIG_PATA_CS5536=m +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +# CONFIG_PATA_HPT3X3_DMA is not set +CONFIG_PATA_IT8213=m +CONFIG_PATA_IT821X=m +CONFIG_PATA_JMICRON=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NINJA32=m +# CONFIG_PATA_NS87415 is not set +CONFIG_PATA_OLDPIIX=m +# CONFIG_PATA_OPTIDMA is not set +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_PDC_OLD=m +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RDC=m +# CONFIG_PATA_SC1200 is not set +CONFIG_PATA_SCH=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=m +CONFIG_PATA_TOSHIBA=m +# CONFIG_PATA_TRIFLEX is not set +CONFIG_PATA_VIA=m +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +CONFIG_PATA_ACPI=m +CONFIG_ATA_GENERIC=m +# CONFIG_PATA_LEGACY is not set +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_AUTODETECT=y +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +# CONFIG_MD_MULTIPATH is not set +CONFIG_MD_FAULTY=m +# CONFIG_BCACHE is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_MQ_DEFAULT is not set +CONFIG_DM_DEBUG=y +CONFIG_DM_BUFIO=m +# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_PERSISTENT_DATA=m +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_THIN_PROVISIONING=m +CONFIG_DM_CACHE=m +CONFIG_DM_CACHE_SMQ=m +CONFIG_DM_CACHE_CLEANER=m +CONFIG_DM_ERA=m +CONFIG_DM_MIRROR=m +CONFIG_DM_LOG_USERSPACE=m +CONFIG_DM_RAID=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_QL=m +CONFIG_DM_MULTIPATH_ST=m +CONFIG_DM_DELAY=m +CONFIG_DM_UEVENT=y +CONFIG_DM_FLAKEY=m +CONFIG_DM_VERITY=m +CONFIG_DM_SWITCH=m +CONFIG_TARGET_CORE=m +CONFIG_TCM_IBLOCK=m +CONFIG_TCM_FILEIO=m +CONFIG_TCM_PSCSI=m +CONFIG_TCM_USER2=m +CONFIG_LOOPBACK_TARGET=m +CONFIG_TCM_FC=m +CONFIG_ISCSI_TARGET=m +CONFIG_ISCSI_TARGET_CXGB4=m +# CONFIG_SBP_TARGET is not set +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +# CONFIG_FUSION_FC is not set +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LOGGING=y + +# +# IEEE 1394 (FireWire) support +# +CONFIG_FIREWIRE=m +CONFIG_FIREWIRE_OHCI=m +CONFIG_FIREWIRE_SBP2=m +CONFIG_FIREWIRE_NET=m +# CONFIG_FIREWIRE_NOSY is not set +# CONFIG_I2O is not set +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_NETDEVICES=y +CONFIG_NET_CORE=y +CONFIG_BONDING=m +CONFIG_DUMMY=m +# CONFIG_EQUALIZER is not set +CONFIG_NET_FC=y +CONFIG_MII=m +CONFIG_IFB=m +CONFIG_NET_TEAM=m +CONFIG_NET_TEAM_MODE_BROADCAST=m +CONFIG_NET_TEAM_MODE_ROUNDROBIN=m +CONFIG_NET_TEAM_MODE_RANDOM=m +CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m +CONFIG_NET_TEAM_MODE_LOADBALANCE=m +CONFIG_MACVLAN=m +CONFIG_MACVTAP=m +CONFIG_VXLAN=m +CONFIG_GENEVE=m +CONFIG_MACSEC=m +CONFIG_NETCONSOLE=m +CONFIG_NETCONSOLE_DYNAMIC=y +CONFIG_NETPOLL=y +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_TUN=m +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_VETH=m +CONFIG_VIRTIO_NET=m +CONFIG_NLMON=m +# CONFIG_ARCNET is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +CONFIG_ATM_ENI_TUNE_BURST=y +CONFIG_ATM_ENI_BURST_TX_16W=y +CONFIG_ATM_ENI_BURST_TX_8W=y +CONFIG_ATM_ENI_BURST_TX_4W=y +CONFIG_ATM_ENI_BURST_TX_2W=y +CONFIG_ATM_ENI_BURST_RX_16W=y +CONFIG_ATM_ENI_BURST_RX_8W=y +CONFIG_ATM_ENI_BURST_RX_4W=y +CONFIG_ATM_ENI_BURST_RX_2W=y +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +CONFIG_ATM_IDT77252_RCV_ALL=y +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_USE_TASKLET=y +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_SOLOS=m + +# +# CAIF transport drivers +# + +# +# Distributed Switch Architecture drivers +# +# CONFIG_NET_DSA_MV88E6XXX is not set +# CONFIG_NET_DSA_MV88E6060 is not set +# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set +# CONFIG_NET_DSA_MV88E6131 is not set +# CONFIG_NET_DSA_MV88E6123_61_65 is not set +CONFIG_ETHERNET=y +CONFIG_MDIO=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +# CONFIG_NET_VENDOR_ADAPTEC is not set +# CONFIG_NET_VENDOR_ALTEON is not set +# CONFIG_NET_VENDOR_AMD is not set +CONFIG_NET_VENDOR_ATHEROS=y +CONFIG_ATL2=m +CONFIG_ATL1=m +CONFIG_ATL1E=m +CONFIG_ATL1C=m +CONFIG_ALX=m +CONFIG_NET_CADENCE=y +CONFIG_ARM_AT91_ETHER=m +CONFIG_MACB=m +CONFIG_NET_VENDOR_BROADCOM=y +CONFIG_B44=m +CONFIG_B44_PCI_AUTOSELECT=y +CONFIG_B44_PCICORE_AUTOSELECT=y +CONFIG_B44_PCI=y +CONFIG_BNX2=m +CONFIG_CNIC=m +CONFIG_TIGON3=m +CONFIG_BNX2X=m +CONFIG_BNX2X_SRIOV=y +# CONFIG_BNX2X_VXLAN is not set +# CONFIG_BNX2X_GENEVE is not set +CONFIG_BNXT=m +CONFIG_BNXT_SRIOV=y +CONFIG_NET_VENDOR_BROCADE=y +CONFIG_BNA=m +CONFIG_NET_CALXEDA_XGMAC=m +CONFIG_NET_VENDOR_CHELSIO=y +# CONFIG_CHELSIO_T1 is not set +CONFIG_CHELSIO_T3=m +CONFIG_CHELSIO_T4=m +# CONFIG_CHELSIO_T4_DCB is not set +CONFIG_CHELSIO_T4_UWIRE=y +CONFIG_CHELSIO_T4VF=m +CONFIG_NET_VENDOR_CISCO=y +CONFIG_ENIC=m +CONFIG_DNET=m +CONFIG_NET_VENDOR_DEC=y +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_DE2104X_DSL=0 +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +CONFIG_TULIP_MMIO=y +# CONFIG_TULIP_NAPI is not set +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_PCMCIA_XIRCOM=m +# CONFIG_NET_VENDOR_DLINK is not set +CONFIG_NET_VENDOR_EMULEX=y +CONFIG_BE2NET=m +CONFIG_BE2NET_HWMON=y +CONFIG_BE2NET_VXLAN=y +# CONFIG_NET_VENDOR_EXAR is not set +# CONFIG_NET_VENDOR_HP is not set +CONFIG_NET_VENDOR_INTEL=y +CONFIG_E100=m +CONFIG_E1000=m +CONFIG_E1000E=m +CONFIG_E1000E_HWTS=y +CONFIG_IGB=m +CONFIG_IGB_HWMON=y +CONFIG_IGB_DCA=y +CONFIG_IGBVF=m +CONFIG_IXGB=m +CONFIG_IXGBE=m +# CONFIG_IXGBE_VXLAN is not set +CONFIG_IXGBE_HWMON=y +CONFIG_IXGBE_DCA=y +CONFIG_IXGBE_DCB=y +CONFIG_IXGBEVF=m +CONFIG_I40E=m +# CONFIG_I40E_VXLAN is not set +CONFIG_I40E_DCB=y +# CONFIG_I40E_FCOE is not set +CONFIG_I40EVF=m +CONFIG_FM10K=m +CONFIG_FM10K_VXLAN=y +# CONFIG_NET_VENDOR_I825XX is not set +# CONFIG_IP1000 is not set +CONFIG_JME=m +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_MVMDIO=m +CONFIG_SKGE=m +# CONFIG_SKGE_DEBUG is not set +CONFIG_SKGE_GENESIS=y +CONFIG_SKY2=m +# CONFIG_SKY2_DEBUG is not set +CONFIG_NET_VENDOR_MELLANOX=y +# CONFIG_MLX4_EN is not set +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_MLX5_CORE=m +CONFIG_MLX5_CORE_EN=y +CONFIG_MLX5_CORE_EN_DCB=y +CONFIG_MLX5_CORE_EN_VXLAN=y +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +CONFIG_NET_VENDOR_MYRI=y +CONFIG_MYRI10GE=m +CONFIG_MYRI10GE_DCA=y +# CONFIG_FEALNX is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_FORCEDETH=m +CONFIG_NET_VENDOR_OKI=y +CONFIG_PCH_GBE=m +CONFIG_ETHOC=m +CONFIG_NET_PACKET_ENGINE=y +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_NET_VENDOR_QLOGIC=y +CONFIG_QLA3XXX=m +CONFIG_QLCNIC=m +CONFIG_QLCNIC_SRIOV=y +CONFIG_QLCNIC_DCB=y +# CONFIG_QLCNIC_VXLAN is not set +CONFIG_QLCNIC_HWMON=y +CONFIG_QLGE=m +CONFIG_NETXEN_NIC=m +CONFIG_QED=m +CONFIG_QED_SRIOV=y +CONFIG_QEDE=m +# CONFIG_QEDE_VXLAN is not set +# CONFIG_QEDE_GENEVE is not set +CONFIG_NET_VENDOR_REALTEK=y +# CONFIG_ATP is not set +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_R8169=m +# CONFIG_NET_VENDOR_RDC is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SILAN is not set +# CONFIG_NET_VENDOR_SIS is not set +# CONFIG_SFC is not set +CONFIG_NET_VENDOR_SMSC=y +CONFIG_EPIC100=m +CONFIG_SMSC9420=m +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SUN is not set +# CONFIG_NET_VENDOR_TEHUTI is not set +# CONFIG_NET_VENDOR_TI is not set +CONFIG_NET_VENDOR_VIA=y +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_VIA_VELOCITY=m +# CONFIG_NET_VENDOR_WIZNET is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_NET_SB1000 is not set +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +CONFIG_AT803X_PHY=m +CONFIG_AMD_PHY=m +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m +CONFIG_VITESSE_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m +CONFIG_BCM87XX_PHY=m +CONFIG_ICPLUS_PHY=m +CONFIG_REALTEK_PHY=m +CONFIG_NATIONAL_PHY=m +CONFIG_STE10XP=m +CONFIG_LSI_ET1011C_PHY=m +CONFIG_MICREL_PHY=m +CONFIG_FIXED_PHY=y +CONFIG_MDIO_BITBANG=m +# CONFIG_MDIO_GPIO is not set +# CONFIG_MICREL_KS8995MA is not set +# CONFIG_PLIP is not set +CONFIG_PPP=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPPOATM=m +CONFIG_PPPOE=m +CONFIG_PPTP=m +CONFIG_PPPOL2TP=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_SLIP=m +CONFIG_SLHC=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLIP_SMART=y +# CONFIG_SLIP_MODE_SLIP6 is not set +CONFIG_USB_NET_DRIVERS=y +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_RTL8152=m +# CONFIG_USB_LAN78XX is not set +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_AX88179_178A=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=m +CONFIG_USB_NET_HUAWEI_CDC_NCM=m +CONFIG_USB_NET_CDC_MBIM=m +CONFIG_USB_NET_DM9601=m +# CONFIG_USB_NET_SR9700 is not set +# CONFIG_USB_NET_SR9800 is not set +CONFIG_USB_NET_SMSC75XX=m +CONFIG_USB_NET_SMSC95XX=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET_ENABLE=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +CONFIG_USB_EPSON2888=y +CONFIG_USB_KC2190=y +CONFIG_USB_NET_ZAURUS=m +CONFIG_USB_NET_CX82310_ETH=m +CONFIG_USB_NET_KALMIA=m +CONFIG_USB_NET_QMI_WWAN=m +CONFIG_USB_HSO=m +CONFIG_USB_NET_INT51X1=m +CONFIG_USB_IPHETH=m +CONFIG_USB_SIERRA_NET=m +CONFIG_USB_VL600=m +# CONFIG_USB_NET_CH9200 is not set +CONFIG_WLAN=y +# CONFIG_LIBERTAS_THINFIRM is not set +# CONFIG_AIRO is not set +# CONFIG_ATMEL is not set +# CONFIG_AT76C50X_USB is not set +# CONFIG_PRISM54 is not set +# CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_RNDIS_WLAN is not set +# CONFIG_ADM8211 is not set +# CONFIG_MAC80211_HWSIM is not set +CONFIG_ATH_COMMON=m +CONFIG_WLAN_VENDOR_ATH=y +# CONFIG_ATH_DEBUG is not set +# CONFIG_ATH5K is not set +# CONFIG_ATH5K_PCI is not set +CONFIG_ATH9K_HW=m +CONFIG_ATH9K_COMMON=m +CONFIG_ATH9K_BTCOEX_SUPPORT=y +CONFIG_ATH9K=m +CONFIG_ATH9K_PCI=y +CONFIG_ATH9K_AHB=y +CONFIG_ATH9K_DEBUGFS=y +# CONFIG_ATH9K_STATION_STATISTICS is not set +# CONFIG_ATH9K_DYNACK is not set +CONFIG_ATH9K_WOW=y +CONFIG_ATH9K_RFKILL=y +# CONFIG_ATH9K_CHANNEL_CONTEXT is not set +CONFIG_ATH9K_PCOEM=y +CONFIG_ATH9K_HTC=m +# CONFIG_ATH9K_HTC_DEBUGFS is not set +CONFIG_ATH9K_HWRNG=y +CONFIG_CARL9170=m +CONFIG_CARL9170_LEDS=y +# CONFIG_CARL9170_DEBUGFS is not set +CONFIG_CARL9170_WPC=y +# CONFIG_CARL9170_HWRNG is not set +# CONFIG_ATH6KL is not set +# CONFIG_AR5523 is not set +CONFIG_WIL6210=m +CONFIG_WIL6210_ISR_COR=y +CONFIG_WIL6210_TRACING=y +CONFIG_ATH10K=m +CONFIG_ATH10K_PCI=m +# CONFIG_ATH10K_DEBUG is not set +CONFIG_ATH10K_DEBUGFS=y +# CONFIG_ATH10K_TRACING is not set +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +CONFIG_WLAN_VENDOR_BROADCOM=y +CONFIG_BRCMUTIL=m +CONFIG_BRCMSMAC=m +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_PROTO_MSGBUF=y +CONFIG_BRCMFMAC_SDIO=y +CONFIG_BRCMFMAC_USB=y +CONFIG_BRCMFMAC_PCIE=y +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set +# CONFIG_HOSTAP is not set +# CONFIG_IPW2100 is not set +# CONFIG_IPW2200 is not set +CONFIG_WLAN_VENDOR_INTEL=y +CONFIG_IWLEGACY=m +CONFIG_IWL4965=m +CONFIG_IWL3945=m + +# +# iwl3945 / iwl4965 Debugging Options +# +CONFIG_IWLEGACY_DEBUG=y +CONFIG_IWLEGACY_DEBUGFS=y +CONFIG_IWLWIFI=m +CONFIG_IWLWIFI_LEDS=y +CONFIG_IWLDVM=m +CONFIG_IWLMVM=m +CONFIG_IWLWIFI_OPMODE_MODULAR=y +# CONFIG_IWLWIFI_BCAST_FILTERING is not set +# CONFIG_IWLWIFI_PCIE_RTPM is not set + +# +# Debugging Options +# +# CONFIG_IWLWIFI_DEBUG is not set +CONFIG_IWLWIFI_DEBUGFS=y +# CONFIG_IWLWIFI_DEVICE_TRACING is not set +# CONFIG_LIBERTAS is not set +CONFIG_WLAN_VENDOR_MARVELL=y +CONFIG_MWIFIEX=m +CONFIG_MWIFIEX_SDIO=m +CONFIG_MWIFIEX_PCIE=m +CONFIG_MWIFIEX_USB=m +CONFIG_MWL8K=m +# CONFIG_HERMES is not set +# CONFIG_P54_COMMON is not set +CONFIG_WLAN_VENDOR_RALINK=y +CONFIG_RT2X00=m +# CONFIG_RT2400PCI is not set +# CONFIG_RT2500PCI is not set +CONFIG_RT61PCI=m +CONFIG_RT2800PCI=m +CONFIG_RT2800PCI_RT33XX=y +CONFIG_RT2800PCI_RT35XX=y +CONFIG_RT2800PCI_RT53XX=y +CONFIG_RT2800PCI_RT3290=y +# CONFIG_RT2500USB is not set +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT33XX=y +CONFIG_RT2800USB_RT35XX=y +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RT2800_LIB=m +CONFIG_RT2800_LIB_MMIO=m +CONFIG_RT2X00_LIB_MMIO=m +CONFIG_RT2X00_LIB_PCI=m +CONFIG_RT2X00_LIB_USB=m +CONFIG_RT2X00_LIB=m +CONFIG_RT2X00_LIB_FIRMWARE=y +CONFIG_RT2X00_LIB_CRYPTO=y +CONFIG_RT2X00_LIB_LEDS=y +CONFIG_RT2X00_LIB_DEBUGFS=y +# CONFIG_RT2X00_DEBUG is not set +CONFIG_WLAN_VENDOR_REALTEK=y +# CONFIG_RTL8180 is not set +CONFIG_RTL8187=m +CONFIG_RTL8187_LEDS=y +CONFIG_RTL_CARDS=m +CONFIG_RTL8192CE=m +CONFIG_RTL8192SE=m +CONFIG_RTL8192DE=m +CONFIG_RTL8723AE=m +CONFIG_RTL8723BE=m +CONFIG_RTL8188EE=m +CONFIG_RTL8192EE=m +CONFIG_RTL8821AE=m +CONFIG_RTL8192CU=m +CONFIG_RTLWIFI=m +CONFIG_RTLWIFI_PCI=m +CONFIG_RTLWIFI_USB=m +# CONFIG_RTLWIFI_DEBUG is not set +CONFIG_RTL8192C_COMMON=m +CONFIG_RTL8723_COMMON=m +CONFIG_RTLBTCOEXIST=m +# CONFIG_WL_TI is not set +# CONFIG_ZD1211RW is not set + +# +# Enable WiMAX (Networking options) to see the WiMAX drivers +# +CONFIG_WAN=y +# CONFIG_LANMEDIA is not set +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +# CONFIG_HDLC_RAW_ETH is not set +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m + +# +# X.25/LAPB support is disabled +# +# CONFIG_PCI200SYN is not set +# CONFIG_WANXL is not set +# CONFIG_PC300TOO is not set +# CONFIG_FARSYNC is not set +# CONFIG_DSCC4 is not set +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +# CONFIG_SBNI is not set +CONFIG_IEEE802154_DRIVERS=m +CONFIG_IEEE802154_FAKELB=m +# CONFIG_IEEE802154_AT86RF230 is not set +# CONFIG_IEEE802154_MRF24J40 is not set +# CONFIG_IEEE802154_CC2520 is not set +# CONFIG_IEEE802154_ATUSB is not set +# CONFIG_IEEE802154_ADF7242 is not set +CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_VMXNET3=m +CONFIG_FUJITSU_ES=m +CONFIG_HYPERV_NET=m +CONFIG_ISDN=y +CONFIG_ISDN_I4L=m +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_MPP=y +CONFIG_IPPP_FILTER=y +# CONFIG_ISDN_PPP_BSDCOMP is not set +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_TTY_FAX=y + +# +# ISDN feature submodules +# +CONFIG_ISDN_DIVERSION=m + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +CONFIG_ISDN_DRV_HISAX=m + +# +# D-channel protocol features +# +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +CONFIG_HISAX_NO_SENDCOMPLETE=y +CONFIG_HISAX_NO_LLC=y +CONFIG_HISAX_NO_KEYPAD=y +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 + +# +# HiSax supported cards +# +CONFIG_HISAX_16_3=y +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_ENTERNOW_PCI=y +# CONFIG_HISAX_DEBUG is not set + +# +# HiSax PCMCIA card service modules +# + +# +# HiSax sub driver modules +# +CONFIG_HISAX_ST5481=m +# CONFIG_HISAX_HFCUSB is not set +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_FRITZ_PCIPNP=m + +# +# Active cards +# +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +# CONFIG_CAPI_TRACE is not set +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +# +# CAPI hardware drivers +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m +# CONFIG_CAPI_EICON is not set +CONFIG_ISDN_DRV_GIGASET=m +CONFIG_GIGASET_CAPI=y +# CONFIG_GIGASET_I4L is not set +# CONFIG_GIGASET_DUMMYLL is not set +CONFIG_GIGASET_BASE=m +CONFIG_GIGASET_M105=m +CONFIG_GIGASET_M101=m +# CONFIG_GIGASET_DEBUG is not set +CONFIG_HYSDN=m +CONFIG_HYSDN_CAPI=y +CONFIG_MISDN=m +CONFIG_MISDN_DSP=m +CONFIG_MISDN_L1OIP=m + +# +# mISDN hardware drivers +# +CONFIG_MISDN_HFCPCI=m +CONFIG_MISDN_HFCMULTI=m +CONFIG_MISDN_HFCUSB=m +CONFIG_MISDN_AVMFRITZ=m +CONFIG_MISDN_SPEEDFAX=m +CONFIG_MISDN_INFINEON=m +CONFIG_MISDN_W6692=m +CONFIG_MISDN_NETJET=m +CONFIG_MISDN_IPAC=m +CONFIG_MISDN_ISAR=m +CONFIG_ISDN_HDLC=m + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_POLLDEV=m +CONFIG_INPUT_SPARSEKMAP=m +# CONFIG_INPUT_MATRIXKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ADP5589 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_GPIO_POLLED=m +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_CYPRESS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +CONFIG_MOUSE_PS2_ELANTECH=y +CONFIG_MOUSE_PS2_SENTELIC=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_PS2_VMMOUSE=y +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_BCM5974=m +CONFIG_MOUSE_CYAPA=m +CONFIG_MOUSE_VSXXXAA=m +# CONFIG_MOUSE_GPIO is not set +CONFIG_MOUSE_SYNAPTICS_I2C=m +CONFIG_MOUSE_SYNAPTICS_USB=m +# CONFIG_INPUT_JOYSTICK is not set +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +# CONFIG_TABLET_USB_HANWANG is not set +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_WACOM=m +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_WACOM_W8001=m +CONFIG_TOUCHSCREEN_WACOM_I2C=m +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MCS5000 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WM97XX is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_W90X900 is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_BMA150 is not set +CONFIG_INPUT_PCSPKR=m +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_MPU3050 is not set +CONFIG_INPUT_APANEL=m +CONFIG_INPUT_GP2A=m +# CONFIG_INPUT_GPIO_TILT_POLLED is not set +CONFIG_INPUT_WISTRON_BTNS=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +# CONFIG_INPUT_KXTJ9 is not set +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_CM109=m +CONFIG_INPUT_UINPUT=m +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +CONFIG_INPUT_GPIO_ROTARY_ENCODER=m +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_CMA3000 is not set +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=y +# CONFIG_SERIO_CT82C710 is not set +# CONFIG_SERIO_PARKBD is not set +# CONFIG_SERIO_PCIPS2 is not set +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m +CONFIG_SERIO_ALTERA_PS2=m +# CONFIG_SERIO_PS2MULT is not set +CONFIG_SERIO_ARC_PS2=m +CONFIG_HYPERV_KEYBOARD=m +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_ROCKETPORT is not set +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +# CONFIG_MOXA_INTELLIO is not set +# CONFIG_MOXA_SMARTIO is not set +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_GT=m +CONFIG_NOZOMI=m +# CONFIG_ISI is not set +CONFIG_N_HDLC=m +CONFIG_N_GSM=m +# CONFIG_TRACE_SINK is not set +# CONFIG_DEVKMEM is not set +CONFIG_CRASH=y +# CONFIG_STALDRV is not set + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_NR_UARTS=32 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_8250_DW=y + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_KGDB_NMI is not set +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_MFD_HSU is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_CONSOLE_POLL=y +CONFIG_SERIAL_JSM=m +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_TIMBERDALE is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_IFX6X60 is not set +# CONFIG_SERIAL_PCH_UART is not set +CONFIG_SERIAL_ARC=m +CONFIG_SERIAL_ARC_NR_PORTS=1 +# CONFIG_SERIAL_RP2 is not set +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_HVC_DRIVER=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_VIRTIO_CONSOLE=m +CONFIG_IPMI_HANDLER=m +# CONFIG_IPMI_PANIC_EVENT is not set +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +# CONFIG_IPMI_SI_PROBE_DEFAULTS is not set +CONFIG_IPMI_SSIF=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_TIMERIOMEM=m +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +# CONFIG_HW_RANDOM_ATMEL is not set +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_VIA=m +CONFIG_HW_RANDOM_VIRTIO=m +# CONFIG_HW_RANDOM_EXYNOS is not set +CONFIG_HW_RANDOM_TPM=m +CONFIG_NVRAM=y +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set +CONFIG_SONYPI=m +# CONFIG_MWAVE is not set +CONFIG_PC8736x_GPIO=m +CONFIG_NSC_GPIO=m +CONFIG_RAW_DRIVER=y +CONFIG_MAX_RAW_DEVS=8192 +CONFIG_HPET=y +CONFIG_HPET_MMAP=y +# CONFIG_HPET_MMAP_DEFAULT is not set +CONFIG_HANGCHECK_TIMER=m +CONFIG_TCG_TPM=y +CONFIG_TCG_TIS=y +# CONFIG_TCG_TIS_I2C_ATMEL is not set +# CONFIG_TCG_TIS_I2C_INFINEON is not set +# CONFIG_TCG_TIS_I2C_NUVOTON is not set +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +# CONFIG_TCG_XEN is not set +CONFIG_TCG_CRB=m +CONFIG_TCG_TIS_ST33ZP24=m +CONFIG_TCG_TIS_ST33ZP24_I2C=m +CONFIG_TELCLOCK=m +CONFIG_DEVPORT=y +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=m +CONFIG_I2C_MUX=m + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_SMBUS=m +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_ISCH=m +CONFIG_I2C_ISMT=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_NFORCE2_S4985=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m + +# +# ACPI drivers +# +CONFIG_I2C_SCMI=m + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +CONFIG_I2C_DESIGNWARE_CORE=m +CONFIG_I2C_DESIGNWARE_PLATFORM=m +# CONFIG_I2C_DESIGNWARE_PCI is not set +# CONFIG_I2C_EG20T is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_INTEL_MID is not set +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_PCA_PLATFORM=m +# CONFIG_I2C_PXA_PCI is not set +CONFIG_I2C_SIMTEC=m +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +CONFIG_I2C_DIOLAN_U2C=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +# CONFIG_I2C_TAOS_EVM is not set +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VIPERBOARD=m + +# +# Other I2C/SMBus bus drivers +# +CONFIG_SCx200_ACB=m +CONFIG_I2C_STUB=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_SPI_BUTTERFLY is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_LM70_LLP is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PXA2XX is not set +# CONFIG_SPI_PXA2XX_PCI is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_TOPCLIFF_PCH is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_DESIGNWARE is not set + +# +# SPI Protocol Masters +# +# CONFIG_SPI_SPIDEV is not set +# CONFIG_SPI_TLE62X0 is not set + +# +# Qualcomm MSM SSBI bus support +# +# CONFIG_SSBI is not set +# CONFIG_HSI is not set + +# +# PPS support +# +CONFIG_PPS=m +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +CONFIG_PPS_CLIENT_LDISC=m +CONFIG_PPS_CLIENT_PARPORT=m +CONFIG_PPS_CLIENT_GPIO=m + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=m +CONFIG_DP83640_PHY=m +CONFIG_PTP_1588_CLOCK_PCH=m +CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y +CONFIG_GPIOLIB=y +CONFIG_GPIO_DEVRES=y +CONFIG_GPIO_ACPI=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y + +# +# Memory mapped GPIO drivers: +# +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_F7188X is not set +# CONFIG_GPIO_SCH311X is not set +# CONFIG_GPIO_TS5500 is not set +# CONFIG_GPIO_SCH is not set +CONFIG_GPIO_ICH=m +# CONFIG_GPIO_VX855 is not set +# CONFIG_GPIO_LYNXPOINT is not set + +# +# I2C GPIO expanders: +# +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_ADP5588 is not set + +# +# PCI GPIO expanders: +# +# CONFIG_GPIO_AMD8111 is not set +CONFIG_GPIO_LANGWELL=y +# CONFIG_GPIO_PCH is not set +# CONFIG_GPIO_ML_IOH is not set +# CONFIG_GPIO_RDC321X is not set + +# +# SPI GPIO expanders: +# +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MCP23S08 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_74X164 is not set + +# +# AC97 GPIO expanders: +# + +# +# LPC GPIO expanders: +# + +# +# MODULbus GPIO expanders: +# + +# +# USB GPIO expanders: +# +CONFIG_GPIO_VIPERBOARD=m +# CONFIG_W1 is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SBS is not set +# CONFIG_BATTERY_BQ27x00 is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_BQ2415X is not set +CONFIG_CHARGER_SMB347=m +# CONFIG_BATTERY_GOLDFISH is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_AVS is not set +CONFIG_POWERCAP=y +CONFIG_INTEL_RAPL=m +CONFIG_HWMON=y +CONFIG_HWMON_VID=m +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +# CONFIG_SENSORS_AD7314 is not set +CONFIG_SENSORS_AD7414=m +CONFIG_SENSORS_AD7418=m +# CONFIG_SENSORS_ADCXX is not set +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_ADT7X10=m +# CONFIG_SENSORS_ADT7310 is not set +CONFIG_SENSORS_ADT7410=m +CONFIG_SENSORS_ADT7411=m +CONFIG_SENSORS_ADT7462=m +CONFIG_SENSORS_ADT7470=m +CONFIG_SENSORS_ADT7475=m +CONFIG_SENSORS_ASC7621=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_K10TEMP=m +CONFIG_SENSORS_FAM15H_POWER=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DS620=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_I5K_AMB=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_F71882FG=m +CONFIG_SENSORS_F75375S=m +CONFIG_SENSORS_FSCHMD=m +CONFIG_SENSORS_G760A=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +# CONFIG_SENSORS_GPIO_FAN is not set +# CONFIG_SENSORS_HIH6130 is not set +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_IBMAEM=m +CONFIG_SENSORS_IBMPEX=m +CONFIG_SENSORS_IT87=m +# CONFIG_SENSORS_JC42 is not set +CONFIG_SENSORS_LINEAGE=m +CONFIG_SENSORS_LM63=m +# CONFIG_SENSORS_LM70 is not set +CONFIG_SENSORS_LM73=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_LTC4151=m +CONFIG_SENSORS_LTC4215=m +CONFIG_SENSORS_LTC4245=m +CONFIG_SENSORS_LTC4261=m +CONFIG_SENSORS_LM95234=m +CONFIG_SENSORS_LM95241=m +CONFIG_SENSORS_LM95245=m +# CONFIG_SENSORS_MAX1111 is not set +CONFIG_SENSORS_MAX16065=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX1668=m +CONFIG_SENSORS_MAX197=m +CONFIG_SENSORS_MAX6639=m +CONFIG_SENSORS_MAX6642=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_MAX6697=m +CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_NCT6775=m +CONFIG_SENSORS_NTC_THERMISTOR=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_PCF8591=m +CONFIG_PMBUS=m +CONFIG_SENSORS_PMBUS=m +CONFIG_SENSORS_ADM1275=m +CONFIG_SENSORS_LM25066=m +CONFIG_SENSORS_LTC2978=m +CONFIG_SENSORS_MAX16064=m +CONFIG_SENSORS_MAX34440=m +CONFIG_SENSORS_MAX8688=m +CONFIG_SENSORS_UCD9000=m +CONFIG_SENSORS_UCD9200=m +CONFIG_SENSORS_ZL6100=m +CONFIG_SENSORS_SHT15=m +CONFIG_SENSORS_SHT21=m +CONFIG_SENSORS_SIS5595=m +# CONFIG_SENSORS_SMM665 is not set +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_EMC1403=m +# CONFIG_SENSORS_EMC2103 is not set +CONFIG_SENSORS_EMC6W201=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_SCH56XX_COMMON=m +CONFIG_SENSORS_SCH5627=m +CONFIG_SENSORS_SCH5636=m +CONFIG_SENSORS_ADS1015=m +CONFIG_SENSORS_ADS7828=m +# CONFIG_SENSORS_ADS7871 is not set +CONFIG_SENSORS_AMC6821=m +CONFIG_SENSORS_INA209=m +CONFIG_SENSORS_INA2XX=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_TMP102=m +CONFIG_SENSORS_TMP401=m +CONFIG_SENSORS_TMP421=m +CONFIG_SENSORS_VIA_CPUTEMP=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83795=m +# CONFIG_SENSORS_W83795_FANCTRL is not set +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83L786NG=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_APPLESMC=m + +# +# ACPI drivers +# +CONFIG_SENSORS_ACPI_POWER=m +CONFIG_SENSORS_ATK0110=m +CONFIG_THERMAL=y +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +# CONFIG_THERMAL_GOV_USER_SPACE is not set +# CONFIG_CPU_THERMAL is not set +# CONFIG_THERMAL_EMULATION is not set +CONFIG_INTEL_POWERCLAMP=m +CONFIG_INT340X_THERMAL=m +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_SYSFS=y + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_F71808E_WDT=m +CONFIG_SP5100_TCO=m +# CONFIG_SC520_WDT is not set +CONFIG_SBC_FITPC2_WATCHDOG=m +# CONFIG_EUROTECH_WDT is not set +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +# CONFIG_WAFER_WDT is not set +CONFIG_I6300ESB_WDT=m +CONFIG_IE6XX_WDT=m +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_IT8712F_WDT=m +CONFIG_IT87_WDT=m +CONFIG_HP_WATCHDOG=m +CONFIG_HPWDT_NMI_DECODING=y +# CONFIG_SC1200_WDT is not set +# CONFIG_PC87413_WDT is not set +CONFIG_NV_TCO=m +# CONFIG_60XX_WDT is not set +# CONFIG_SBC8360_WDT is not set +# CONFIG_SBC7240_WDT is not set +# CONFIG_CPU5_WDT is not set +CONFIG_SMSC_SCH311X_WDT=m +# CONFIG_SMSC37B787_WDT is not set +CONFIG_VIA_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83697UG_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +# CONFIG_SBC_EPX_C3_WATCHDOG is not set +CONFIG_XEN_WDT=m + +# +# PCI-based Watchdog Cards +# +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m + +# +# USB-based Watchdog Cards +# +CONFIG_USBPCWATCHDOG=m +CONFIG_SSB_POSSIBLE=y + +# +# Sonics Silicon Backplane +# +CONFIG_SSB=m +CONFIG_SSB_SPROM=y +CONFIG_SSB_PCIHOST_POSSIBLE=y +CONFIG_SSB_PCIHOST=y +# CONFIG_SSB_B43_PCI_BRIDGE is not set +CONFIG_SSB_SDIOHOST_POSSIBLE=y +CONFIG_SSB_SDIOHOST=y +# CONFIG_SSB_DEBUG is not set +CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y +CONFIG_SSB_DRIVER_PCICORE=y +CONFIG_SSB_DRIVER_GPIO=y +CONFIG_BCMA_POSSIBLE=y + +# +# Broadcom specific AMBA +# +CONFIG_BCMA=m +CONFIG_BCMA_HOST_PCI_POSSIBLE=y +CONFIG_BCMA_HOST_PCI=y +# CONFIG_BCMA_HOST_SOC is not set +CONFIG_BCMA_DRIVER_PCI=y +CONFIG_BCMA_DRIVER_GMAC_CMN=y +CONFIG_BCMA_DRIVER_GPIO=y +# CONFIG_BCMA_DEBUG is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_CS5535 is not set +# CONFIG_MFD_CROS_EC is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_HTC_PASIC3 is not set +CONFIG_LPC_ICH=m +CONFIG_LPC_SCH=m +CONFIG_MFD_INTEL_LPSS=y +CONFIG_MFD_INTEL_LPSS_ACPI=y +CONFIG_MFD_INTEL_LPSS_PCI=y +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_EZX_PCAP is not set +CONFIG_MFD_VIPERBOARD=m +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_UCB1400_CORE is not set +# CONFIG_MFD_RDC321X is not set +CONFIG_MFD_RTSX_PCI=m +CONFIG_MFD_RTSX_USB=m +# CONFIG_MFD_SI476X_CORE is not set +CONFIG_MFD_SM501=m +CONFIG_MFD_SM501_GPIO=y +# CONFIG_ABX500_CORE is not set +# CONFIG_MFD_STMPE is not set +# CONFIG_MFD_SYSCON is not set +# CONFIG_MFD_TI_AM335X_TSCADC is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65217 is not set +# CONFIG_MFD_TPS65912 is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TIMBERDALE is not set +# CONFIG_MFD_TMIO is not set +CONFIG_MFD_VX855=m +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_REGULATOR is not set +CONFIG_MEDIA_SUPPORT=m + +# +# Multimedia core support +# +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_RC_SUPPORT=y +# CONFIG_MEDIA_CONTROLLER is not set +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L2=m +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEOBUF_GEN=m +CONFIG_VIDEOBUF_DMA_SG=m +CONFIG_VIDEOBUF_VMALLOC=m +CONFIG_VIDEOBUF_DVB=m +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_VMALLOC=m +# CONFIG_VIDEO_V4L2_INT_DEVICE is not set +CONFIG_DVB_CORE=m +CONFIG_DVB_NET=y +CONFIG_TTPCI_EEPROM=m +CONFIG_DVB_MAX_ADAPTERS=8 +CONFIG_DVB_DYNAMIC_MINORS=y + +# +# Media drivers +# +CONFIG_RC_CORE=m +CONFIG_RC_MAP=m +CONFIG_RC_DECODERS=y +CONFIG_LIRC=m +CONFIG_IR_LIRC_CODEC=m +CONFIG_IR_NEC_DECODER=m +CONFIG_IR_RC5_DECODER=m +CONFIG_IR_RC6_DECODER=m +CONFIG_IR_JVC_DECODER=m +CONFIG_IR_SONY_DECODER=m +CONFIG_IR_RC5_SZ_DECODER=m +CONFIG_IR_SANYO_DECODER=m +CONFIG_IR_MCE_KBD_DECODER=m +CONFIG_RC_DEVICES=y +CONFIG_RC_ATI_REMOTE=m +CONFIG_IR_ENE=m +CONFIG_IR_IMON=m +CONFIG_IR_MCEUSB=m +CONFIG_IR_ITE_CIR=m +CONFIG_IR_FINTEK=m +CONFIG_IR_NUVOTON=m +CONFIG_IR_REDRAT3=m +CONFIG_IR_STREAMZAP=m +CONFIG_IR_WINBOND_CIR=m +CONFIG_IR_IGUANA=m +CONFIG_IR_TTUSBIR=m +# CONFIG_RC_LOOPBACK is not set +CONFIG_IR_GPIO_CIR=m +CONFIG_MEDIA_USB_SUPPORT=y + +# +# Webcam devices +# +CONFIG_USB_VIDEO_CLASS=m +CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y +CONFIG_USB_GSPCA=m +CONFIG_USB_M5602=m +CONFIG_USB_STV06XX=m +CONFIG_USB_GL860=m +CONFIG_USB_GSPCA_BENQ=m +CONFIG_USB_GSPCA_CONEX=m +CONFIG_USB_GSPCA_CPIA1=m +CONFIG_USB_GSPCA_ETOMS=m +CONFIG_USB_GSPCA_FINEPIX=m +CONFIG_USB_GSPCA_JEILINJ=m +CONFIG_USB_GSPCA_JL2005BCD=m +# CONFIG_USB_GSPCA_KINECT is not set +CONFIG_USB_GSPCA_KONICA=m +CONFIG_USB_GSPCA_MARS=m +CONFIG_USB_GSPCA_MR97310A=m +CONFIG_USB_GSPCA_NW80X=m +CONFIG_USB_GSPCA_OV519=m +CONFIG_USB_GSPCA_OV534=m +CONFIG_USB_GSPCA_OV534_9=m +CONFIG_USB_GSPCA_PAC207=m +CONFIG_USB_GSPCA_PAC7302=m +CONFIG_USB_GSPCA_PAC7311=m +CONFIG_USB_GSPCA_SE401=m +CONFIG_USB_GSPCA_SN9C2028=m +CONFIG_USB_GSPCA_SN9C20X=m +CONFIG_USB_GSPCA_SONIXB=m +CONFIG_USB_GSPCA_SONIXJ=m +CONFIG_USB_GSPCA_SPCA500=m +CONFIG_USB_GSPCA_SPCA501=m +CONFIG_USB_GSPCA_SPCA505=m +CONFIG_USB_GSPCA_SPCA506=m +CONFIG_USB_GSPCA_SPCA508=m +CONFIG_USB_GSPCA_SPCA561=m +CONFIG_USB_GSPCA_SPCA1528=m +CONFIG_USB_GSPCA_SQ905=m +CONFIG_USB_GSPCA_SQ905C=m +CONFIG_USB_GSPCA_SQ930X=m +CONFIG_USB_GSPCA_STK014=m +CONFIG_USB_GSPCA_STV0680=m +CONFIG_USB_GSPCA_SUNPLUS=m +CONFIG_USB_GSPCA_T613=m +CONFIG_USB_GSPCA_TOPRO=m +CONFIG_USB_GSPCA_TV8532=m +CONFIG_USB_GSPCA_VC032X=m +CONFIG_USB_GSPCA_VICAM=m +CONFIG_USB_GSPCA_XIRLINK_CIT=m +CONFIG_USB_GSPCA_ZC3XX=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_PWC_INPUT_EVDEV=y +# CONFIG_VIDEO_CPIA2 is not set +CONFIG_USB_ZR364XX=m +CONFIG_USB_STKWEBCAM=m +CONFIG_USB_S2255=m +# CONFIG_USB_SN9C102 is not set + +# +# Analog TV USB devices +# +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_SYSFS=y +CONFIG_VIDEO_PVRUSB2_DVB=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_HDPVR=m +CONFIG_VIDEO_TLG2300=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_STK1160=m +CONFIG_VIDEO_STK1160_AC97=y + +# +# Analog/digital TV USB devices +# +CONFIG_VIDEO_AU0828=m +CONFIG_VIDEO_AU0828_V4L2=y +CONFIG_VIDEO_CX231XX=m +CONFIG_VIDEO_CX231XX_RC=y +CONFIG_VIDEO_CX231XX_ALSA=m +CONFIG_VIDEO_CX231XX_DVB=m +CONFIG_VIDEO_TM6000=m +CONFIG_VIDEO_TM6000_ALSA=m +CONFIG_VIDEO_TM6000_DVB=m + +# +# Digital TV USB devices +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_DIBUSB_MB=m +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_CXUSB=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_USB_PCTV452E=m +CONFIG_DVB_USB_DW2102=m +CONFIG_DVB_USB_CINERGY_T2=m +CONFIG_DVB_USB_DTV5100=m +CONFIG_DVB_USB_FRIIO=m +CONFIG_DVB_USB_AZ6027=m +CONFIG_DVB_USB_TECHNISAT_USB2=m +CONFIG_DVB_USB_V2=m +CONFIG_DVB_USB_AF9015=m +CONFIG_DVB_USB_AF9035=m +CONFIG_DVB_USB_ANYSEE=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_AZ6007=m +CONFIG_DVB_USB_CE6230=m +CONFIG_DVB_USB_EC168=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_IT913X=m +CONFIG_DVB_USB_LME2510=m +CONFIG_DVB_USB_MXL111SF=m +CONFIG_DVB_USB_RTL28XXU=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_SMS_USB_DRV=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set + +# +# Webcam, TV (analog/digital) USB devices +# +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_ALSA=m +CONFIG_VIDEO_EM28XX_DVB=m +CONFIG_VIDEO_EM28XX_RC=m +CONFIG_MEDIA_PCI_SUPPORT=y + +# +# Media capture support +# +# CONFIG_VIDEO_MEYE is not set + +# +# Media capture/analog TV support +# +CONFIG_VIDEO_IVTV=m +# CONFIG_VIDEO_IVTV_ALSA is not set +CONFIG_VIDEO_FB_IVTV=m +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_HEXIUM_GEMINI is not set +# CONFIG_VIDEO_HEXIUM_ORION is not set +# CONFIG_VIDEO_MXB is not set + +# +# Media capture/analog/hybrid TV support +# +CONFIG_VIDEO_CX18=m +CONFIG_VIDEO_CX18_ALSA=m +CONFIG_VIDEO_CX23885=m +CONFIG_MEDIA_ALTERA_CI=m +# CONFIG_VIDEO_CX25821 is not set +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_CX88_MPEG=m +CONFIG_VIDEO_BT848=m +CONFIG_DVB_BT8XX=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +CONFIG_VIDEO_SAA7134_RC=y +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_SAA7164=m + +# +# Media digital TV PCI Adapters +# +CONFIG_DVB_AV7110=m +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET_CORE=m +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_PATCH=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set +CONFIG_DVB_PLUTO2=m +CONFIG_DVB_DM1105=m +CONFIG_DVB_PT1=m +CONFIG_MANTIS_CORE=m +CONFIG_DVB_MANTIS=m +CONFIG_DVB_HOPPER=m +CONFIG_DVB_NGENE=m +CONFIG_DVB_DDBRIDGE=m +# CONFIG_V4L_PLATFORM_DRIVERS is not set +# CONFIG_V4L_MEM2MEM_DRIVERS is not set +# CONFIG_V4L_TEST_DRIVERS is not set + +# +# Supported MMC/SDIO adapters +# +CONFIG_SMS_SDIO_DRV=m +# CONFIG_MEDIA_PARPORT_SUPPORT is not set +# CONFIG_RADIO_ADAPTERS is not set + +# +# Supported FireWire (IEEE 1394) Adapters +# +CONFIG_DVB_FIREDTV=m +CONFIG_DVB_FIREDTV_INPUT=y +CONFIG_MEDIA_COMMON_OPTIONS=y + +# +# common driver options +# +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_CYPRESS_FIRMWARE=m +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_SMS_SIANO_MDTV=m +CONFIG_SMS_SIANO_RC=y +# CONFIG_SMS_SIANO_DEBUGFS is not set + +# +# Media ancillary drivers (tuners, sensors, i2c, frontends) +# +CONFIG_MEDIA_SUBDRV_AUTOSELECT=y +CONFIG_MEDIA_ATTACH=y +CONFIG_VIDEO_IR_I2C=m + +# +# Audio decoders, processors and mixers +# +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS5345=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_VP27SMPX=m + +# +# RDS decoders +# +CONFIG_VIDEO_SAA6588=m + +# +# Video decoders +# +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_TVP5150=m + +# +# Video and audio decoders +# +CONFIG_VIDEO_SAA717X=m +CONFIG_VIDEO_CX25840=m + +# +# Video encoders +# +CONFIG_VIDEO_SAA7127=m + +# +# Camera sensor devices +# +CONFIG_VIDEO_MT9V011=m + +# +# Flash devices +# + +# +# Video improvement chips +# +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m + +# +# Miscelaneous helper chips +# +CONFIG_VIDEO_M52790=m + +# +# Sensors used on soc_camera driver +# +CONFIG_MEDIA_TUNER=m +CONFIG_MEDIA_TUNER_SIMPLE=m +CONFIG_MEDIA_TUNER_TDA8290=m +CONFIG_MEDIA_TUNER_TDA827X=m +CONFIG_MEDIA_TUNER_TDA18271=m +CONFIG_MEDIA_TUNER_TDA9887=m +CONFIG_MEDIA_TUNER_TEA5761=m +CONFIG_MEDIA_TUNER_TEA5767=m +CONFIG_MEDIA_TUNER_MT20XX=m +CONFIG_MEDIA_TUNER_MT2060=m +CONFIG_MEDIA_TUNER_MT2063=m +CONFIG_MEDIA_TUNER_MT2266=m +CONFIG_MEDIA_TUNER_MT2131=m +CONFIG_MEDIA_TUNER_QT1010=m +CONFIG_MEDIA_TUNER_XC2028=m +CONFIG_MEDIA_TUNER_XC5000=m +CONFIG_MEDIA_TUNER_XC4000=m +CONFIG_MEDIA_TUNER_MXL5005S=m +CONFIG_MEDIA_TUNER_MXL5007T=m +CONFIG_MEDIA_TUNER_MC44S803=m +CONFIG_MEDIA_TUNER_MAX2165=m +CONFIG_MEDIA_TUNER_TDA18218=m +CONFIG_MEDIA_TUNER_FC0011=m +CONFIG_MEDIA_TUNER_FC0012=m +CONFIG_MEDIA_TUNER_FC0013=m +CONFIG_MEDIA_TUNER_TDA18212=m +CONFIG_MEDIA_TUNER_E4000=m +CONFIG_MEDIA_TUNER_FC2580=m +CONFIG_MEDIA_TUNER_TUA9001=m +CONFIG_MEDIA_TUNER_IT913X=m +CONFIG_MEDIA_TUNER_R820T=m + +# +# Multistandard (satellite) frontends +# +CONFIG_DVB_STB0899=m +CONFIG_DVB_STB6100=m +CONFIG_DVB_STV090x=m +CONFIG_DVB_STV6110x=m + +# +# Multistandard (cable + terrestrial) frontends +# +CONFIG_DVB_DRXK=m +CONFIG_DVB_TDA18271C2DD=m + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_MT312=m +CONFIG_DVB_ZL10036=m +CONFIG_DVB_ZL10039=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_STV0288=m +CONFIG_DVB_STB6000=m +CONFIG_DVB_STV0299=m +CONFIG_DVB_STV6110=m +CONFIG_DVB_STV0900=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_TDA10086=m +CONFIG_DVB_TDA8261=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_TUNER_ITD1000=m +CONFIG_DVB_TUNER_CX24113=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TUA6100=m +CONFIG_DVB_CX24116=m +CONFIG_DVB_SI21XX=m +CONFIG_DVB_TS2020=m +CONFIG_DVB_DS3000=m +CONFIG_DVB_MB86A16=m +CONFIG_DVB_TDA10071=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_DRXD=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m +CONFIG_DVB_TDA10048=m +CONFIG_DVB_AF9013=m +CONFIG_DVB_EC100=m +CONFIG_DVB_STV0367=m +CONFIG_DVB_CXD2820R=m +CONFIG_DVB_RTL2830=m +CONFIG_DVB_RTL2832=m + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_VES1820=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m +CONFIG_DVB_LGDT3305=m +CONFIG_DVB_LG2160=m +CONFIG_DVB_S5H1409=m +CONFIG_DVB_AU8522=m +CONFIG_DVB_AU8522_DTV=m +CONFIG_DVB_AU8522_V4L=m +CONFIG_DVB_S5H1411=m + +# +# ISDB-T (terrestrial) frontends +# +CONFIG_DVB_S921=m +CONFIG_DVB_DIB8000=m +CONFIG_DVB_MB86A20S=m + +# +# Digital terrestrial only tuners/PLL +# +CONFIG_DVB_PLL=m +CONFIG_DVB_TUNER_DIB0070=m +CONFIG_DVB_TUNER_DIB0090=m + +# +# SEC control devices for DVB-S +# +CONFIG_DVB_LNBP21=m +CONFIG_DVB_LNBP22=m +CONFIG_DVB_ISL6405=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_ISL6423=m +CONFIG_DVB_A8293=m +CONFIG_DVB_LGS8GXX=m +CONFIG_DVB_ATBM8830=m +CONFIG_DVB_TDA665x=m +CONFIG_DVB_IX2505V=m +CONFIG_DVB_IT913X_FE=m +CONFIG_DVB_M88RS2000=m +CONFIG_DVB_AF9033=m + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set + +# +# Graphics support +# +CONFIG_AGP=y +CONFIG_AGP_ALI=y +CONFIG_AGP_ATI=y +CONFIG_AGP_AMD=y +CONFIG_AGP_AMD64=y +CONFIG_AGP_INTEL=y +CONFIG_AGP_NVIDIA=y +CONFIG_AGP_SIS=y +CONFIG_AGP_SWORKS=y +CONFIG_AGP_VIA=y +CONFIG_AGP_EFFICEON=y +CONFIG_INTEL_GTT=y +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=64 +CONFIG_VGA_SWITCHEROO=y +CONFIG_DRM=m +CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_DP_AUX_CHARDEV is not set +CONFIG_DRM_KMS_HELPER=m +CONFIG_DRM_KMS_FB_HELPER=y +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_TTM=m + +# +# I2C encoder or helper chips +# +# CONFIG_DRM_I2C_ADV7511 is not set +CONFIG_DRM_I2C_CH7006=m +CONFIG_DRM_I2C_SIL164=m +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_TDFX is not set +# CONFIG_DRM_R128 is not set +CONFIG_DRM_RADEON=m +# CONFIG_DRM_RADEON_USERPTR is not set +CONFIG_DRM_AMDGPU=m +# CONFIG_DRM_AMDGPU_CIK is not set +# CONFIG_DRM_AMDGPU_USERPTR is not set +CONFIG_DRM_AMD_POWERPLAY=y + +# +# ACP (Audio CoProcessor) Configuration +# +# CONFIG_DRM_AMD_ACP is not set +CONFIG_DRM_NOUVEAU=m +CONFIG_NOUVEAU_DEBUG=5 +CONFIG_NOUVEAU_DEBUG_DEFAULT=3 +CONFIG_DRM_NOUVEAU_BACKLIGHT=y +# CONFIG_DRM_I810 is not set +CONFIG_DRM_I915=m +# CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set +CONFIG_DRM_I915_USERPTR=y +# CONFIG_DRM_MGA is not set +# CONFIG_DRM_SIS is not set +# CONFIG_DRM_VIA is not set +# CONFIG_DRM_SAVAGE is not set +CONFIG_DRM_VMWGFX=m +CONFIG_DRM_VMWGFX_FBCON=y +CONFIG_DRM_GMA500=m +CONFIG_DRM_GMA600=y +CONFIG_DRM_GMA3600=y +CONFIG_DRM_UDL=m +CONFIG_DRM_AST=m +CONFIG_DRM_MGAG200=m +CONFIG_DRM_CIRRUS_QEMU=m +CONFIG_DRM_QXL=m +CONFIG_DRM_BOCHS=m +CONFIG_DRM_VIRTIO_GPU=m +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +CONFIG_VGASTATE=m +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_HDMI=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB_DDC=m +CONFIG_FB_BOOT_VESA_SUPPORT=y +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_IMAGEBLIT=m +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_FB_TILEBLITTING=y + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ARC is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_VGA16 is not set +# CONFIG_FB_UVESA is not set +CONFIG_FB_VESA=y +CONFIG_FB_EFI=y +# CONFIG_FB_N411 is not set +# CONFIG_FB_HGA is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I740 is not set +CONFIG_FB_I810=m +CONFIG_FB_I810_GTF=y +CONFIG_FB_I810_I2C=y +# CONFIG_FB_LE80578 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_VIA is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_LX=y +CONFIG_FB_GEODE_GX=y +# CONFIG_FB_GEODE_GX1 is not set +# CONFIG_FB_TMIO is not set +# CONFIG_FB_SM501 is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_VIRTUAL is not set +CONFIG_XEN_FBDEV_FRONTEND=m +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_BROADSHEET is not set +# CONFIG_FB_AUO_K190X is not set +CONFIG_FB_HYPERV=m +# CONFIG_EXYNOS_VIDEO is not set +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +# CONFIG_LCD_L4F00242T03 is not set +# CONFIG_LCD_LMS283GF05 is not set +# CONFIG_LCD_LTV350QV is not set +# CONFIG_LCD_ILI922X is not set +# CONFIG_LCD_ILI9320 is not set +# CONFIG_LCD_TDO24M is not set +# CONFIG_LCD_VGG2432A4 is not set +CONFIG_LCD_PLATFORM=m +# CONFIG_LCD_S6E63M0 is not set +# CONFIG_LCD_LD9040 is not set +# CONFIG_LCD_AMS369FG06 is not set +# CONFIG_LCD_LMS501KF03 is not set +# CONFIG_LCD_HX8357 is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +# CONFIG_BACKLIGHT_PWM is not set +CONFIG_BACKLIGHT_APPLE=m +# CONFIG_BACKLIGHT_SAHARA is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630 is not set +# CONFIG_BACKLIGHT_LM3639 is not set +CONFIG_BACKLIGHT_LP855X=m + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_VGACON_SOFT_SCROLLBACK=y +CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64 +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_LOGO_LINUX_CLUT224=y +CONFIG_SOUND=m +CONFIG_SOUND_OSS_CORE=y +CONFIG_SOUND_OSS_CORE_PRECLAIM=y +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_PCM_ELD=y +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_COMPRESS_OFFLOAD=m +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_OSSEMUL=y +# CONFIG_SND_MIXER_OSS is not set +# CONFIG_SND_PCM_OSS is not set +CONFIG_SND_PCM_TIMER=y +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_HRTIMER=m +CONFIG_SND_SEQ_HRTIMER_DEFAULT=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +# CONFIG_SND_SUPPORT_OLD_API is not set +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set +CONFIG_SND_VMASTER=y +CONFIG_SND_DMA_SGBUF=y +CONFIG_SND_RAWMIDI_SEQ=m +CONFIG_SND_OPL3_LIB_SEQ=m +# CONFIG_SND_OPL4_LIB_SEQ is not set +# CONFIG_SND_SBAWE_SEQ is not set +CONFIG_SND_EMU10K1_SEQ=m +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DRIVERS=y +CONFIG_SND_PCSP=m +CONFIG_SND_DUMMY=m +CONFIG_SND_ALOOP=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +# CONFIG_SND_MTS64 is not set +# CONFIG_SND_SERIAL_U16550 is not set +CONFIG_SND_MPU401=m +# CONFIG_SND_PORTMAN2X4 is not set +CONFIG_SND_AC97_POWER_SAVE=y +CONFIG_SND_AC97_POWER_SAVE_DEFAULT=5 +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SB16_DSP=m +CONFIG_SND_TEA575X=m +CONFIG_SND_PCI=y +CONFIG_SND_AD1889=m +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALS4000 is not set +CONFIG_SND_ALI5451=m +CONFIG_SND_ASIHPI=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_OXYGEN_LIB=m +CONFIG_SND_OXYGEN=m +# CONFIG_SND_CS4281 is not set +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_CTXFI=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_INDIGOIOX=m +CONFIG_SND_INDIGODJX=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +# CONFIG_SND_ES1938 is not set +CONFIG_SND_ES1968=m +CONFIG_SND_ES1968_INPUT=y +CONFIG_SND_ES1968_RADIO=y +# CONFIG_SND_FM801 is not set +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_LOLA=m +CONFIG_SND_LX6464ES=m +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MAESTRO3_INPUT=y +CONFIG_SND_MIXART=m +# CONFIG_SND_NM256 is not set +CONFIG_SND_PCXHR=m +# CONFIG_SND_RIPTIDE is not set +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SIS7019=m +# CONFIG_SND_SONICVIBES is not set +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VIRTUOSO=m +CONFIG_SND_VX222=m +# CONFIG_SND_YMFPCI is not set + +# +# HD-Audio +# +CONFIG_SND_HDA=m +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_HWDEP=y +CONFIG_SND_HDA_RECONFIG=y +CONFIG_SND_HDA_INPUT_BEEP=y +CONFIG_SND_HDA_INPUT_BEEP_MODE=0 +CONFIG_SND_HDA_PATCH_LOADER=y +CONFIG_SND_HDA_CODEC_REALTEK=m +CONFIG_SND_HDA_CODEC_ANALOG=m +CONFIG_SND_HDA_CODEC_SIGMATEL=m +CONFIG_SND_HDA_CODEC_VIA=m +CONFIG_SND_HDA_CODEC_HDMI=m +CONFIG_SND_HDA_CODEC_CIRRUS=m +CONFIG_SND_HDA_CODEC_CONEXANT=m +CONFIG_SND_HDA_CODEC_CA0110=m +CONFIG_SND_HDA_CODEC_CA0132=m +CONFIG_SND_HDA_CODEC_CA0132_DSP=y +CONFIG_SND_HDA_CODEC_CMEDIA=m +CONFIG_SND_HDA_CODEC_SI3054=m +CONFIG_SND_HDA_GENERIC=m +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 +CONFIG_SND_HDA_CORE=m +CONFIG_SND_HDA_DSP_LOADER=y +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_EXT_CORE=m +CONFIG_SND_HDA_PREALLOC_SIZE=512 +CONFIG_SND_SPI=y +CONFIG_SND_USB=y +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_US122L=m +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m +CONFIG_SND_BCD2000=m +CONFIG_SND_USB_LINE6=m +CONFIG_SND_USB_POD=m +CONFIG_SND_USB_PODHD=m +CONFIG_SND_USB_TONEPORT=m +CONFIG_SND_USB_VARIAX=m +CONFIG_SND_FIREWIRE=y +CONFIG_SND_FIREWIRE_LIB=m +CONFIG_SND_FIREWIRE_SPEAKERS=m +CONFIG_SND_ISIGHT=m +CONFIG_SND_SCS1X=m +CONFIG_SND_SOC=m +CONFIG_SND_SOC_COMPRESS=y +CONFIG_SND_SOC_TOPOLOGY=y +CONFIG_SND_SST_MFLD_PLATFORM=m +CONFIG_SND_SST_IPC=m +CONFIG_SND_SST_IPC_ACPI=m +CONFIG_SND_SOC_INTEL_SST=m +CONFIG_SND_SOC_INTEL_SST_ACPI=m +CONFIG_SND_SOC_INTEL_SST_MATCH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m +CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m +CONFIG_SND_SOC_INTEL_SKYLAKE=m +CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m +CONFIG_SND_SOC_I2C_AND_SPI=m + +# +# CODEC drivers +# +CONFIG_SND_SOC_DMIC=m +CONFIG_SND_SOC_HDAC_HDMI=m +CONFIG_SND_SOC_RL6231=m +CONFIG_SND_SOC_RL6347A=m +CONFIG_SND_SOC_RT286=m +CONFIG_SND_SOC_RT5640=m +CONFIG_SND_SOC_RT5651=m +CONFIG_SND_SOC_SSM4567=m +CONFIG_SND_SOC_TS3A227E=m +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID support +# +CONFIG_HID=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=m +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +CONFIG_HID_A4TECH=y +CONFIG_HID_ACRUX=m +# CONFIG_HID_ACRUX_FF is not set +CONFIG_HID_APPLE=y +CONFIG_HID_APPLEIR=m +CONFIG_HID_AUREAL=m +CONFIG_HID_BELKIN=y +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=y +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CYPRESS=y +CONFIG_HID_DRAGONRISE=m +# CONFIG_DRAGONRISE_FF is not set +# CONFIG_HID_EMS_FF is not set +CONFIG_HID_ELECOM=m +CONFIG_HID_EZKEY=y +CONFIG_HID_HOLTEK=m +# CONFIG_HOLTEK_FF is not set +CONFIG_HID_KEYTOUCH=m +CONFIG_HID_KYE=m +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=m +CONFIG_HID_GYRATION=m +CONFIG_HID_ICADE=m +CONFIG_HID_TWINHAN=m +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LCPOWER=m +CONFIG_HID_LENOVO_TPKBD=m +CONFIG_HID_LOGITECH=y +CONFIG_HID_LOGITECH_DJ=m +# CONFIG_LOGITECH_FF is not set +# CONFIG_LOGIRUMBLEPAD2_FF is not set +# CONFIG_LOGIG940_FF is not set +# CONFIG_LOGIWHEELS_FF is not set +CONFIG_HID_MAGICMOUSE=y +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MONTEREY=y +CONFIG_HID_MULTITOUCH=m +CONFIG_HID_NTRIG=y +CONFIG_HID_ORTEK=m +CONFIG_HID_PANTHERLORD=m +# CONFIG_PANTHERLORD_FF is not set +CONFIG_HID_PETALYNX=m +CONFIG_HID_PICOLCD=m +CONFIG_HID_PICOLCD_FB=y +CONFIG_HID_PICOLCD_BACKLIGHT=y +CONFIG_HID_PICOLCD_LCD=y +CONFIG_HID_PICOLCD_LEDS=y +CONFIG_HID_PICOLCD_CIR=y +CONFIG_HID_PRIMAX=m +CONFIG_HID_PS3REMOTE=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +CONFIG_HID_SPEEDLINK=m +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=m +CONFIG_HID_RMI=m +CONFIG_HID_GREENASIA=m +# CONFIG_GREENASIA_FF is not set +CONFIG_HID_HYPERV_MOUSE=m +CONFIG_HID_SMARTJOYPLUS=m +# CONFIG_SMARTJOYPLUS_FF is not set +CONFIG_HID_TIVO=m +CONFIG_HID_TOPSEED=m +CONFIG_HID_THINGM=m +CONFIG_HID_THRUSTMASTER=m +# CONFIG_THRUSTMASTER_FF is not set +CONFIG_HID_WACOM=m +CONFIG_HID_WIIMOTE=m +CONFIG_HID_WIIMOTE_EXT=y +CONFIG_HID_ZEROPLUS=m +# CONFIG_ZEROPLUS_FF is not set +CONFIG_HID_ZYDACRON=m +# CONFIG_HID_SENSOR_HUB is not set + +# +# USB HID support +# +CONFIG_USB_HID=y +CONFIG_HID_PID=y +CONFIG_USB_HIDDEV=y + +# +# I2C HID support +# +CONFIG_I2C_HID=m +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_OTG is not set +# CONFIG_USB_OTG_WHITELIST is not set +# CONFIG_USB_OTG_FSM is not set +# CONFIG_USB_ULPI_BUS is not set +CONFIG_USB_MON=y +CONFIG_USB_WUSB=m +CONFIG_USB_WUSB_CBAF=m +# CONFIG_USB_WUSB_CBAF_DEBUG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +# CONFIG_USB_XHCI_PLATFORM is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +# CONFIG_USB_EHCI_HCD_PLATFORM is not set +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_ISP1760_HCD is not set +# CONFIG_USB_ISP1362_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set +# CONFIG_USB_MAX3421_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +# CONFIG_USB_OHCI_HCD_PLATFORM is not set +CONFIG_USB_UHCI_HCD=y +# CONFIG_USB_U132_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_WHCI_HCD is not set +CONFIG_USB_HWA_HCD=m +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_SSB is not set +# CONFIG_USB_HCD_TEST_MODE is not set + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_WDM=m +CONFIG_USB_TMC=m + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_REALTEK=m +CONFIG_REALTEK_AUTOPM=y +CONFIG_USB_STORAGE_DATAFAB=m +CONFIG_USB_STORAGE_FREECOM=m +CONFIG_USB_STORAGE_ISD200=m +CONFIG_USB_STORAGE_USBAT=m +CONFIG_USB_STORAGE_SDDR09=m +CONFIG_USB_STORAGE_SDDR55=m +CONFIG_USB_STORAGE_JUMPSHOT=m +CONFIG_USB_STORAGE_ALAUDA=m +CONFIG_USB_STORAGE_ONETOUCH=m +CONFIG_USB_STORAGE_KARMA=m +CONFIG_USB_STORAGE_CYPRESS_ATACB=m +CONFIG_USB_STORAGE_ENE_UB6250=m +CONFIG_USB_UAS=m + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +# CONFIG_USB_DWC3 is not set +# CONFIG_USB_CHIPIDEA is not set + +# +# USB port drivers +# +CONFIG_USB_USS720=m +CONFIG_USB_SERIAL=y +CONFIG_USB_SERIAL_CONSOLE=y +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_SIMPLE is not set +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +# CONFIG_USB_SERIAL_F81232 is not set +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +# CONFIG_USB_SERIAL_METRO is not set +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7715_PARPORT=y +CONFIG_USB_SERIAL_MOS7840=m +# CONFIG_USB_SERIAL_MXUPORT is not set +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +# CONFIG_USB_SERIAL_WISHBONE is not set +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_DEBUG=m + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_SEVSEG=m +# CONFIG_USB_RIO500 is not set +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_LED=m +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_SISUSBVGA=m +CONFIG_USB_SISUSBVGA_CON=y +CONFIG_USB_LD=m +# CONFIG_USB_TRANCEVIBRATOR is not set +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +CONFIG_USB_ISIGHTFW=m +# CONFIG_USB_YUREX is not set +CONFIG_USB_EZUSB_FX2=m +CONFIG_USB_HSIC_USB3503=m +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m +# CONFIG_USB_PHY is not set +# CONFIG_USB_GADGET is not set +# CONFIG_USB_LED_TRIG is not set +CONFIG_UWB=m +CONFIG_UWB_HWA=m +CONFIG_UWB_WHCI=m +CONFIG_UWB_I1480U=m +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set + +# +# MMC/SD/SDIO Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_MINORS=8 +CONFIG_MMC_BLOCK_BOUNCE=y +CONFIG_SDIO_UART=m +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +CONFIG_MMC_SDHCI=m +CONFIG_MMC_SDHCI_PCI=m +CONFIG_MMC_RICOH_MMC=y +CONFIG_MMC_SDHCI_ACPI=m +CONFIG_MMC_SDHCI_PLTFM=m +# CONFIG_MMC_WBSD is not set +CONFIG_MMC_TIFM_SD=m +CONFIG_MMC_CB710=m +CONFIG_MMC_VIA_SDMMC=m +CONFIG_MMC_VUB300=m +CONFIG_MMC_USHC=m +# CONFIG_MMC_USDHI6ROL0 is not set +CONFIG_MMC_REALTEK_PCI=m +CONFIG_MMC_REALTEK_USB=m +# CONFIG_MMC_TOSHIBA_PCI is not set +# CONFIG_MMC_MTK is not set +CONFIG_MEMSTICK=m +# CONFIG_MEMSTICK_DEBUG is not set + +# +# MemoryStick drivers +# +# CONFIG_MEMSTICK_UNSAFE_RESUME is not set +CONFIG_MSPRO_BLOCK=m + +# +# MemoryStick Host Controller Drivers +# +CONFIG_MEMSTICK_TIFM_MS=m +CONFIG_MEMSTICK_JMICRON_38X=m +CONFIG_MEMSTICK_R592=m +CONFIG_MEMSTICK_REALTEK_PCI=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_LM3530=m +# CONFIG_LEDS_LM3642 is not set +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA9532_GPIO=y +CONFIG_LEDS_GPIO=m +CONFIG_LEDS_LP3944=m +CONFIG_LEDS_LP55XX_COMMON=m +CONFIG_LEDS_LP5521=m +CONFIG_LEDS_LP5523=m +CONFIG_LEDS_LP5562=m +CONFIG_LEDS_CLEVO_MAIL=m +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA9633 is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_PWM is not set +# CONFIG_LEDS_BD2802 is not set +CONFIG_LEDS_INTEL_SS4200=m +CONFIG_LEDS_LT3593=m +CONFIG_LEDS_DELL_NETBOOKS=m +# CONFIG_LEDS_RENESAS_TPU is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_OT200 is not set +CONFIG_LEDS_BLINKM=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_ONESHOT=m +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_LEDS_TRIGGER_BACKLIGHT=m +# CONFIG_LEDS_TRIGGER_CPU is not set +CONFIG_LEDS_TRIGGER_GPIO=m +CONFIG_LEDS_TRIGGER_DEFAULT_ON=m + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=m +CONFIG_LEDS_TRIGGER_CAMERA=m +# CONFIG_ACCESSIBILITY is not set +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_ON_DEMAND_PAGING=y +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +# CONFIG_INFINIBAND_AMSO1100 is not set +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_INFINIBAND_CXGB4=m +CONFIG_INFINIBAND_I40IW=m +CONFIG_MLX4_INFINIBAND=m +CONFIG_MLX5_INFINIBAND=m +CONFIG_INFINIBAND_NES=m +# CONFIG_INFINIBAND_NES_DEBUG is not set +CONFIG_INFINIBAND_OCRDMA=m +CONFIG_INFINIBAND_USNIC=m +CONFIG_INFINIBAND_IPOIB=m +CONFIG_INFINIBAND_IPOIB_CM=y +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +CONFIG_INFINIBAND_SRP=m +CONFIG_INFINIBAND_SRPT=m +CONFIG_INFINIBAND_ISER=m +CONFIG_INFINIBAND_ISERT=m +CONFIG_EDAC=y +CONFIG_EDAC_LEGACY_SYSFS=y +# CONFIG_EDAC_DEBUG is not set +CONFIG_EDAC_DECODE_MCE=m +# CONFIG_EDAC_MCE_INJ is not set +CONFIG_EDAC_MM_EDAC=m +CONFIG_EDAC_AMD76X=m +CONFIG_EDAC_E7XXX=m +CONFIG_EDAC_E752X=m +CONFIG_EDAC_I82875P=m +CONFIG_EDAC_I82975X=m +CONFIG_EDAC_I3000=m +CONFIG_EDAC_I3200=m +CONFIG_EDAC_IE31200=m +CONFIG_EDAC_X38=m +CONFIG_EDAC_I5400=m +CONFIG_EDAC_I7CORE=m +CONFIG_EDAC_I82860=m +CONFIG_EDAC_R82600=m +CONFIG_EDAC_I5000=m +CONFIG_EDAC_I5100=m +CONFIG_EDAC_I7300=m +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +# CONFIG_RTC_SYSTOHC is not set +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1374=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_DS3232=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_ISL12022=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8523=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y +CONFIG_RTC_DRV_BQ32K=m +# CONFIG_RTC_DRV_S35390A is not set +CONFIG_RTC_DRV_FM3130=m +CONFIG_RTC_DRV_RX8581=m +CONFIG_RTC_DRV_RX8025=m +CONFIG_RTC_DRV_EM3027=m +CONFIG_RTC_DRV_RV3029C2=m + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_DS3234 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +CONFIG_RTC_DRV_RX4581=m + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=y +CONFIG_RTC_DRV_DS1286=m +CONFIG_RTC_DRV_DS1511=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_STK17TA8=m +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_M48T35=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_MSM6242=m +CONFIG_RTC_DRV_BQ4802=m +CONFIG_RTC_DRV_RP5C01=m +CONFIG_RTC_DRV_V3020=m +CONFIG_RTC_DRV_DS2404=m + +# +# on-CPU RTC drivers +# + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +# CONFIG_INTEL_MID_DMAC is not set +CONFIG_INTEL_IOATDMA=m +CONFIG_DW_DMAC=m +# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set +CONFIG_IDMA64=m +# CONFIG_TIMB_DMA is not set +CONFIG_PCH_DMA=m +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=m +CONFIG_DMA_ACPI=y + +# +# DMA Clients +# +CONFIG_NET_DMA_RH_KABI=y +CONFIG_ASYNC_TX_DMA=y +# CONFIG_DMATEST is not set +CONFIG_DCA=m +CONFIG_AUXDISPLAY=y +CONFIG_KS0108=m +CONFIG_KS0108_PORT=0x378 +CONFIG_KS0108_DELAY=2 +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_UIO=m +CONFIG_UIO_CIF=m +CONFIG_UIO_PDRV=m +CONFIG_UIO_PDRV_GENIRQ=m +# CONFIG_UIO_DMEM_GENIRQ is not set +CONFIG_UIO_AEC=m +CONFIG_UIO_SERCOS3=m +CONFIG_UIO_PCI_GENERIC=m +# CONFIG_UIO_NETX is not set +CONFIG_VFIO_IOMMU_TYPE1=m +CONFIG_VFIO=m +CONFIG_VFIO_NOIOMMU=y +CONFIG_VFIO_PCI=m +CONFIG_VFIO_PCI_VGA=y +CONFIG_VFIO_PCI_MMAP=y +CONFIG_VFIO_PCI_INTX=y +CONFIG_IRQ_BYPASS_MANAGER=m +# CONFIG_VIRT_DRIVERS is not set +CONFIG_VIRTIO=m + +# +# Virtio drivers +# +CONFIG_VIRTIO_PCI=m +CONFIG_VIRTIO_PCI_LEGACY=y +CONFIG_VIRTIO_BALLOON=m +CONFIG_VIRTIO_INPUT=m +# CONFIG_VIRTIO_MMIO is not set + +# +# Microsoft Hyper-V guest support +# +CONFIG_HYPERV=m +CONFIG_HYPERV_UTILS=m +CONFIG_HYPERV_BALLOON=m + +# +# Xen driver support +# +CONFIG_XEN_BALLOON=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_DEV_EVTCHN=m +CONFIG_XENFS=m +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_XENBUS_FRONTEND=y +# CONFIG_XEN_GNTDEV is not set +# CONFIG_XEN_GRANT_DEV_ALLOC is not set +CONFIG_SWIOTLB_XEN=y +# CONFIG_XEN_TMEM is not set +CONFIG_XEN_PRIVCMD=m +CONFIG_XEN_ACPI_PROCESSOR=m +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_STAGING=y +# CONFIG_ET131X is not set +# CONFIG_SLICOSS is not set +# CONFIG_USBIP_CORE is not set +# CONFIG_W35UND is not set +# CONFIG_PRISM2_USB is not set +# CONFIG_ECHO is not set +# CONFIG_COMEDI is not set +# CONFIG_ASUS_OLED is not set +# CONFIG_PANEL is not set +# CONFIG_R8187SE is not set +# CONFIG_RTL8192U is not set +CONFIG_RTLLIB=m +CONFIG_RTLLIB_CRYPTO_CCMP=m +CONFIG_RTLLIB_CRYPTO_TKIP=m +CONFIG_RTLLIB_CRYPTO_WEP=m +CONFIG_RTL8192E=m +CONFIG_R8712U=m +# CONFIG_RTS5139 is not set +# CONFIG_TRANZPORT is not set +# CONFIG_IDE_PHISON is not set +CONFIG_LINE6_USB=m +CONFIG_LINE6_USB_IMPULSE_RESPONSE=y +# CONFIG_USB_SERIAL_QUATECH2 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set +# CONFIG_DX_SEP is not set +# CONFIG_FB_SM7XX is not set +# CONFIG_CRYSTALHD is not set +# CONFIG_CXT1E1 is not set +# CONFIG_FB_XGI is not set +# CONFIG_ACPI_QUICKSTART is not set +# CONFIG_SBE_2T3E3 is not set +# CONFIG_USB_ENESTORAGE is not set +# CONFIG_BCM_WIMAX is not set +# CONFIG_FT1000 is not set + +# +# Speakup console speech +# +# CONFIG_SPEAKUP is not set +# CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set +# CONFIG_STAGING_MEDIA is not set + +# +# Android +# +# CONFIG_ANDROID is not set +# CONFIG_USB_WPAN_HCD is not set +# CONFIG_WIMAX_GDM72XX is not set +# CONFIG_CSR_WIFI is not set +# CONFIG_NET_VENDOR_SILICOM is not set +# CONFIG_CED1401 is not set +# CONFIG_DGRP is not set +CONFIG_FIREWIRE_SERIAL=m +# CONFIG_ZCACHE is not set +# CONFIG_USB_DWC2 is not set +CONFIG_X86_PLATFORM_DEVICES=y +CONFIG_ACER_WMI=m +CONFIG_ACERHDF=m +CONFIG_ASUS_LAPTOP=m +CONFIG_CHROMEOS_LAPTOP=m +CONFIG_DELL_LAPTOP=m +CONFIG_DELL_WMI=m +CONFIG_DELL_WMI_AIO=m +CONFIG_FUJITSU_LAPTOP=m +# CONFIG_FUJITSU_LAPTOP_DEBUG is not set +CONFIG_FUJITSU_TABLET=m +CONFIG_AMILO_RFKILL=m +CONFIG_TC1100_WMI=m +CONFIG_HP_ACCEL=m +CONFIG_HP_WIRELESS=m +CONFIG_HP_WMI=m +CONFIG_MSI_LAPTOP=m +CONFIG_PANASONIC_LAPTOP=m +CONFIG_COMPAL_LAPTOP=m +CONFIG_SONY_LAPTOP=m +CONFIG_SONYPI_COMPAT=y +CONFIG_IDEAPAD_LAPTOP=m +CONFIG_THINKPAD_ACPI=m +CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y +# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set +# CONFIG_THINKPAD_ACPI_DEBUG is not set +# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set +CONFIG_THINKPAD_ACPI_VIDEO=y +CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y +CONFIG_SENSORS_HDAPS=m +# CONFIG_INTEL_MENLOW is not set +CONFIG_EEEPC_LAPTOP=m +CONFIG_ASUS_WMI=m +CONFIG_ASUS_NB_WMI=m +CONFIG_EEEPC_WMI=m +CONFIG_ACPI_WMI=m +CONFIG_MSI_WMI=m +CONFIG_TOPSTAR_LAPTOP=m +CONFIG_ACPI_TOSHIBA=m +CONFIG_TOSHIBA_BT_RFKILL=m +CONFIG_ACPI_CMPC=m +CONFIG_INTEL_IPS=m +# CONFIG_IBM_RTL is not set +CONFIG_XO15_EBOOK=m +CONFIG_SAMSUNG_LAPTOP=m +CONFIG_MXM_WMI=m +CONFIG_INTEL_OAKTRAIL=m +CONFIG_SAMSUNG_Q10=m +CONFIG_APPLE_GMUX=m +CONFIG_PVPANIC=y +CONFIG_CLKDEV_LOOKUP=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Common Clock Framework +# +# CONFIG_COMMON_CLK_DEBUG is not set + +# +# Hardware Spinlock drivers +# +CONFIG_CLKSRC_I8253=y +CONFIG_CLKEVT_I8253=y +CONFIG_I8253_LOCK=y +CONFIG_CLKBLD_I8253=y +# CONFIG_MAILBOX is not set +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y +CONFIG_IOMMU_IOVA=y +CONFIG_DMAR_TABLE=y +CONFIG_INTEL_IOMMU=y +# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set +CONFIG_INTEL_IOMMU_FLOPPY_WA=y + +# +# Remoteproc drivers +# +# CONFIG_STE_MODEM_RPROC is not set + +# +# Rpmsg drivers +# +# CONFIG_PM_DEVFREQ is not set +# CONFIG_EXTCON is not set +# CONFIG_MEMORY is not set +# CONFIG_IIO is not set +# CONFIG_VME_BUS is not set +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +CONFIG_PWM_LPSS=m +# CONFIG_IPACK_BUS is not set +# CONFIG_RESET_CONTROLLER is not set +CONFIG_RAS=y +CONFIG_LIBNVDIMM=m +CONFIG_BLK_DEV_PMEM=m +CONFIG_ND_BLK=m +CONFIG_ND_CLAIM=y +CONFIG_ND_BTT=m +CONFIG_BTT=y + +# +# Firmware Drivers +# +CONFIG_EDD=m +# CONFIG_EDD_OFF is not set +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y +CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y +CONFIG_ISCSI_IBFT_FIND=y +CONFIG_ISCSI_IBFT=m +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_VARS=y +CONFIG_EFI_VARS_PSTORE=y +CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y +CONFIG_EFI_RUNTIME_MAP=y +CONFIG_UEFI_CPER=y + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=m +CONFIG_EXT4_USE_FOR_EXT23=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=m +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=m +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_PROC_INFO=y +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=m +# CONFIG_JFS_POSIX_ACL is not set +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set +CONFIG_XFS_FS=m +CONFIG_XFS_QUOTA=y +CONFIG_XFS_POSIX_ACL=y +# CONFIG_XFS_RT is not set +# CONFIG_XFS_WARN is not set +# CONFIG_XFS_DEBUG is not set +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_DLM=y +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_NILFS2_FS is not set +CONFIG_FS_DAX=y +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +CONFIG_FILE_LOCKING=y +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_FANOTIFY=y +CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_PRINT_QUOTA_WARNING=y +# CONFIG_QUOTA_DEBUG is not set +CONFIG_QUOTA_TREE=y +# CONFIG_QFMT_V1 is not set +CONFIG_QFMT_V2=y +CONFIG_QUOTACTL=y +CONFIG_AUTOFS4_FS=y +CONFIG_FUSE_FS=m +CONFIG_CUSE=m +CONFIG_OVERLAY_FS=m +CONFIG_GENERIC_ACL=y + +# +# Caches +# +CONFIG_FSCACHE=m +CONFIG_FSCACHE_STATS=y +# CONFIG_FSCACHE_HISTOGRAM is not set +# CONFIG_FSCACHE_DEBUG is not set +# CONFIG_FSCACHE_OBJECT_LIST is not set +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_HISTOGRAM is not set + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +CONFIG_ECRYPT_FS=m +# CONFIG_ECRYPT_FS_MESSAGING is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +# CONFIG_UBIFS_FS is not set +# CONFIG_LOGFS is not set +CONFIG_CRAMFS=m +CONFIG_SQUASHFS=m +CONFIG_SQUASHFS_XATTR=y +CONFIG_SQUASHFS_ZLIB=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_PSTORE=y +# CONFIG_PSTORE_CONSOLE is not set +# CONFIG_PSTORE_FTRACE is not set +CONFIG_PSTORE_RAM=m +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_EXOFS_FS is not set +# CONFIG_F2FS_FS is not set +CONFIG_EFIVAR_FS=y +CONFIG_ORE=m +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +# CONFIG_NFS_V2 is not set +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +# CONFIG_NFS_SWAP is not set +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_OBJLAYOUT=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_NFS_V4_SECURITY_LABEL=y +CONFIG_NFS_FSCACHE=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFS_DEBUG=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_PNFS=y +# CONFIG_NFSD_BLOCKLAYOUT is not set +CONFIG_NFSD_SCSILAYOUT=y +CONFIG_NFSD_V4_SECURITY_LABEL=y +# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_GRACE_PERIOD=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_RPCSEC_GSS_KRB5=m +CONFIG_SUNRPC_DEBUG=y +CONFIG_SUNRPC_XPRT_RDMA=m +CONFIG_CEPH_FS=m +CONFIG_CEPH_FS_POSIX_ACL=y +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +CONFIG_CIFS_ACL=y +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +CONFIG_CIFS_DFS_UPCALL=y +CONFIG_CIFS_SMB2=y +# CONFIG_CIFS_SMB311 is not set +# CONFIG_CIFS_FSCACHE is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_MAC_ROMAN=m +CONFIG_NLS_MAC_CELTIC=m +CONFIG_NLS_MAC_CENTEURO=m +CONFIG_NLS_MAC_CROATIAN=m +CONFIG_NLS_MAC_CYRILLIC=m +CONFIG_NLS_MAC_GAELIC=m +CONFIG_NLS_MAC_GREEK=m +CONFIG_NLS_MAC_ICELAND=m +CONFIG_NLS_MAC_INUIT=m +CONFIG_NLS_MAC_ROMANIAN=m +CONFIG_NLS_MAC_TURKISH=m +CONFIG_NLS_UTF8=m +CONFIG_DLM=m +CONFIG_DLM_DEBUG=y + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_PRINTK_TIME=y +CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 +# CONFIG_ENABLE_WARN_DEPRECATED is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_FRAME_WARN=2048 +CONFIG_MAGIC_SYSRQ=y +CONFIG_STRIP_ASM_SYMS=y +# CONFIG_READABLE_ASM is not set +# CONFIG_UNUSED_SYMBOLS is not set +CONFIG_DEBUG_FS=y +CONFIG_HEADERS_CHECK=y +CONFIG_DEBUG_SECTION_MISMATCH=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_SHIRQ=y +CONFIG_LOCKUP_DETECTOR=y +CONFIG_HARDLOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y +CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=1 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 +# CONFIG_WQ_WATCHDOG is not set +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_ON_OOPS_VALUE=1 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 +# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set +CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_INFO=y +CONFIG_SCHEDSTATS=y +CONFIG_TIMER_STATS=y +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +CONFIG_STACKTRACE=y +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_DEBUG_KOBJECT is not set +CONFIG_DEBUG_HIGHMEM=y +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_INFO_REDUCED is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_WRITECOUNT is not set +CONFIG_DEBUG_MEMORY_INIT=y +CONFIG_DEBUG_LIST=y +# CONFIG_TEST_LIST_SORT is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +CONFIG_BOOT_PRINTK_DELAY=y + +# +# RCU Debugging +# +CONFIG_SPARSE_RCU_POINTER=y +# CONFIG_RCU_TORTURE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +# CONFIG_RCU_CPU_STALL_INFO is not set +# CONFIG_RCU_TRACE is not set +# CONFIG_KPROBES_SANITY_TEST is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_LKDTM is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +# CONFIG_LATENCYTOP is not set +CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y +# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set +# CONFIG_DEBUG_PAGEALLOC is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACER_MAX_TRACE=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_RING_BUFFER_ALLOW_SWAP=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +CONFIG_FUNCTION_TRACER=y +# CONFIG_FUNCTION_GRAPH_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +CONFIG_SCHED_TRACER=y +CONFIG_FTRACE_SYSCALLS=y +CONFIG_TRACER_SNAPSHOT=y +# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +CONFIG_STACK_TRACER=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_KPROBE_EVENT=y +CONFIG_UPROBE_EVENT=y +CONFIG_PROBE_EVENTS=y +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_FUNCTION_PROFILER=y +CONFIG_FTRACE_MCOUNT_RECORD=y +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_MMIOTRACE is not set +CONFIG_RING_BUFFER_BENCHMARK=m +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_TEST_RHASHTABLE is not set +CONFIG_PROVIDE_OHCI1394_DMA_INIT=y +# CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set +CONFIG_BUILD_DOCSRC=y +CONFIG_DYNAMIC_DEBUG=y +# CONFIG_DMA_API_DEBUG is not set +CONFIG_ATOMIC64_SELFTEST=y +CONFIG_ASYNC_RAID6_TEST=m +# CONFIG_SAMPLES is not set +CONFIG_HAVE_ARCH_KGDB=y +CONFIG_KGDB=y +CONFIG_KGDB_SERIAL_CONSOLE=y +CONFIG_KGDB_TESTS=y +# CONFIG_KGDB_TESTS_ON_BOOT is not set +CONFIG_KGDB_LOW_LEVEL_TRAP=y +CONFIG_KGDB_KDB=y +CONFIG_KDB_KEYBOARD=y +CONFIG_KDB_CONTINUE_CATASTROPHIC=0 +CONFIG_HAVE_ARCH_KMEMCHECK=y +# CONFIG_TEST_STRING_HELPERS is not set +CONFIG_TEST_KSTRTOX=y +CONFIG_STRICT_DEVMEM=y +# CONFIG_X86_VERBOSE_BOOTUP is not set +CONFIG_EARLY_PRINTK=y +CONFIG_EARLY_PRINTK_DBGP=y +CONFIG_DEBUG_STACKOVERFLOW=y +CONFIG_EARLY_PRINTK_EFI=y +# CONFIG_X86_PTDUMP is not set +# CONFIG_DEBUG_RODATA is not set +CONFIG_DEBUG_SET_MODULE_RONX=y +CONFIG_DEBUG_NX_TEST=m +CONFIG_DOUBLEFAULT=y +# CONFIG_DEBUG_TLBFLUSH is not set +# CONFIG_IOMMU_STRESS is not set +CONFIG_HAVE_MMIOTRACE_SUPPORT=y +CONFIG_X86_DECODER_SELFTEST=y +CONFIG_IO_DELAY_TYPE_0X80=0 +CONFIG_IO_DELAY_TYPE_0XED=1 +CONFIG_IO_DELAY_TYPE_UDELAY=2 +CONFIG_IO_DELAY_TYPE_NONE=3 +CONFIG_IO_DELAY_0X80=y +# CONFIG_IO_DELAY_0XED is not set +# CONFIG_IO_DELAY_UDELAY is not set +# CONFIG_IO_DELAY_NONE is not set +CONFIG_DEFAULT_IO_DELAY_TYPE=0 +CONFIG_DEBUG_BOOT_PARAMS=y +# CONFIG_CPA_DEBUG is not set +CONFIG_OPTIMIZE_INLINING=y +# CONFIG_DEBUG_NMI_SELFTEST is not set + +# +# Security options +# +CONFIG_KEYS=y +CONFIG_PERSISTENT_KEYRINGS=y +CONFIG_BIG_KEYS=y +CONFIG_TRUSTED_KEYS=y +CONFIG_ENCRYPTED_KEYS=y +CONFIG_KEYS_DEBUG_PROC_KEYS=y +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_SECURITY=y +CONFIG_SECURITYFS=y +CONFIG_SECURITY_NETWORK=y +CONFIG_SECURITY_NETWORK_XFRM=y +CONFIG_SECURITY_PATH=y +CONFIG_SECURITY_SECURELEVEL=y +# CONFIG_INTEL_TXT is not set +CONFIG_LSM_MMAP_MIN_ADDR=65535 +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 +CONFIG_SECURITY_SELINUX_DISABLE=y +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +# CONFIG_SECURITY_SMACK is not set +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/usr/lib/systemd/systemd" +# CONFIG_SECURITY_APPARMOR is not set +# CONFIG_SECURITY_YAMA is not set +CONFIG_INTEGRITY=y +CONFIG_INTEGRITY_SIGNATURE=y +CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y +CONFIG_IMA=y +CONFIG_IMA_MEASURE_PCR_IDX=10 +CONFIG_IMA_AUDIT=y +CONFIG_IMA_LSM_RULES=y +CONFIG_IMA_APPRAISE=y +CONFIG_IMA_TRUSTED_KEYRING=y +CONFIG_EVM=y +CONFIG_EVM_HMAC_VERSION=2 +CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +# CONFIG_DEFAULT_SECURITY_DAC is not set +CONFIG_DEFAULT_SECURITY="selinux" +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_ASYNC_PQ=m +CONFIG_ASYNC_RAID6_RECOV=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_FIPS=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_BLKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_PCOMP=m +CONFIG_CRYPTO_PCOMP2=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=m +# CONFIG_CRYPTO_RSA is not set +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +CONFIG_CRYPTO_USER=m +# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_PCRYPT=m +CONFIG_CRYPTO_WORKQUEUE=y +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_MCRYPTD=m +CONFIG_CRYPTO_AUTHENC=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_ABLK_HELPER_X86=m +CONFIG_CRYPTO_GLUE_HELPER_X86=m + +# +# Authenticated Encryption with Associated Data +# +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=y + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +CONFIG_CRYPTO_CTS=m +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_XTS=m + +# +# Hash modes +# +CONFIG_CRYPTO_CMAC=m +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_VMAC=m + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32C_INTEL=m +CONFIG_CRYPTO_CRC32=m +CONFIG_CRYPTO_CRC32_PCLMUL=m +CONFIG_CRYPTO_CRCT10DIF=m +CONFIG_CRYPTO_GHASH=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_RMD128=m +CONFIG_CRYPTO_RMD160=m +CONFIG_CRYPTO_RMD256=m +CONFIG_CRYPTO_RMD320=m +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_WP512=m + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_586=y +CONFIG_CRYPTO_AES_NI_INTEL=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SALSA20=m +CONFIG_CRYPTO_SALSA20_586=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_SERPENT_SSE2_586=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_586=m + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_ZLIB=m +CONFIG_CRYPTO_LZO=y +# CONFIG_CRYPTO_842 is not set + +# +# Random Number Generation +# +CONFIG_CRYPTO_ANSI_CPRNG=m +CONFIG_CRYPTO_DRBG_MENU=m +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=m +CONFIG_CRYPTO_USER_API=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_HASH_INFO=y +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_GEODE=m +CONFIG_CRYPTO_DEV_QAT=m +CONFIG_CRYPTO_DEV_QAT_DH895xCC=m +CONFIG_CRYPTO_DEV_QAT_C3XXX=m +CONFIG_CRYPTO_DEV_QAT_C62X=m +CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m +CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m +CONFIG_CRYPTO_DEV_QAT_C62XVF=m +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_PUBLIC_KEY_ALGO_RSA=y +CONFIG_X509_CERTIFICATE_PARSER=y +CONFIG_EFI_SIGNATURE_LIST_PARSER=y +CONFIG_PKCS7_MESSAGE_PARSER=y +# CONFIG_PKCS7_TEST_KEY is not set +CONFIG_SIGNED_PE_FILE_VERIFICATION=y +CONFIG_HAVE_KVM=y +# CONFIG_VIRTUALIZATION is not set +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=m +CONFIG_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_FIND_FIRST_BIT=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_IO=y +CONFIG_PERCPU_RWSEM=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=m +CONFIG_CRC8=m +CONFIG_AUDIT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +# CONFIG_XZ_DEC_IA64 is not set +# CONFIG_XZ_DEC_ARM is not set +# CONFIG_XZ_DEC_ARMTHUMB is not set +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_INTERVAL_TREE=y +CONFIG_GENERIC_PAGE_TABLE=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_NLATTR=y +CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y +# CONFIG_AVERAGE is not set +CONFIG_CLZ_TAB=y +CONFIG_CORDIC=m +# CONFIG_DDR is not set +CONFIG_IRQ_POLL=y +CONFIG_MPILIB=y +CONFIG_SIGNATURE=y +CONFIG_OID_REGISTRY=y +CONFIG_UCS2_STRING=y +CONFIG_ARCH_HAS_MMIO_FLUSH=y +# CONFIG_RH_KABI_SIZE_ALIGN_CHECKS is not set diff --git a/SOURCES/kernel-3.10.0-x86_64.config b/SOURCES/kernel-3.10.0-x86_64.config index 93d1fec..cd14395 100644 --- a/SOURCES/kernel-3.10.0-x86_64.config +++ b/SOURCES/kernel-3.10.0-x86_64.config @@ -1,8 +1,5 @@ # x86_64 # -# Automatically generated file; DO NOT EDIT. -# Linux/x86_64 3.10.0 Kernel Configuration -# CONFIG_64BIT=y CONFIG_X86_64=y CONFIG_X86=y @@ -373,7 +370,7 @@ CONFIG_SMP=y CONFIG_X86_X2APIC=y CONFIG_X86_MPPARSE=y CONFIG_X86_EXTENDED_PLATFORM=y -# CONFIG_X86_NUMACHIP is not set +CONFIG_X86_NUMACHIP=y # CONFIG_X86_VSMP is not set CONFIG_X86_UV=y CONFIG_X86_INTEL_LPSS=y @@ -1412,6 +1409,7 @@ CONFIG_BT_HCIVHCI=m CONFIG_BT_MRVL=m CONFIG_BT_MRVL_SDIO=m CONFIG_BT_ATH3K=m +# CONFIG_BT_WILINK is not set # CONFIG_AF_RXRPC is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y @@ -1447,7 +1445,10 @@ CONFIG_RFKILL=m CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y # CONFIG_RFKILL_GPIO is not set -# CONFIG_NET_9P is not set +CONFIG_NET_9P=m +CONFIG_NET_9P_VIRTIO=m +# CONFIG_NET_9P_RDMA is not set +# CONFIG_NET_9P_DEBUG is not set # CONFIG_CAIF is not set CONFIG_CEPH_LIB=m # CONFIG_CEPH_LIB_PRETTYDEBUG is not set @@ -1670,7 +1671,7 @@ CONFIG_CB710_DEBUG_ASSUMPTIONS=y # # Texas Instruments shared transport line discipline # -# CONFIG_TI_ST is not set +CONFIG_TI_ST=m CONFIG_SENSORS_LIS3_I2C=m # @@ -1742,7 +1743,12 @@ CONFIG_SCSI_3W_9XXX=m CONFIG_SCSI_3W_SAS=m # CONFIG_SCSI_ACARD is not set CONFIG_SCSI_AACRAID=m -# CONFIG_SCSI_AIC7XXX is not set +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y # CONFIG_SCSI_AIC7XXX_OLD is not set CONFIG_SCSI_AIC79XX=m CONFIG_AIC79XX_CMDS_PER_DEVICE=4 @@ -1770,7 +1776,7 @@ CONFIG_SCSI_UFSHCD=m CONFIG_SCSI_UFSHCD_PCI=m # CONFIG_SCSI_UFSHCD_PLATFORM is not set CONFIG_SCSI_HPTIOP=m -# CONFIG_SCSI_BUSLOGIC is not set +CONFIG_SCSI_BUSLOGIC=m CONFIG_VMWARE_PVSCSI=m CONFIG_HYPERV_STORAGE=m CONFIG_LIBFC=m @@ -2009,7 +2015,44 @@ CONFIG_VETH=m CONFIG_VIRTIO_NET=m CONFIG_NLMON=m # CONFIG_ARCNET is not set -# CONFIG_ATM_DRIVERS is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +CONFIG_ATM_ENI_TUNE_BURST=y +CONFIG_ATM_ENI_BURST_TX_16W=y +CONFIG_ATM_ENI_BURST_TX_8W=y +CONFIG_ATM_ENI_BURST_TX_4W=y +CONFIG_ATM_ENI_BURST_TX_2W=y +CONFIG_ATM_ENI_BURST_RX_16W=y +CONFIG_ATM_ENI_BURST_RX_8W=y +CONFIG_ATM_ENI_BURST_RX_4W=y +CONFIG_ATM_ENI_BURST_RX_2W=y +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +CONFIG_ATM_IDT77252_RCV_ALL=y +CONFIG_ATM_IDT77252_USE_SUNI=y +CONFIG_ATM_AMBASSADOR=m +# CONFIG_ATM_AMBASSADOR_DEBUG is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +CONFIG_ATM_IA_DEBUG=y +CONFIG_ATM_FORE200E=m +CONFIG_ATM_FORE200E_USE_TASKLET=y +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_ATM_SOLOS=m # # CAIF transport drivers @@ -2030,7 +2073,9 @@ CONFIG_VHOST=m # CONFIG_NET_DSA_MV88E6123_61_65 is not set CONFIG_ETHERNET=y CONFIG_MDIO=m -# CONFIG_NET_VENDOR_3COM is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_VORTEX=m +CONFIG_TYPHOON=m # CONFIG_NET_VENDOR_ADAPTEC is not set # CONFIG_NET_VENDOR_ALTEON is not set # CONFIG_NET_VENDOR_AMD is not set @@ -2091,7 +2136,7 @@ CONFIG_BE2NET_VXLAN=y # CONFIG_NET_VENDOR_EXAR is not set # CONFIG_NET_VENDOR_HP is not set CONFIG_NET_VENDOR_INTEL=y -# CONFIG_E100 is not set +CONFIG_E100=m CONFIG_E1000=m CONFIG_E1000E=m CONFIG_E1000E_HWTS=y @@ -2099,7 +2144,7 @@ CONFIG_IGB=m CONFIG_IGB_HWMON=y CONFIG_IGB_DCA=y CONFIG_IGBVF=m -# CONFIG_IXGB is not set +CONFIG_IXGB=m CONFIG_IXGBE=m # CONFIG_IXGBE_VXLAN is not set CONFIG_IXGBE_HWMON=y @@ -2140,13 +2185,14 @@ CONFIG_MYRI10GE=m CONFIG_MYRI10GE_DCA=y # CONFIG_FEALNX is not set # CONFIG_NET_VENDOR_NATSEMI is not set -# CONFIG_NET_VENDOR_NVIDIA is not set +CONFIG_NET_VENDOR_NVIDIA=y +CONFIG_FORCEDETH=m CONFIG_NET_VENDOR_OKI=y CONFIG_PCH_GBE=m CONFIG_ETHOC=m CONFIG_NET_PACKET_ENGINE=y -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m CONFIG_NET_VENDOR_QLOGIC=y CONFIG_QLA3XXX=m CONFIG_QLCNIC=m @@ -2187,7 +2233,10 @@ CONFIG_SMSC9420=m # CONFIG_NET_VENDOR_TEHUTI is not set CONFIG_NET_VENDOR_TI=y CONFIG_TLAN=m -# CONFIG_NET_VENDOR_VIA is not set +CONFIG_NET_VENDOR_VIA=y +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +CONFIG_VIA_VELOCITY=m # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -2389,7 +2438,7 @@ CONFIG_RT73USB=m CONFIG_RT2800USB=m CONFIG_RT2800USB_RT33XX=y CONFIG_RT2800USB_RT35XX=y -# CONFIG_RT2800USB_RT3573 is not set +CONFIG_RT2800USB_RT3573=y CONFIG_RT2800USB_RT53XX=y CONFIG_RT2800USB_RT55XX=y CONFIG_RT2800USB_UNKNOWN=y @@ -2611,8 +2660,8 @@ CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_QT1070 is not set # CONFIG_KEYBOARD_QT2160 is not set # CONFIG_KEYBOARD_LKKBD is not set -# CONFIG_KEYBOARD_GPIO is not set -# CONFIG_KEYBOARD_GPIO_POLLED is not set +CONFIG_KEYBOARD_GPIO=m +CONFIG_KEYBOARD_GPIO_POLLED=m # CONFIG_KEYBOARD_TCA6416 is not set # CONFIG_KEYBOARD_TCA8418 is not set # CONFIG_KEYBOARD_MATRIX is not set @@ -2860,7 +2909,15 @@ CONFIG_I2C=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m -# CONFIG_I2C_MUX is not set +CONFIG_I2C_MUX=m + +# +# Multiplexer I2C Chip support +# +CONFIG_I2C_MUX_GPIO=m +CONFIG_I2C_MUX_PCA9541=m +CONFIG_I2C_MUX_PCA954x=m +# CONFIG_I2C_MUX_PINCTRL is not set CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_SMBUS=m CONFIG_I2C_ALGOBIT=m @@ -2937,7 +2994,7 @@ CONFIG_SPI_MASTER=y # SPI Master Controller Drivers # # CONFIG_SPI_ALTERA is not set -# CONFIG_SPI_BITBANG is not set +CONFIG_SPI_BITBANG=m # CONFIG_SPI_BUTTERFLY is not set # CONFIG_SPI_GPIO is not set # CONFIG_SPI_LM70_LLP is not set @@ -2953,7 +3010,7 @@ CONFIG_SPI_MASTER=y # # SPI Protocol Masters # -# CONFIG_SPI_SPIDEV is not set +CONFIG_SPI_SPIDEV=m # CONFIG_SPI_TLE62X0 is not set # @@ -3002,6 +3059,7 @@ CONFIG_GPIO_DEVRES=y CONFIG_GPIO_ACPI=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_MAX730X=m # # Memory mapped GPIO drivers: @@ -3037,10 +3095,10 @@ CONFIG_GPIO_LANGWELL=y # # SPI GPIO expanders: # -# CONFIG_GPIO_MAX7301 is not set +CONFIG_GPIO_MAX7301=m # CONFIG_GPIO_MCP23S08 is not set -# CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_74X164 is not set +CONFIG_GPIO_MC33880=m +CONFIG_GPIO_74X164=m # # AC97 GPIO expanders: @@ -4026,7 +4084,7 @@ CONFIG_FB_EFI=y # CONFIG_FB_UDL is not set # CONFIG_FB_GOLDFISH is not set # CONFIG_FB_VIRTUAL is not set -# CONFIG_XEN_FBDEV_FRONTEND is not set +CONFIG_XEN_FBDEV_FRONTEND=m # CONFIG_FB_METRONOME is not set # CONFIG_FB_MB862XX is not set # CONFIG_FB_BROADSHEET is not set @@ -4229,7 +4287,7 @@ CONFIG_SND_HDA_DSP_LOADER=y CONFIG_SND_HDA_I915=y CONFIG_SND_HDA_EXT_CORE=m CONFIG_SND_HDA_PREALLOC_SIZE=512 -# CONFIG_SND_SPI is not set +CONFIG_SND_SPI=y CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=m CONFIG_SND_USB_UA101=m @@ -4640,8 +4698,9 @@ CONFIG_LEDS_CLASS=y # CONFIG_LEDS_LM3530=m # CONFIG_LEDS_LM3642 is not set -# CONFIG_LEDS_PCA9532 is not set -# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_PCA9532=m +CONFIG_LEDS_PCA9532_GPIO=y +CONFIG_LEDS_GPIO=m CONFIG_LEDS_LP3944=m CONFIG_LEDS_LP55XX_COMMON=m CONFIG_LEDS_LP5521=m @@ -4860,7 +4919,7 @@ CONFIG_VFIO_IOMMU_TYPE1=m CONFIG_VFIO=m CONFIG_VFIO_NOIOMMU=y CONFIG_VFIO_PCI=m -# CONFIG_VFIO_PCI_VGA is not set +CONFIG_VFIO_PCI_VGA=y CONFIG_VFIO_PCI_MMAP=y CONFIG_VFIO_PCI_INTX=y CONFIG_IRQ_BYPASS_MANAGER=m @@ -4922,7 +4981,8 @@ CONFIG_R8712U=m # CONFIG_RTS5139 is not set # CONFIG_TRANZPORT is not set # CONFIG_IDE_PHISON is not set -# CONFIG_LINE6_USB is not set +CONFIG_LINE6_USB=m +CONFIG_LINE6_USB_IMPULSE_RESPONSE=y # CONFIG_USB_SERIAL_QUATECH2 is not set # CONFIG_VT6655 is not set # CONFIG_VT6656 is not set @@ -5104,8 +5164,17 @@ CONFIG_EXT4_FS_SECURITY=y CONFIG_JBD2=m # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=m -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +CONFIG_REISERFS_PROC_INFO=y +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=m +# CONFIG_JFS_POSIX_ACL is not set +# CONFIG_JFS_SECURITY is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set CONFIG_XFS_FS=m CONFIG_XFS_QUOTA=y CONFIG_XFS_POSIX_ACL=y @@ -5195,7 +5264,8 @@ CONFIG_CONFIGFS_FS=y CONFIG_MISC_FILESYSTEMS=y # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set -# CONFIG_ECRYPT_FS is not set +CONFIG_ECRYPT_FS=m +# CONFIG_ECRYPT_FS_MESSAGING is not set # CONFIG_HFS_FS is not set # CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set @@ -5290,6 +5360,9 @@ CONFIG_CIFS_SMB2=y # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set +CONFIG_9P_FS=m +CONFIG_9P_FSCACHE=y +CONFIG_9P_FS_POSIX_ACL=y CONFIG_NLS=y CONFIG_NLS_DEFAULT="utf8" CONFIG_NLS_CODEPAGE_437=y @@ -5545,7 +5618,7 @@ CONFIG_SECURITY=y CONFIG_SECURITYFS=y CONFIG_SECURITY_NETWORK=y CONFIG_SECURITY_NETWORK_XFRM=y -# CONFIG_SECURITY_PATH is not set +CONFIG_SECURITY_PATH=y CONFIG_SECURITY_SECURELEVEL=y CONFIG_INTEL_TXT=y CONFIG_LSM_MMAP_MIN_ADDR=65535 @@ -5558,7 +5631,12 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set # CONFIG_SECURITY_SMACK is not set -# CONFIG_SECURITY_TOMOYO is not set +CONFIG_SECURITY_TOMOYO=y +CONFIG_SECURITY_TOMOYO_MAX_ACCEPT_ENTRY=2048 +CONFIG_SECURITY_TOMOYO_MAX_AUDIT_LOG=1024 +# CONFIG_SECURITY_TOMOYO_OMIT_USERSPACE_LOADER is not set +CONFIG_SECURITY_TOMOYO_POLICY_LOADER="/sbin/tomoyo-init" +CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER="/usr/lib/systemd/systemd" # CONFIG_SECURITY_APPARMOR is not set # CONFIG_SECURITY_YAMA is not set CONFIG_INTEGRITY=y @@ -5573,6 +5651,7 @@ CONFIG_IMA_TRUSTED_KEYRING=y CONFIG_EVM=y CONFIG_EVM_HMAC_VERSION=2 CONFIG_DEFAULT_SECURITY_SELINUX=y +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set # CONFIG_DEFAULT_SECURITY_DAC is not set CONFIG_DEFAULT_SECURITY="selinux" CONFIG_XOR_BLOCKS=m @@ -5835,7 +5914,7 @@ CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_NLATTR=y CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y -# CONFIG_AVERAGE is not set +CONFIG_AVERAGE=y CONFIG_CLZ_TAB=y CONFIG_CORDIC=m # CONFIG_DDR is not set diff --git a/SOURCES/morefixes.patch b/SOURCES/morefixes.patch new file mode 100644 index 0000000..a294350 --- /dev/null +++ b/SOURCES/morefixes.patch @@ -0,0 +1,84 @@ +diff -up linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/cpufeature.h.morefixes linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/cpufeature.h +--- linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/cpufeature.h.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/cpufeature.h 2016-11-05 08:30:46.276033474 -0400 +@@ -354,6 +354,7 @@ extern const char * const x86_power_flag + #define cpu_has_avx boot_cpu_has(X86_FEATURE_AVX) + #define cpu_has_avx2 boot_cpu_has(X86_FEATURE_AVX2) + #define cpu_has_ht boot_cpu_has(X86_FEATURE_HT) ++#define cpu_has_mp boot_cpu_has(X86_FEATURE_MP) + #define cpu_has_nx boot_cpu_has(X86_FEATURE_NX) + #define cpu_has_xstore boot_cpu_has(X86_FEATURE_XSTORE) + #define cpu_has_xstore_enabled boot_cpu_has(X86_FEATURE_XSTORE_EN) +diff -up linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/irq_remapping.h.morefixes linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/irq_remapping.h +--- linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/irq_remapping.h.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/arch/x86/include/asm/irq_remapping.h 2016-11-05 09:39:38.425043476 -0400 +@@ -110,7 +110,7 @@ static inline bool setup_remapped_irq(in + return false; + } + +-int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info) ++static inline int irq_set_vcpu_affinity(unsigned int irq, void *vcpu_info) + { + return -ENOSYS; + } +diff -up linux-3.10.0-514.sdl7.i686/arch/x86/kernel/irq_32.c.morefixes linux-3.10.0-514.sdl7.i686/arch/x86/kernel/irq_32.c +--- linux-3.10.0-514.sdl7.i686/arch/x86/kernel/irq_32.c.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/arch/x86/kernel/irq_32.c 2016-11-05 09:49:59.371055125 -0400 +@@ -24,9 +24,12 @@ + DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); + EXPORT_PER_CPU_SYMBOL(irq_stat); + ++DEFINE_PER_CPU_SHARED_ALIGNED(rh_irq_cpustat_t, rh_irq_stat); ++ + DEFINE_PER_CPU(struct pt_regs *, irq_regs); + EXPORT_PER_CPU_SYMBOL(irq_regs); + ++ + #ifdef CONFIG_DEBUG_STACKOVERFLOW + + int sysctl_panic_on_stackoverflow __read_mostly; +diff -up linux-3.10.0-514.sdl7.i686/include/linux/pps_kernel.h.morefixes linux-3.10.0-514.sdl7.i686/include/linux/pps_kernel.h +--- linux-3.10.0-514.sdl7.i686/include/linux/pps_kernel.h.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/include/linux/pps_kernel.h 2016-11-05 10:44:41.492049162 -0400 +@@ -115,10 +115,17 @@ static inline void pps_get_ts(struct pps + { + struct system_time_snapshot snap; + ktime_get_snapshot(&snap); ++#if defined CONFIG_X86_64 + ts->ts_real = ktime_to_timespec64(snap.real); + #ifdef CONFIG_NTP_PPS + ts->ts_raw = ktime_to_timespec64(snap.raw); + #endif ++#else ++ ts->ts_real = ktime_to_timespec(snap.real); ++#ifdef CONFIG_NTP_PPS ++ ts->ts_raw = ktime_to_timespec(snap.raw); ++#endif ++#endif + } + + /* Subtract known time delay from PPS event time(s) */ +diff -up linux-3.10.0-514.sdl7.i686/kernel/hrtimer.c.morefixes linux-3.10.0-514.sdl7.i686/kernel/hrtimer.c +--- linux-3.10.0-514.sdl7.i686/kernel/hrtimer.c.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/kernel/hrtimer.c 2016-11-05 10:58:56.726065206 -0400 +@@ -328,6 +328,7 @@ u64 ktime_divns(const ktime_t kt, s64 di + + return dclc; + } ++EXPORT_SYMBOL_GPL(ktime_divns); + #endif /* BITS_PER_LONG >= 64 */ + + /* +diff -up linux-3.10.0-514.sdl7.i686/mm/swap.c.morefixes linux-3.10.0-514.sdl7.i686/mm/swap.c +--- linux-3.10.0-514.sdl7.i686/mm/swap.c.morefixes 2016-10-19 10:16:25.000000000 -0400 ++++ linux-3.10.0-514.sdl7.i686/mm/swap.c 2016-11-05 08:55:41.521061525 -0400 +@@ -972,9 +972,6 @@ void release_pages(struct page **pages, + if (!put_page_testzero(page)) + continue; + +- VM_BUG_ON_PAGE(check_mmu_gather && +- trans_huge_mmu_gather_count(page), page); +- + if (PageLRU(page)) { + if (!was_thp) + zone = zone_lru_lock(zone, page, &lock_batch, diff --git a/SOURCES/removejiffies.patch b/SOURCES/removejiffies.patch new file mode 100644 index 0000000..71da335 --- /dev/null +++ b/SOURCES/removejiffies.patch @@ -0,0 +1,12 @@ +diff -up linux-3.10.0-123.6.3.el7.x86_64/include/asm-generic/cputime_jiffies.h.removejiffies linux-3.10.0-123.6.3.el7.x86_64/include/asm-generic/cputime_jiffies.h +--- linux-3.10.0-123.6.3.el7.x86_64/include/asm-generic/cputime_jiffies.h.removejiffies 2014-07-16 14:25:31.000000000 -0400 ++++ linux-3.10.0-123.6.3.el7.x86_64/include/asm-generic/cputime_jiffies.h 2014-08-07 10:57:42.702063799 -0400 +@@ -17,8 +17,6 @@ typedef u64 __nocast cputime64_t; + /* + * Convert nanoseconds <-> cputime + */ +-#define cputime_to_nsecs(__ct) \ +- jiffies_to_nsecs(cputime_to_jiffies(__ct)) + #define nsecs_to_cputime64(__nsec) \ + jiffies64_to_cputime64(nsecs_to_jiffies64(__nsec)) + #define nsecs_to_cputime(__nsec) \ diff --git a/SOURCES/undorhirqstat.patch b/SOURCES/undorhirqstat.patch new file mode 100644 index 0000000..f8340fc --- /dev/null +++ b/SOURCES/undorhirqstat.patch @@ -0,0 +1,84 @@ +diff -up linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/hardirq.h.undorhirqstat linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/hardirq.h +--- linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/hardirq.h.undorhirqstat 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/arch/x86/include/asm/hardirq.h 2015-11-21 23:57:10.330063191 -0500 +@@ -37,18 +37,13 @@ typedef struct { + + DECLARE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); + +-typedef struct { +- unsigned int irq_hv_callback_count; +-} ____cacheline_aligned rh_irq_cpustat_t; +- +-DECLARE_PER_CPU_SHARED_ALIGNED(rh_irq_cpustat_t, rh_irq_stat); ++/* We can have at most NR_VECTORS irqs routed to a cpu at a time */ ++#define MAX_HARDIRQS_PER_CPU NR_VECTORS + + #define __ARCH_IRQ_STAT + + #define inc_irq_stat(member) this_cpu_inc(irq_stat.member) + +-#define rh_inc_irq_stat(member) this_cpu_inc(rh_irq_stat.member) +- + #define local_softirq_pending() this_cpu_read(irq_stat.__softirq_pending) + + #define __ARCH_SET_SOFTIRQ_PENDING +diff -up linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/cpu/mshyperv.c.undorhirqstat linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/cpu/mshyperv.c +--- linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/cpu/mshyperv.c.undorhirqstat 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/cpu/mshyperv.c 2015-11-22 00:03:55.131003266 -0500 +@@ -46,7 +46,6 @@ void hyperv_vector_handler(struct pt_reg + irq_enter(); + exit_idle(); + +- rh_inc_irq_stat(irq_hv_callback_count); + if (vmbus_handler) + vmbus_handler(); + +diff -up linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq.c.undorhirqstat linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq.c +--- linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq.c.undorhirqstat 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq.c 2015-11-21 23:58:02.526064171 -0500 +@@ -48,7 +48,6 @@ void ack_bad_irq(unsigned int irq) + } + + #define irq_stats(x) (&per_cpu(irq_stat, x)) +-#define rh_irq_stats(x) (&per_cpu(rh_irq_stat, x)) + /* + * /proc/interrupts printing for arch specific interrupts + */ +@@ -126,13 +125,6 @@ int arch_show_interrupts(struct seq_file + seq_printf(p, "%10u ", per_cpu(mce_poll_count, j)); + seq_printf(p, " Machine check polls\n"); + #endif +- if (test_bit(HYPERVISOR_CALLBACK_VECTOR, used_vectors)) { +- seq_printf(p, "%*s: ", prec, "HYP"); +- for_each_online_cpu(j) +- seq_printf(p, "%10u ", +- rh_irq_stats(j)->irq_hv_callback_count); +- seq_printf(p, " Hypervisor callback interrupts\n"); +- } + seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); + #if defined(CONFIG_X86_IO_APIC) + seq_printf(p, "%*s: %10u\n", prec, "MIS", atomic_read(&irq_mis_count)); +diff -up linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq_64.c.undorhirqstat linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq_64.c +--- linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq_64.c.undorhirqstat 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/arch/x86/kernel/irq_64.c 2015-11-21 23:58:27.650064642 -0500 +@@ -23,8 +23,6 @@ + DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); + EXPORT_PER_CPU_SYMBOL(irq_stat); + +-DEFINE_PER_CPU_SHARED_ALIGNED(rh_irq_cpustat_t, rh_irq_stat); +- + DEFINE_PER_CPU(struct pt_regs *, irq_regs); + EXPORT_PER_CPU_SYMBOL(irq_regs); + +diff -up linux-3.10.0-327.sdl7.x86_64/drivers/xen/events.c.undorhirqstat linux-3.10.0-327.sdl7.x86_64/drivers/xen/events.c +--- linux-3.10.0-327.sdl7.x86_64/drivers/xen/events.c.undorhirqstat 2015-10-29 16:56:51.000000000 -0400 ++++ linux-3.10.0-327.sdl7.x86_64/drivers/xen/events.c 2015-11-22 00:04:18.032003696 -0500 +@@ -1446,8 +1446,6 @@ void xen_evtchn_do_upcall(struct pt_regs + #ifdef CONFIG_X86 + exit_idle(); + #endif +- rh_inc_irq_stat(irq_hv_callback_count); +- + __xen_evtchn_do_upcall(); + + irq_exit(); diff --git a/SOURCES/upstream-32bit-fixes.patch b/SOURCES/upstream-32bit-fixes.patch new file mode 100644 index 0000000..cb759ed --- /dev/null +++ b/SOURCES/upstream-32bit-fixes.patch @@ -0,0 +1,224 @@ +From 5265f6ea5a6643c5b2aa13e8e4664962251b37ea Mon Sep 17 00:00:00 2001 +From: Chad Dupuis +Date: Thu, 13 Mar 2014 14:16:40 -0400 +Subject: [PATCH] qla2xxx: Fix build errors related to invalid print fields on + some architectures. + +Fixes some build warnings such as: +drivers/scsi/qla2xxx/qla_attr.c:162:6: warning: format '%lx' expects argument of +type 'long unsigned int', but argument 6 has type 'size_t'" +and +drivers/scsi/qla2xxx/qla_init.c:5198:7: warning: format '%lx' expects argument +of type 'long unsigned int', but argument 5 has type 'uint32_t' [-Wformat] + +Signed-off-by: Chad Dupuis +Signed-off-by: Saurav Kashyap +Signed-off-by: James Bottomley +--- + drivers/scsi/qla2xxx/qla_attr.c | 6 +++--- + drivers/scsi/qla2xxx/qla_init.c | 12 ++++++------ + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c +index da5ae11..1a976c0 100644 +--- a/drivers/scsi/qla2xxx/qla_attr.c ++++ b/drivers/scsi/qla2xxx/qla_attr.c +@@ -159,7 +159,7 @@ qla2x00_sysfs_read_fw_dump_template(struct file *filp, struct kobject *kobj, + return 0; + + ql_dbg(ql_dbg_user, vha, 0x70e2, +- "chunk <- off=%llx count=%lx\n", off, count); ++ "chunk <- off=%llx count=%zx\n", off, count); + return memory_read_from_buffer(buf, count, &off, + ha->fw_dump_template, ha->fw_dump_template_len); + } +@@ -200,11 +200,11 @@ qla2x00_sysfs_write_fw_dump_template(struct file *filp, struct kobject *kobj, + if (off + count > ha->fw_dump_template_len) { + count = ha->fw_dump_template_len - off; + ql_dbg(ql_dbg_user, vha, 0x70d3, +- "chunk -> truncating to %lx bytes.\n", count); ++ "chunk -> truncating to %zx bytes.\n", count); + } + + ql_dbg(ql_dbg_user, vha, 0x70d4, +- "chunk -> off=%llx count=%lx\n", off, count); ++ "chunk -> off=%llx count=%zx\n", off, count); + memcpy(ha->fw_dump_template + off, buf, count); + + if (off + count == ha->fw_dump_template_len) { +diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c +index c64ee86..462836c 100644 +--- a/drivers/scsi/qla2xxx/qla_init.c ++++ b/drivers/scsi/qla2xxx/qla_init.c +@@ -5452,8 +5452,8 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr, + "-> template size %x bytes\n", dlen); + if (dlen > risc_size * sizeof(*dcode)) { + ql_log(ql_log_warn, vha, 0x0167, +- "Failed fwdump template exceeds array by %lx bytes\n", +- dlen - risc_size * sizeof(*dcode)); ++ "Failed fwdump template exceeds array by %x bytes\n", ++ (uint32_t)(dlen - risc_size * sizeof(*dcode))); + goto default_template; + } + ha->fw_dump_template_len = dlen; +@@ -5719,8 +5719,8 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) + ha->fw_dump_template_len = 0; + + ql_dbg(ql_dbg_init, vha, 0x171, +- "Loading fwdump template from %lx\n", +- (void *)fwcode - (void *)blob->fw->data); ++ "Loading fwdump template from %x\n", ++ (uint32_t)((void *)fwcode - (void *)blob->fw->data)); + risc_size = be32_to_cpu(fwcode[2]); + ql_dbg(ql_dbg_init, vha, 0x172, + "-> array size %x dwords\n", risc_size); +@@ -5754,8 +5754,8 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr) + "-> template size %x bytes\n", dlen); + if (dlen > risc_size * sizeof(*fwcode)) { + ql_log(ql_log_warn, vha, 0x0177, +- "Failed fwdump template exceeds array by %lx bytes\n", +- dlen - risc_size * sizeof(*fwcode)); ++ "Failed fwdump template exceeds array by %x bytes\n", ++ (uint32_t)(dlen - risc_size * sizeof(*fwcode))); + goto default_template; + } + ha->fw_dump_template_len = dlen; +-- +1.8.3.1 + +From b9469523631bd376a5f877d4e816f3a81c12b790 Mon Sep 17 00:00:00 2001 +From: Paul Bolle +Date: Mon, 30 Jun 2014 16:32:29 +0200 +Subject: [PATCH] x86: Remove unused variable "polling" + +Compile tested. "polling" is unused since commit f80c5b39b80a +("sched/idle, x86: Switch from TS_POLLING to TIF_POLLING_NRFLAG"). + +Signed-off-by: Paul Bolle +Signed-off-by: Peter Zijlstra +Cc: Jiri Kosina +Link: http://lkml.kernel.org/r/1404138749.2978.6.camel@x41 +Signed-off-by: Ingo Molnar +--- + arch/x86/kernel/apm_32.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c +index 8fdcec6..66d3b1f 100644 +--- a/arch/x86/kernel/apm_32.c ++++ b/arch/x86/kernel/apm_32.c +@@ -841,7 +841,6 @@ static int apm_do_idle(void) + u32 eax; + u8 ret = 0; + int idled = 0; +- int polling; + int err = 0; + + if (!need_resched()) { +-- +1.8.3.1 + +From 75c2e0e53d2fb5df66b8fe162d71930348ac0b96 Mon Sep 17 00:00:00 2001 +From: John Stultz +Date: Wed, 16 Jul 2014 21:03:56 +0000 +Subject: [PATCH] ktime: Change ktime_set() to take 64bit seconds value + +In order to support dates past 2038 on 32bit systems, ktime_set() +needs to handle 64bit second values. + +[ tglx: Removed the BITS_PER_LONG check ] + +Signed-off-by: John Stultz +Signed-off-by: Thomas Gleixner +Signed-off-by: John Stultz +--- + include/linux/ktime.h | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/include/linux/ktime.h b/include/linux/ktime.h +index e4e9a9f..6950c96 100644 +--- a/include/linux/ktime.h ++++ b/include/linux/ktime.h +@@ -71,13 +71,12 @@ typedef union ktime ktime_t; /* Kill this */ + * + * Return the ktime_t representation of the value + */ +-static inline ktime_t ktime_set(const long secs, const unsigned long nsecs) ++static inline ktime_t ktime_set(const s64 secs, const unsigned long nsecs) + { +-#if (BITS_PER_LONG == 64) + if (unlikely(secs >= KTIME_SEC_MAX)) + return (ktime_t){ .tv64 = KTIME_MAX }; +-#endif +- return (ktime_t) { .tv64 = (s64)secs * NSEC_PER_SEC + (s64)nsecs }; ++ ++ return (ktime_t) { .tv64 = secs * NSEC_PER_SEC + (s64)nsecs }; + } + + /* Subtract two ktime_t variables. rem = lhs -rhs: */ +-- +1.8.3.1 + +From 80a667f7ab1beee42b31e263ba4681fdfe00a0b6 Mon Sep 17 00:00:00 2001 +From: Florian Westphal +Date: Wed, 17 Jun 2015 23:58:28 +0200 +Subject: [PATCH] netfilter: xtables: fix warnings on 32bit platforms + +On 32bit archs gcc complains due to cast from void* to u64. +Add intermediate casts to long to silence these warnings. + +include/linux/netfilter/x_tables.h:376:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] +include/linux/netfilter/x_tables.h:384:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] +include/linux/netfilter/x_tables.h:391:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] +include/linux/netfilter/x_tables.h:400:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] + +Fixes: 71ae0dff02d756e ("netfilter: xtables: use percpu rule counters") +Reported-by: kbuild test robot +Signed-off-by: Florian Westphal +Signed-off-by: Pablo Neira Ayuso +--- + include/linux/netfilter/x_tables.h | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h +index d08f0ed..781b6fe 100644 +--- a/include/linux/netfilter/x_tables.h ++++ b/include/linux/netfilter/x_tables.h +@@ -390,7 +390,7 @@ static inline u64 xt_percpu_counter_alloc(void) + if (res == NULL) + return (u64) -ENOMEM; + +- return (__force u64) res; ++ return (u64) (__force unsigned long) res; + } + + return 0; +@@ -398,14 +398,14 @@ static inline u64 xt_percpu_counter_alloc(void) + static inline void xt_percpu_counter_free(u64 pcnt) + { + if (nr_cpu_ids > 1) +- free_percpu((void __percpu *) pcnt); ++ free_percpu((void __percpu *) (unsigned long) pcnt); + } + + static inline struct xt_counters * + xt_get_this_cpu_counter(struct xt_counters *cnt) + { + if (nr_cpu_ids > 1) +- return this_cpu_ptr((void __percpu *) cnt->pcnt); ++ return this_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt); + + return cnt; + } +@@ -414,7 +414,7 @@ static inline struct xt_counters * + xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu) + { + if (nr_cpu_ids > 1) +- return per_cpu_ptr((void __percpu *) cnt->pcnt, cpu); ++ return per_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt, cpu); + + return cnt; + } +-- +1.8.3.1 + diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec index eeef6be..fe20e93 100644 --- a/SPECS/kernel.spec +++ b/SPECS/kernel.spec @@ -3,9 +3,9 @@ Summary: The Linux kernel -%define dist .el7 +%define dist .el7.centos.plus -# % define buildid .local +# % define buildid # For a kernel released for public testing, released_kernel should be 1. # For internal testing builds during development, it should be 0. @@ -36,7 +36,8 @@ Summary: The Linux kernel # kernel %define with_default %{?_without_default: 0} %{?!_without_default: 1} # kernel-debug -%define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} +# %define with_debug %{?_without_debug: 0} %{?!_without_debug: 1} +%define with_debug 0 # kernel-doc %define with_doc %{?_without_doc: 0} %{?!_without_doc: 1} # kernel-headers @@ -153,6 +154,9 @@ Summary: The Linux kernel %ifarch i686 %define asmarch x86 %define hdrarch i386 +%define all_arch_configs kernel-%{version}-i?86*.config +%define image_install_path boot +%define kernel_image arch/x86/boot/bzImage %endif %ifarch x86_64 @@ -208,7 +212,7 @@ Summary: The Linux kernel # Which is a BadThing(tm). # We only build kernel-headers on the following... -%define nobuildarches i686 s390 ppc +%define nobuildarches s390 ppc %ifarch %nobuildarches %define with_default 0 @@ -220,7 +224,7 @@ Summary: The Linux kernel %endif # Architectures we build tools/cpupower on -%define cpupowerarchs x86_64 ppc64 ppc64le +%define cpupowerarchs i686 x86_64 ppc64 ppc64le # # Three sets of minimum package version requirements in the form of Conflicts: @@ -359,34 +363,121 @@ Source16: centos-kpatch.x509 Source18: check-kabi Source20: Module.kabi_x86_64 -Source21: Module.kabi_ppc64 -Source22: Module.kabi_ppc64le -Source23: Module.kabi_s390x +#Source21: Module.kabi_ppc64 +#Source22: Module.kabi_ppc64le +#Source23: Module.kabi_s390x Source25: kernel-abi-whitelists-%{distro_build}.tar.bz2 Source50: kernel-%{version}-x86_64.config -Source51: kernel-%{version}-x86_64-debug.config +#Source51: kernel-%{version}-x86_64-debug.config -Source60: kernel-%{version}-ppc64.config -Source61: kernel-%{version}-ppc64-debug.config -Source62: kernel-%{version}-ppc64le.config -Source63: kernel-%{version}-ppc64le-debug.config +#Source60: kernel-%{version}-ppc64.config +#Source61: kernel-%{version}-ppc64-debug.config +#Source62: kernel-%{version}-ppc64le.config +#Source63: kernel-%{version}-ppc64le-debug.config -Source70: kernel-%{version}-s390x.config -Source71: kernel-%{version}-s390x-debug.config -Source72: kernel-%{version}-s390x-kdump.config +#Source70: kernel-%{version}-s390x.config +#Source71: kernel-%{version}-s390x-debug.config +#Source72: kernel-%{version}-s390x-kdump.config +Source80: kernel-%{version}-i686.config +#Source81: kernel-%{version}-i686-debug.config # Sources for kernel-tools Source2000: cpupower.service Source2001: cpupower.config -# empty final patch to facilitate testing of kernel patches -Patch999999: linux-kernel-test.patch +# centos patches Patch1000: debrand-single-cpu.patch Patch1001: debrand-rh_taint.patch Patch1002: debrand-rh-i686-cpu.patch +# i686 mods +#Patch1003: ignorewarnings.patch +Patch1004: removejiffies.patch +Patch1005: cpufreq.patch +Patch1006: i386-audit-stop-scri-stack-frame.patch +Patch1007: addmissing.patch +Patch1008: undorhirqstat.patch +# Patch1009: otherfixes.patch +Patch1009: clear-32bit-Werror-warnings.patch +Patch1010: upstream-32bit-fixes.patch +Patch1011: morefixes.patch + +# centosplus patches +Patch30010: centos-linux-3.10-hid-non-LogiTech-remote-bug5780.patch +# Patch30050: centos-linux-3.10-ipc-fix-compat-msgrcv-bug7099.patch +# Patch30051: centos-linux-3.10-fix-argument-list-too-long.patch +# Patch30052: centos-linux-3.10-missing-Unifying-device-bug7340.patch +# Patch30053: centos-linux-3.10-vxlan-fix-crash-when-interface-created-with-no-group-bug7454.patch +# Patch30054: centos-linux-3.10-numa-remove-bugON-bug7474.patch +# Patch30055: centos-linux-3.10-fix-wakingup-AMD-family-bug7645.patch +# Patch30056: centos-linux-3.10-fix-nfs4_sequence_corruptor-bug7604.patch +# Patch30057: centos-linux-3.10-tick-clear-broadcast-pending-bug7852.patch +# Patch30058: centos-linux-3.10-bnx2x_fix_link_for_KR-bug7942.patch +Patch30059: centos-linux-3.10-reiserfs-fix-redefine-error.patch +Patch30060: centos-linux-3.10-fix-em28xx-cards-bug8285.patch +# Patch30061: centos-linux-3.10-netfilter-nf_conntrack-fix-bug8341.patch +Patch30062: centos-linux-3.10-fix-ecryptfs-error-bug7369.patch +# Patch30063: centos-linux-3.10-fix-ioatdma-driver-bug8778.patch +# Patch30064: centos-linux-3.10-fix-xfrm-input-bug9646.patch +# Patch30065: centos-linux-3.10-3w-sas-fix-race-bug10073.patch +# Patch20066: centos-linux-3.10-fix-dm-thin-metadata-bug10191.patch +# Patch20067: centos-linux-3.10-namespaces-bug10320.patch +# Patch20068: centos-linux-3.10-mpt3sas-SML-bug10516.patch +# Patch20069: centos-linux-3.10-mpt3sas-fix-block-bug10516.patch +Patch20070: centos-linux-3.10-support-MacBookPro-bug10447.patch +# Patch20071: centos-linux-3.10-3w-xxxx-fix-race-bug10033.patch +# Patch20072: centos-linux-3.10-3w-9xxx-fix-race-1of2-bug10033.patch +# Patch20073: centos-linux-3.10-3w-9xxx-fix-race-2of2-bug10033.patch +# Patch20074: centos-linux-3.10-e1000-Tx-fix-1-bug10767.patch +# Patch20075: centos-linux-3.10-e1000-Tx-fix-2-bug10767.patch +# Patch20076: centos-linux-3.10-fix-truncation-bug-EFI-bug10729.patch +# Patch20077: centos-linux-3.10-md-fix-freeing-private-data-bug11184.patch +# Patch20078: centos-linux-3.10-pci-fix-regression-mlx4-bug12277.patch +# Patch20079: centos-linux-3.10-x86smp-fix-max_logical_packages_values-bug12466.patch +# Patch20080: centos-linux-3.10-ixgbe-force-VLNCTRL_VFE-bug12653.patch +### mpt3sas patches bug12600 ### +Patch20081: centos-linux-3.10-0001-scsi-mpt3sas-Fix-for-improper-info-displayed-in-var-.patch +Patch20082: centos-linux-3.10-0002-scsi-mpt3sas-Fix-for-incorrect-numbers-for-MSIX-vect.patch +Patch20083: centos-linux-3.10-0003-scsi-mpt3sas-Implement-device_remove_in_progress-che.patch +Patch20084: centos-linux-3.10-0004-scsi-mpt3sas-Remove-unused-macro-MPT_DEVICE_TLR_ON.patch +Patch20085: centos-linux-3.10-0005-scsi-mpt3sas-Bump-driver-version-as-14.100.00.00.patch +Patch20086: centos-linux-3.10-0006-scsi-mpt3sas-Added-Device-ID-s-for-SAS35-devices-and.patch +Patch20087: centos-linux-3.10-0007-scsi-mpt3sas-Increased-Additional-MSIX-support-for-S.patch +Patch20088: centos-linux-3.10-0008-scsi-mpt3sas-set-EEDP-escape-flags-for-SAS35-devices.patch +Patch20089: centos-linux-3.10-0009-scsi-mpt3sas-Use-the-new-MPI-2.6-32-bit-Atomic-Reque.patch +Patch20090: centos-linux-3.10-0010-scsi-mpt3sas-Fix-for-Endianness-issue.patch +Patch20091: centos-linux-3.10-0011-scsi-mpt3sas-Bump-driver-version-as-14.101.00.00.patch +### megaraid patches bug12601 ### +Patch20092: centos-linux-3.10-0001-scsi-megaraid_sas-Add-new-pci-device-Ids-for-SAS3.5-.patch +Patch20093: centos-linux-3.10-0002-scsi-megaraid_sas-128-MSIX-Support.patch +Patch20094: centos-linux-3.10-0003-scsi-megaraid_sas-EEDP-Escape-Mode-Support-for-SAS3..patch +Patch20095: centos-linux-3.10-0004-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch +Patch20096: centos-linux-3.10-0005-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch +Patch20097: centos-linux-3.10-0006-scsi-megaraid_sas-Dynamic-Raid-Map-Changes-for-SAS3..patch +Patch20098: centos-linux-3.10-0007-scsi-megaraid_sas-Add-the-Support-for-SAS3.5-Generic.patch +Patch20099: centos-linux-3.10-0008-scsi-megaraid_sas-Enable-or-Disable-Fast-path-based-.patch +Patch20100: centos-linux-3.10-0009-scsi-megaraid_sas-ldio_outstanding-variable-is-not-d.patch +Patch20101: centos-linux-3.10-0010-scsi-megaraid_sas-Implement-the-PD-Map-support-for-S.patch +Patch20102: centos-linux-3.10-0011-scsi-megaraid_sas-driver-version-upgrade.patch +### end of mpt3sas and megaraid patches ### +#Patch20103: centos-linux-3.10-ipv6refcnt-bug12711.patch +Patch20104: centos-linux-3.10-scsi-storvsc-fix-bug12841.patch +Patch20105: centos-linux-3.10-x86-perf-uncore-Avoid-kernel-panic-on-missing-topolo-bug12818.patch +### bug 10414 +Patch20106: centos-linux-3.10-0001-get-rid-of-propagate_umount-mistakenly-treating-slav.patch +Patch20107: centos-linux-3.10-0002-vfs-Keep-a-list-of-mounts-on-a-mount-point.patch +Patch20108: centos-linux-3.10-0003-vfs-Add-a-function-to-lazily-unmount-all-mounts-from.patch +Patch20109: centos-linux-3.10-0004-vfs-Lazily-remove-mounts-on-unlinked-files-and-direc.patch +### end of bug 10414 +# Patch20110: centos-linux-3.10-ptrace-fix-fork-event-messages-bug13265.patch +Patch20111: centos-linux-3.10-mlx5-fix-32-bit-build-error-bug13344.patch +Patch20112: centos-linux-3.10-neigh-do-not-modify-unlinked-entris-bug13241.patch + +# empty final patch to facilitate testing of kernel patches +Patch999999: linux-kernel-test.patch + BuildRoot: %{_tmppath}/kernel-%{KVRA}-root %description @@ -693,11 +784,99 @@ cd linux-%{KVRA} # Drop some necessary files from the source dir into the buildroot cp $RPM_SOURCE_DIR/kernel-%{version}-*.config . -ApplyOptionalPatch linux-kernel-test.patch -ApplyOptionalPatch debrand-single-cpu.patch +# CentOS Modification ApplyOptionalPatch debrand-rh_taint.patch +ApplyOptionalPatch debrand-single-cpu.patch ApplyOptionalPatch debrand-rh-i686-cpu.patch +# i686 mods +%ifarch %{ix86} +#ApplyOptionalPatch ignorewarnings.patch +ApplyOptionalPatch removejiffies.patch +ApplyOptionalPatch cpufreq.patch +ApplyOptionalPatch i386-audit-stop-scri-stack-frame.patch +ApplyOptionalPatch addmissing.patch +ApplyOptionalPatch morefixes.patch +#ApplyOptionalPatch undorhirqstat.patch +#ApplyOptionalPatch otherfixes.patch +ApplyOptionalPatch clear-32bit-Werror-warnings.patch +ApplyOptionalPatch upstream-32bit-fixes.patch +%endif + +### plus mod +ApplyOptionalPatch centos-linux-3.10-hid-non-LogiTech-remote-bug5780.patch +#ApplyOptionalPatch centos-linux-3.10-ipc-fix-compat-msgrcv-bug7099.patch +#ApplyOptionalPatch centos-linux-3.10-fix-argument-list-too-long.patch +#ApplyOptionalPatch centos-linux-3.10-missing-Unifying-device-bug7340.patch +#ApplyOptionalPatch centos-linux-3.10-vxlan-fix-crash-when-interface-created-with-no-group-bug7454.patch +#ApplyOptionalPatch centos-linux-3.10-numa-remove-bugON-bug7474.patch +#ApplyOptionalPatch centos-linux-3.10-fix-wakingup-AMD-family-bug7645.patch +#ApplyOptionalPatch centos-linux-3.10-fix-nfs4_sequence_corruptor-bug7604.patch +#ApplyOptionalPatch centos-linux-3.10-tick-clear-broadcast-pending-bug7852.patch +#ApplyOptionalPatch centos-linux-3.10-bnx2x_fix_link_for_KR-bug7942.patch +ApplyOptionalPatch centos-linux-3.10-reiserfs-fix-redefine-error.patch +ApplyOptionalPatch centos-linux-3.10-fix-em28xx-cards-bug8285.patch +#ApplyOptionalPatch centos-linux-3.10-netfilter-nf_conntrack-fix-bug8341.patch +#ApplyOptionalPatch centos-linux-3.10-futex-Ensure-get_futex_key_refs-bug8803.patch +ApplyOptionalPatch centos-linux-3.10-fix-ecryptfs-error-bug7369.patch +#ApplyOptionalPatch centos-linux-3.10-fix-ioatdma-driver-bug8778.patch +#ApplyOptionalPatch centos-linux-3.10-fix-xfrm-input-bug9646.patch +#ApplyOptionalPatch centos-linux-3.10-3w-sas-fix-race-bug10073.patch +#ApplyOptionalPatch centos-linux-3.10-fix-dm-thin-metadata-bug10191.patch +#ApplyOptionalPatch centos-linux-3.10-namespaces-bug10320.patch +#ApplyOptionalPatch centos-linux-3.10-mpt3sas-SML-bug10516.patch +#ApplyOptionalPatch centos-linux-3.10-mpt3sas-fix-block-bug10516.patch +ApplyOptionalPatch centos-linux-3.10-support-MacBookPro-bug10447.patch +#ApplyOptionalPatch centos-linux-3.10-3w-xxxx-fix-race-bug10033.patch +#ApplyOptionalPatch centos-linux-3.10-3w-9xxx-fix-race-1of2-bug10033.patch +#ApplyOptionalPatch centos-linux-3.10-3w-9xxx-fix-race-2of2-bug10033.patch +#ApplyOptionalPatch centos-linux-3.10-e1000-Tx-fix-1-bug10767.patch +#ApplyOptionalPatch centos-linux-3.10-e1000-Tx-fix-2-bug10767.patch +#ApplyOptionalPatch centos-linux-3.10-fix-truncation-bug-EFI-bug10729.patch +#ApplyOptionalPatch centos-linux-3.10-md-fix-freeing-private-data-bug11184.patch +#ApplyOptionalPatch centos-linux-3.10-pci-fix-regression-mlx4-bug12277.patch +#ApplyOptionalPatch centos-linux-3.10-x86smp-fix-max_logical_packages_values-bug12466.patch +#ApplyOptionalPatch centos-linux-3.10-ixgbe-force-VLNCTRL_VFE-bug12653.patch +### mpt3sas and megaraid patches bug12600 ### +ApplyOptionalPatch centos-linux-3.10-0001-scsi-mpt3sas-Fix-for-improper-info-displayed-in-var-.patch +ApplyOptionalPatch centos-linux-3.10-0002-scsi-mpt3sas-Fix-for-incorrect-numbers-for-MSIX-vect.patch +ApplyOptionalPatch centos-linux-3.10-0003-scsi-mpt3sas-Implement-device_remove_in_progress-che.patch +ApplyOptionalPatch centos-linux-3.10-0004-scsi-mpt3sas-Remove-unused-macro-MPT_DEVICE_TLR_ON.patch +ApplyOptionalPatch centos-linux-3.10-0005-scsi-mpt3sas-Bump-driver-version-as-14.100.00.00.patch +ApplyOptionalPatch centos-linux-3.10-0006-scsi-mpt3sas-Added-Device-ID-s-for-SAS35-devices-and.patch +ApplyOptionalPatch centos-linux-3.10-0007-scsi-mpt3sas-Increased-Additional-MSIX-support-for-S.patch +ApplyOptionalPatch centos-linux-3.10-0008-scsi-mpt3sas-set-EEDP-escape-flags-for-SAS35-devices.patch +ApplyOptionalPatch centos-linux-3.10-0009-scsi-mpt3sas-Use-the-new-MPI-2.6-32-bit-Atomic-Reque.patch +ApplyOptionalPatch centos-linux-3.10-0010-scsi-mpt3sas-Fix-for-Endianness-issue.patch +ApplyOptionalPatch centos-linux-3.10-0011-scsi-mpt3sas-Bump-driver-version-as-14.101.00.00.patch +ApplyOptionalPatch centos-linux-3.10-0001-scsi-megaraid_sas-Add-new-pci-device-Ids-for-SAS3.5-.patch +ApplyOptionalPatch centos-linux-3.10-0002-scsi-megaraid_sas-128-MSIX-Support.patch +ApplyOptionalPatch centos-linux-3.10-0003-scsi-megaraid_sas-EEDP-Escape-Mode-Support-for-SAS3..patch +ApplyOptionalPatch centos-linux-3.10-0004-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch +ApplyOptionalPatch centos-linux-3.10-0005-scsi-megaraid_sas-SAS3.5-Generic-Megaraid-Controller.patch +ApplyOptionalPatch centos-linux-3.10-0006-scsi-megaraid_sas-Dynamic-Raid-Map-Changes-for-SAS3..patch +ApplyOptionalPatch centos-linux-3.10-0007-scsi-megaraid_sas-Add-the-Support-for-SAS3.5-Generic.patch +ApplyOptionalPatch centos-linux-3.10-0008-scsi-megaraid_sas-Enable-or-Disable-Fast-path-based-.patch +ApplyOptionalPatch centos-linux-3.10-0009-scsi-megaraid_sas-ldio_outstanding-variable-is-not-d.patch +ApplyOptionalPatch centos-linux-3.10-0010-scsi-megaraid_sas-Implement-the-PD-Map-support-for-S.patch +ApplyOptionalPatch centos-linux-3.10-0011-scsi-megaraid_sas-driver-version-upgrade.patch +### end of mpt3sas and megaraid patches +#ApplyOptionalPatch centos-linux-3.10-ipv6refcnt-bug12711.patch +ApplyOptionalPatch centos-linux-3.10-scsi-storvsc-fix-bug12841.patch +ApplyOptionalPatch centos-linux-3.10-x86-perf-uncore-Avoid-kernel-panic-on-missing-topolo-bug12818.patch +ApplyOptionalPatch centos-linux-3.10-0001-get-rid-of-propagate_umount-mistakenly-treating-slav.patch +ApplyOptionalPatch centos-linux-3.10-0002-vfs-Keep-a-list-of-mounts-on-a-mount-point.patch +ApplyOptionalPatch centos-linux-3.10-0003-vfs-Add-a-function-to-lazily-unmount-all-mounts-from.patch +ApplyOptionalPatch centos-linux-3.10-0004-vfs-Lazily-remove-mounts-on-unlinked-files-and-direc.patch +#ApplyOptionalPatch centos-linux-3.10-ptrace-fix-fork-event-messages-bug13265.patch +ApplyOptionalPatch centos-linux-3.10-mlx5-fix-32-bit-build-error-bug13344.patch +ApplyOptionalPatch centos-linux-3.10-neigh-do-not-modify-unlinked-entris-bug13241.patch + +### end of plus mod +# End of CentOS Modification + +ApplyOptionalPatch linux-kernel-test.patch + # Any further pre-build tree manipulations happen here. chmod +x scripts/checkpatch.pl @@ -876,7 +1055,6 @@ BuildKernel() { # install gcov-needed files to $BUILDROOT/$BUILD/...: # gcov_info->filename is absolute path # gcno references to sources can use absolute paths (e.g. in out-of-tree builds) - # sysfs symlink targets (set up at compile time) use absolute paths to BUILD dir find . \( -name '*.gcno' -o -name '*.[chS]' \) -exec install -D '{}' "$RPM_BUILD_ROOT/$(pwd)/{}" \; %endif fi @@ -1083,7 +1261,7 @@ make %{?cross_opts} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false make %{?_smp_mflags} centrino-decode powernow-k8-decode popd %endif -%ifarch x86_64 +%ifarch x86_64 i686 pushd tools/power/x86/x86_energy_perf_policy/ make popd @@ -1364,6 +1542,25 @@ then\ fi\ %{nil} +### plus kernel mod ### +### remove initramfs-xxxkdump.img upon kernel removal +%postun +# List out the initrds here, strip out version numbers +# and search for corresponding kernel installs, if a kernel +# is not found, remove the corresponding kdump initrd +for i in `ls /boot/initramfs*kdump.img 2>/dev/null` +do + KDVER=`echo $i | sed -e's/^.*initramfs-//' -e's/kdump.*$//'` + if [ ! -e /boot/vmlinuz-$KDVER ] + then + # We have found an initrd with no corresponding kernel + # so we should be able to remove it + rm -f $i + fi +done + +### end of plus kernel mod ### + %kernel_variant_preun %kernel_variant_post @@ -1550,8 +1747,38 @@ fi %kernel_variant_files %{with_kdump} kdump %changelog -* Mon Jun 19 2017 CentOS Sources - 3.10.0-514.21.2.el7 +* Wed Jun 21 2017 Akemi Yagi [3.10.0-514.21.2.el7.centos.plus] - Apply debranding changes +- Roll in i686 mods +- Modify config file for x86_64 with extra features turned on including + some network adapters, BusLogic, ReiserFS, TOMOYO +- Add in a patch that allows non-LogiTech remote to work [bug#5780] +- JFS enabled [bug#7350] +- NUMACHIP enabled [bug#7498] +- AIC7xxx enabled [bug#7552] +- Enabled via_velocity [bug#7877] +- Add in a patch that fixes em28xx-cards [bug#8285] +- Enabled ECRYPT_FS with a patch to fix build error [bug#7369] +- Enabled Keyboard GPIO [bug#9063] +- Enabled XEN_FBDEV_FRONTEND [bug#9463] +- Enabled LINE6_USB [bug#9569] +- Enabled I2C_MUX [bug#9592] +- Enabled spidev [bug#9955] +- Add in patches from bug 10191 [bug#10191] +- Add in a patch from bug 10320 [bug#10320] +- Add a patch [bug#10447] +- Enable ATM drivers [bug#10845] +- Add 9pfs config options [bug#10849] +- Enable VFIO_PCI_VGA [bug#12435] +- Add mpt3sas patches [big#12600] +- Add megaraid patches [bug#12601] +- Rremove initramfs-xxxkdump.img upon kernel removal [bug#12703] +- Add a patch from [bug#12841] +- Add a patch from [bug#12818] +- Add patches from [bug#10414] +- Enabled RT2800USB_RT3573 [bug#13162] +- Add a patch from [bug#13344] (fix 32-bit build error) +- Add patch from bug [bug#13241] * Sun May 28 2017 Frantisek Hrbata [3.10.0-514.21.2.el7] - [mm] enlarge stack guard gap (Larry Woodman) [1452732 1452733]