From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752763Ab1AXMm0 (ORCPT ); Mon, 24 Jan 2011 07:42:26 -0500 Received: from mail-yw0-f46.google.com ([209.85.213.46]:62683 "EHLO mail-yw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752344Ab1AXMmZ convert rfc822-to-8bit (ORCPT ); Mon, 24 Jan 2011 07:42:25 -0500 DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type:content-transfer-encoding; b=kRK30IIyE7v/9mGluhwMNXj1ayyoC8LLg65N3L+Cyz+JrENbAHUsT3w6QkUYH9vodD +Mg4U17iCIeUNCfqbmX0iB8iSHt5CzY/oWMNxbpeMlxcuUcOF2AVCZuGQP2CaRGMbWj4 hW5s+A1uwXTFM7jeXcRR/GK48EB6yc+orCif0= MIME-Version: 1.0 In-Reply-To: References: From: Hui Zhu Date: Mon, 24 Jan 2011 20:42:03 +0800 Message-ID: Subject: Re: [PATCH] Built kernel without -O2 option To: Kevin Pouget Cc: linux-kernel@vger.kernel.org, gdb@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Great. But I am not sure it can work OK in arm. I will try it too. Thanks, Hui On Mon, Jan 24, 2011 at 16:11, Kevin Pouget wrote: > I'm looking forward to testing in on ARM linux once it's ready, if > it's on our roadmad :) > > > Kevin > > > (sorry if you got it twice, the first one might have been rejected > because of HTML content) > > On Mon, Jan 24, 2011 at 8:47 AM, Hui Zhu wrote: >> >> https://lkml.org/lkml/2010/11/28/211 >> >> Update follow kernel trunk. >> >> I built and use it in i386 and x86_64 with 2.6.38-rc2+. >> >> And I will put new patch in here and >> http://code.google.com/p/kgtp/downloads/list >> >> Thanks, >> Hui >> >> Signed-off-by: Hui Zhu >> --- >> >> --- >>  Makefile                                        |    2 ++ >>  arch/x86/crypto/Makefile                        |    6 ++++++ >>  arch/x86/include/asm/page_64_types.h            |    4 ++++ >>  arch/x86/include/asm/uaccess_32.h               |    4 ++++ >>  arch/x86/kernel/Makefile                        |    9 +++++++++ >>  arch/x86/kvm/Makefile                           |    6 ++++++ >>  arch/x86/lib/Makefile                           |    4 ++++ >>  arch/x86/power/Makefile                         |    4 ++++ >>  crypto/Makefile                                 |    4 ++++ >>  drivers/char/mwave/Makefile                     |    4 ++++ >>  drivers/gpu/drm/i915/Makefile                   |    4 ++++ >>  drivers/gpu/drm/i915/i915_drv.h                 |    4 ++++ >>  drivers/gpu/drm/nouveau/Makefile                |    4 ++++ >>  drivers/gpu/drm/radeon/Makefile                 |    4 ++++ >>  drivers/infiniband/hw/qib/Makefile              |    4 ++++ >>  drivers/net/can/sja1000/Makefile                |    4 ++++ >>  drivers/staging/comedi/drivers/Makefile         |    4 ++++ >>  drivers/staging/et131x/et1310_address_map.h     |    8 ++++++++ >>  drivers/staging/rtl8187se/ieee80211/ieee80211.h |    8 ++++++++ >>  drivers/staging/wlags49_h2/wl_internal.h        |    9 ++++++++- >>  drivers/usb/gadget/f_loopback.c                 |    2 ++ >>  drivers/usb/gadget/f_sourcesink.c               |    2 ++ >>  drivers/usb/gadget/g_zero.h                     |    2 ++ >>  drivers/usb/host/Makefile                       |    4 ++++ >>  fs/Makefile                                     |    5 +++++ >>  include/linux/pagemap.h                         |    2 ++ >>  init/Kconfig                                    |    1 + >>  kernel/Makefile                                 |    4 ++++ >>  kernel/kfifo.c                                  |    3 +++ >>  lib/Kconfig.debug                               |    8 ++++++++ >>  lib/raid6/Makefile                              |    6 ++++++ >>  mm/Makefile                                     |    6 ++++++ >>  mm/memory.c                                     |    6 ++++++ >>  mm/mincore.c                                    |    2 ++ >>  mm/percpu.c                                     |    4 ++++ >>  mm/rmap.c                                       |    2 ++ >>  net/mac80211/cfg.c                              |    2 ++ >>  net/mac80211/iface.c                            |    8 ++++++++ >>  net/mac80211/mesh.h                             |    2 ++ >>  net/mac80211/rx.c                               |    8 ++++++++ >>  net/mac80211/sta_info.c                         |    2 ++ >>  net/mac80211/status.c                           |    2 ++ >>  net/mac80211/tx.c                               |    4 ++++ >>  net/netfilter/nf_conntrack_pptp.c               |    3 ++- >>  44 files changed, 188 insertions(+), 2 deletions(-) >> >> --- a/Makefile >> +++ b/Makefile >> @@ -541,8 +541,10 @@ all: vmlinux >>  ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE >>  KBUILD_CFLAGS  += -Os >>  else >> +ifndef CONFIG_CC_CLOSE_OPTIMIZATION >>  KBUILD_CFLAGS  += -O2 >>  endif >> +endif >> >>  include $(srctree)/arch/$(SRCARCH)/Makefile >> >> --- a/arch/x86/crypto/Makefile >> +++ b/arch/x86/crypto/Makefile >> @@ -2,6 +2,12 @@ >>  # Arch-specific CryptoAPI modules. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_fpu.o                           += -O2 >> +CFLAGS_aesni-intel_glue.o              += -O2 >> +CFLAGS_ghash-clmulni-intel_glue.o      += -O2 >> +endif >> + >>  obj-$(CONFIG_CRYPTO_FPU) += fpu.o >> >>  obj-$(CONFIG_CRYPTO_AES_586) += aes-i586.o >> --- a/arch/x86/include/asm/page_64_types.h >> +++ b/arch/x86/include/asm/page_64_types.h >> @@ -1,7 +1,11 @@ >>  #ifndef _ASM_X86_PAGE_64_DEFS_H >>  #define _ASM_X86_PAGE_64_DEFS_H >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +#define THREAD_ORDER   2 >> +#else >>  #define THREAD_ORDER   1 >> +#endif >>  #define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER) >>  #define CURRENT_MASK (~(THREAD_SIZE - 1)) >> >> --- a/arch/x86/include/asm/uaccess_32.h >> +++ b/arch/x86/include/asm/uaccess_32.h >> @@ -209,7 +209,11 @@ static inline unsigned long __must_check >>        if (likely(sz == -1 || sz >= n)) >>                n = _copy_from_user(to, from, n); >>        else >> +#ifndef CONFIG_CC_CLOSE_OPTIMIZATION >>                copy_from_user_overflow(); >> +#else >> +               n = -EFAULT; >> +#endif >> >>        return n; >>  } >> --- a/arch/x86/kernel/Makefile >> +++ b/arch/x86/kernel/Makefile >> @@ -31,6 +31,15 @@ GCOV_PROFILE_hpet.o          := n >>  GCOV_PROFILE_tsc.o             := n >>  GCOV_PROFILE_paravirt.o                := n >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_process_$(BITS).o       += -O2 >> +CFLAGS_entry_$(BITS).o         += -O2 >> +CFLAGS_traps.o                 += -O2 >> +CFLAGS_i387.o                  += -O2 >> +CFLAGS_xsave.o                 += -O2 >> +CFLAGS_hpet.o                  += -O2 >> +endif >> + >>  obj-y                  := process_$(BITS).o signal.o entry_$(BITS).o >>  obj-y                  += traps.o irq.o irq_$(BITS).o dumpstack_$(BITS).o >>  obj-y                  += time.o ioport.o ldt.o dumpstack.o >> --- a/arch/x86/kvm/Makefile >> +++ b/arch/x86/kvm/Makefile >> @@ -5,6 +5,12 @@ CFLAGS_x86.o := -I. >>  CFLAGS_svm.o := -I. >>  CFLAGS_vmx.o := -I. >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_x86.o           += -O2 >> +CFLAGS_emulate.o       += -O2 >> +CFLAGS_svm.o           += -O2 >> +endif >> + >>  kvm-y                  += $(addprefix ../../../virt/kvm/, kvm_main.o ioapic.o \ >>                                coalesced_mmio.o irq_comm.o eventfd.o \ >>                                assigned-dev.o) >> --- a/arch/x86/lib/Makefile >> +++ b/arch/x86/lib/Makefile >> @@ -2,6 +2,10 @@ >>  # Makefile for x86 specific library files. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_memmove_64.o    += -O2 >> +endif >> + >>  inat_tables_script = $(srctree)/arch/x86/tools/gen-insn-attr-x86.awk >>  inat_tables_maps = $(srctree)/arch/x86/lib/x86-opcode-map.txt >>  quiet_cmd_inat_tables = GEN     $@ >> --- a/arch/x86/power/Makefile >> +++ b/arch/x86/power/Makefile >> @@ -3,5 +3,9 @@ >>  nostackp := $(call cc-option, -fno-stack-protector) >>  CFLAGS_cpu.o   := $(nostackp) >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_cpu.o   += -O2 >> +endif >> + >>  obj-$(CONFIG_PM_SLEEP)         += cpu.o >>  obj-$(CONFIG_HIBERNATION)      += hibernate_$(BITS).o hibernate_asm_$(BITS).o >> --- a/crypto/Makefile >> +++ b/crypto/Makefile >> @@ -2,6 +2,10 @@ >>  # Cryptographic API >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_xor.o   += -O2 >> +endif >> + >>  obj-$(CONFIG_CRYPTO) += crypto.o >>  crypto-y := api.o cipher.o compress.o >> >> --- a/drivers/char/mwave/Makefile >> +++ b/drivers/char/mwave/Makefile >> @@ -4,6 +4,10 @@ >>  # See the README file in this directory for more info. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_smapi.o += -O2 >> +endif >> + >>  obj-$(CONFIG_MWAVE) += mwave.o >> >>  mwave-y := mwavedd.o smapi.o tp3780i.o 3780i.o >> --- a/drivers/gpu/drm/i915/Makefile >> +++ b/drivers/gpu/drm/i915/Makefile >> @@ -2,6 +2,10 @@ >>  # Makefile for the drm device driver.  This driver provides support for the >>  # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_i915_gem.o      += -O2 >> +endif >> + >>  ccflags-y := -Iinclude/drm >>  i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o \ >>          i915_debugfs.o \ >> --- a/drivers/gpu/drm/i915/i915_drv.h >> +++ b/drivers/gpu/drm/i915/i915_drv.h >> @@ -1221,7 +1221,11 @@ extern int intel_setup_gmbus(struct drm_ >>  extern void intel_teardown_gmbus(struct drm_device *dev); >>  extern void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed); >>  extern void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit); >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter) >> +#else >>  extern inline bool intel_gmbus_is_forced_bit(struct i2c_adapter *adapter) >> +#endif >>  { >>        return container_of(adapter, struct intel_gmbus, adapter)->force_bit; >>  } >> --- a/drivers/gpu/drm/nouveau/Makefile >> +++ b/drivers/gpu/drm/nouveau/Makefile >> @@ -2,6 +2,10 @@ >>  # Makefile for the drm device driver.  This driver provides support for the >>  # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_nv50_instmem.o  += -O2 >> +endif >> + >>  ccflags-y := -Iinclude/drm >>  nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ >>              nouveau_object.o nouveau_irq.o nouveau_notifier.o \ >> --- a/drivers/gpu/drm/radeon/Makefile >> +++ b/drivers/gpu/drm/radeon/Makefile >> @@ -2,6 +2,10 @@ >>  # Makefile for the drm device driver.  This driver provides support for the >>  # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_radeon_gem.o    += -O2 >> +endif >> + >>  ccflags-y := -Iinclude/drm >> >>  hostprogs-y := mkregtable >> --- a/drivers/infiniband/hw/qib/Makefile >> +++ b/drivers/infiniband/hw/qib/Makefile >> @@ -1,5 +1,9 @@ >>  obj-$(CONFIG_INFINIBAND_QIB) += ib_qib.o >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_qib_iba7322.o   += -O2 >> +endif >> + >>  ib_qib-y := qib_cq.o qib_diag.o qib_dma.o qib_driver.o qib_eeprom.o \ >>        qib_file_ops.o qib_fs.o qib_init.o qib_intr.o qib_keys.o \ >>        qib_mad.o qib_mmap.o qib_mr.o qib_pcie.o qib_pio_copy.o \ >> --- a/drivers/net/can/sja1000/Makefile >> +++ b/drivers/net/can/sja1000/Makefile >> @@ -2,6 +2,10 @@ >>  #  Makefile for the SJA1000 CAN controller drivers. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_kvaser_pci.o    += -O2 >> +endif >> + >>  obj-$(CONFIG_CAN_SJA1000) += sja1000.o >>  obj-$(CONFIG_CAN_SJA1000_ISA) += sja1000_isa.o >>  obj-$(CONFIG_CAN_SJA1000_PLATFORM) += sja1000_platform.o >> --- a/drivers/staging/comedi/drivers/Makefile >> +++ b/drivers/staging/comedi/drivers/Makefile >> @@ -1,6 +1,10 @@ >>  # Makefile for individual comedi drivers >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_cb_pcidas64.o   += -O2 >> +endif >> + >>  # Comedi "helper" modules >>  obj-$(CONFIG_COMEDI)                   += pcm_common.o >> >> --- a/drivers/staging/et131x/et1310_address_map.h >> +++ b/drivers/staging/et131x/et1310_address_map.h >> @@ -212,12 +212,20 @@ struct global_regs {                      /* Location: */ >>  #define INDEX10(x)     ((x) & ET_DMA10_MASK) >>  #define INDEX4(x)      ((x) & ET_DMA4_MASK) >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline void add_10bit(u32 *v, int n) >> +#else >>  extern inline void add_10bit(u32 *v, int n) >> +#endif >>  { >>        *v = INDEX10(*v + n) | (*v & ET_DMA10_WRAP); >>  } >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline void add_12bit(u32 *v, int n) >> +#else >>  extern inline void add_12bit(u32 *v, int n) >> +#endif >>  { >>        *v = INDEX12(*v + n) | (*v & ET_DMA12_WRAP); >>  } >> --- a/drivers/staging/rtl8187se/ieee80211/ieee80211.h >> +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211.h >> @@ -1221,7 +1221,11 @@ static inline void *ieee80211_priv(struc >>        return ((struct ieee80211_device *)netdev_priv(dev))->priv; >>  } >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline int ieee80211_is_empty_essid(const char *essid, int essid_len) >> +#else >>  extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) >> +#endif >>  { >>        /* Single white space is for Linksys APs */ >>        if (essid_len == 1 && essid[0] == ' ') >> @@ -1263,7 +1267,11 @@ extern inline int ieee80211_is_valid_mod >>        return 0; >>  } >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline int ieee80211_get_hdrlen(u16 fc) >> +#else >>  extern inline int ieee80211_get_hdrlen(u16 fc) >> +#endif >>  { >>        int hdrlen = 24; >> >> --- a/drivers/staging/wlags49_h2/wl_internal.h >> +++ b/drivers/staging/wlags49_h2/wl_internal.h >> @@ -1022,8 +1022,11 @@ static inline void wl_unlock(struct wl_p >>  /********************************************************************/ >>  /* Interrupt enable disable functions                               */ >>  /********************************************************************/ >> - >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline void wl_act_int_on(struct wl_private *lp) >> +#else >>  extern inline void wl_act_int_on(struct wl_private *lp) >> +#endif >>  { >>        /* >>         * Only do something when the driver is handling >> @@ -1035,7 +1038,11 @@ extern inline void wl_act_int_on(struct >>        } >>  } >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +static inline void wl_act_int_off(struct wl_private *lp) >> +#else >>  extern inline void wl_act_int_off(struct wl_private *lp) >> +#endif >>  { >>        /* >>         * Only do something when the driver is handling >> --- a/drivers/usb/gadget/f_loopback.c >> +++ b/drivers/usb/gadget/f_loopback.c >> @@ -376,10 +376,12 @@ int __init loopback_add(struct usb_compo >>                sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; >> >>        /* support OTG systems */ >> +#ifdef CONFIG_USB_OTG >>        if (gadget_is_otg(cdev->gadget)) { >>                loopback_driver.descriptors = otg_desc; >>                loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; >>        } >> +#endif >> >>        return usb_add_config(cdev, &loopback_driver, loopback_bind_config); >>  } >> --- a/drivers/usb/gadget/f_sourcesink.c >> +++ b/drivers/usb/gadget/f_sourcesink.c >> @@ -526,10 +526,12 @@ int __init sourcesink_add(struct usb_com >>                sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; >> >>        /* support OTG systems */ >> +#ifdef CONFIG_USB_OTG >>        if (gadget_is_otg(cdev->gadget)) { >>                sourcesink_driver.descriptors = otg_desc; >>                sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; >>        } >> +#endif >> >>        return usb_add_config(cdev, &sourcesink_driver, sourcesink_bind_config); >>  } >> --- a/drivers/usb/gadget/g_zero.h >> +++ b/drivers/usb/gadget/g_zero.h >> @@ -10,7 +10,9 @@ >> >>  /* global state */ >>  extern unsigned buflen; >> +#ifdef CONFIG_USB_OTG >>  extern const struct usb_descriptor_header *otg_desc[]; >> +#endif >> >>  /* common utilities */ >>  struct usb_request *alloc_ep_req(struct usb_ep *ep); >> --- a/drivers/usb/host/Makefile >> +++ b/drivers/usb/host/Makefile >> @@ -4,6 +4,10 @@ >> >>  ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_ehci-hcd.o      += -O2 >> +endif >> + >>  isp1760-y := isp1760-hcd.o isp1760-if.o >> >>  fhci-y := fhci-hcd.o fhci-hub.o fhci-q.o >> --- a/fs/Makefile >> +++ b/fs/Makefile >> @@ -13,6 +13,11 @@ obj-y :=     open.o read_write.o file_table. >>                pnode.o drop_caches.o splice.o sync.o utimes.o \ >>                stack.o fs_struct.o statfs.o >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_compat_ioctl.o  += -O2 >> +CFLAGS_binfmt_elf.o    += -O2 >> +endif >> + >>  ifeq ($(CONFIG_BLOCK),y) >>  obj-y +=       buffer.o bio.o block_dev.o direct-io.o mpage.o ioprio.o >>  else >> --- a/include/linux/pagemap.h >> +++ b/include/linux/pagemap.h >> @@ -289,8 +289,10 @@ static inline pgoff_t linear_page_index( >>                                        unsigned long address) >>  { >>        pgoff_t pgoff; >> +#ifdef CONFIG_HUGETLBFS >>        if (unlikely(is_vm_hugetlb_page(vma))) >>                return linear_hugepage_index(vma, address); >> +#endif >>        pgoff = (address - vma->vm_start) >> PAGE_SHIFT; >>        pgoff += vma->vm_pgoff; >>        return pgoff >> (PAGE_CACHE_SHIFT - PAGE_SHIFT); >> --- a/init/Kconfig >> +++ b/init/Kconfig >> @@ -886,6 +886,7 @@ endif >> >>  config CC_OPTIMIZE_FOR_SIZE >>        bool "Optimize for size" >> +       depends on !CC_CLOSE_OPTIMIZATION >>        default y >>        help >>          Enabling this option will pass "-Os" instead of "-O2" to gcc >> --- a/kernel/Makefile >> +++ b/kernel/Makefile >> @@ -2,6 +2,10 @@ >>  # Makefile for the linux kernel. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_sched.o += -O2 >> +endif >> + >>  obj-y     = sched.o fork.o exec_domain.o panic.o printk.o \ >>            cpu.o exit.o itimer.o time.o softirq.o resource.o \ >>            sysctl.o sysctl_binary.o capability.o ptrace.o timer.o user.o \ >> --- a/kernel/kfifo.c >> +++ b/kernel/kfifo.c >> @@ -402,6 +402,9 @@ unsigned int __kfifo_max_r(unsigned int >>                return max; >>        return len; >>  } >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +EXPORT_SYMBOL(__kfifo_max_r); >> +#endif >> >>  #define        __KFIFO_PEEK(data, out, mask) \ >>        ((data)[(out) & (mask)]) >> --- a/lib/Kconfig.debug >> +++ b/lib/Kconfig.debug >> @@ -136,6 +136,14 @@ config DEBUG_SECTION_MISMATCH >>          - Enable verbose reporting from modpost to help solving >>            the section mismatches reported. >> >> +config CC_CLOSE_OPTIMIZATION >> +       bool "Close GCC optimization" >> +       default n >> +       help >> +         Enabling this option will let gcc build kernel without "-O2". >> + >> +         If unsure, say N. >> + >>  config DEBUG_KERNEL >>        bool "Kernel debugging" >>        help >> --- a/lib/raid6/Makefile >> +++ b/lib/raid6/Makefile >> @@ -1,3 +1,9 @@ >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_mmx.o   += -O2 >> +CFLAGS_sse1.o  += -O2 >> +CFLAGS_sse2.o  += -O2 >> +endif >> + >>  obj-$(CONFIG_RAID6_PQ) += raid6_pq.o >> >>  raid6_pq-y     += algos.o recov.o tables.o int1.o int2.o int4.o \ >> --- a/mm/Makefile >> +++ b/mm/Makefile >> @@ -2,6 +2,12 @@ >>  # Makefile for the linux memory manager. >>  # >> >> +ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +CFLAGS_slob.o  += -O2 >> +CFLAGS_slab.o  += -O2 >> +CFLAGS_slub.o  += -O2 >> +endif >> + >>  mmu-y                  := nommu.o >>  mmu-$(CONFIG_MMU)      := fremap.o highmem.o madvise.o memory.o mincore.o \ >>                           mlock.o mmap.o mprotect.o mremap.o msync.o rmap.o \ >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -1317,8 +1317,10 @@ struct page *follow_page(struct vm_area_ >>                                spin_unlock(&mm->page_table_lock); >>                                wait_split_huge_page(vma->anon_vma, pmd); >>                        } else { >> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE >>                                page = follow_trans_huge_pmd(mm, address, >>                                                             pmd, flags); >> +#endif >>                                spin_unlock(&mm->page_table_lock); >>                                goto out; >>                        } >> @@ -2775,7 +2777,9 @@ static int do_swap_page(struct mm_struct >> >>        if (ksm_might_need_to_copy(page, vma, address)) { >>                swapcache = page; >> +#ifdef CONFIG_KSM >>                page = ksm_does_need_to_copy(page, vma, address); >> +#endif >> >>                if (unlikely(!page)) { >>                        ret = VM_FAULT_OOM; >> @@ -3314,11 +3318,13 @@ int handle_mm_fault(struct mm_struct *mm >>                pmd_t orig_pmd = *pmd; >>                barrier(); >>                if (pmd_trans_huge(orig_pmd)) { >> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE >>                        if (flags & FAULT_FLAG_WRITE && >>                            !pmd_write(orig_pmd) && >>                            !pmd_trans_splitting(orig_pmd)) >>                                return do_huge_pmd_wp_page(mm, vma, address, >>                                                           pmd, orig_pmd); >> +#endif >>                        return 0; >>                } >>        } >> --- a/mm/mincore.c >> +++ b/mm/mincore.c >> @@ -155,10 +155,12 @@ static void mincore_pmd_range(struct vm_ >>        do { >>                next = pmd_addr_end(addr, end); >>                if (pmd_trans_huge(*pmd)) { >> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE >>                        if (mincore_huge_pmd(vma, pmd, addr, next, vec)) { >>                                vec += (next - addr) >> PAGE_SHIFT; >>                                continue; >>                        } >> +#endif >>                        /* fall through */ >>                } >>                if (pmd_none_or_clear_bad(pmd)) >> --- a/mm/percpu.c >> +++ b/mm/percpu.c >> @@ -1886,7 +1886,11 @@ void __init percpu_init_late(void) >>                int *map; >>                const size_t size = PERCPU_DYNAMIC_EARLY_SLOTS * sizeof(map[0]); >> >> +#ifdef CONFIG_CC_CLOSE_OPTIMIZATION >> +               BUG_ON(size > PAGE_SIZE); >> +#else >>                BUILD_BUG_ON(size > PAGE_SIZE); >> +#endif >> >>                map = pcpu_mem_alloc(size); >>                BUG_ON(!map); >> --- a/mm/rmap.c >> +++ b/mm/rmap.c >> @@ -515,6 +515,7 @@ int page_referenced_one(struct page *pag >>                referenced++; >> >>        if (unlikely(PageTransHuge(page))) { >> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE >>                pmd_t *pmd; >> >>                spin_lock(&mm->page_table_lock); >> @@ -524,6 +525,7 @@ int page_referenced_one(struct page *pag >>                    pmdp_clear_flush_young_notify(vma, address, pmd)) >>                        referenced++; >>                spin_unlock(&mm->page_table_lock); >> +#endif >>        } else { >>                pte_t *pte; >>                spinlock_t *ptl; >> --- a/net/mac80211/cfg.c >> +++ b/net/mac80211/cfg.c >> @@ -699,6 +699,7 @@ static void sta_apply_parameters(struct >>                                                  params->ht_capa, >>                                                  &sta->sta.ht_cap); >> >> +#ifdef CONFIG_MAC80211_MESH >>        if (ieee80211_vif_is_mesh(&sdata->vif) && params->plink_action) { >>                switch (params->plink_action) { >>                case PLINK_ACTION_OPEN: >> @@ -709,6 +710,7 @@ static void sta_apply_parameters(struct >>                        break; >>                } >>        } >> +#endif >>  } >> >>  static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev, >> --- a/net/mac80211/iface.c >> +++ b/net/mac80211/iface.c >> @@ -620,8 +620,10 @@ static void ieee80211_teardown_sdata(str >>                __skb_queue_purge(&sdata->fragments[i].skb_list); >>        sdata->fragment_next = 0; >> >> +#ifdef CONFIG_MAC80211_MESH >>        if (ieee80211_vif_is_mesh(&sdata->vif)) >>                mesh_rmc_free(sdata); >> +#endif >> >>        flushed = sta_info_flush(local, sdata); >>        WARN_ON(flushed); >> @@ -797,7 +799,9 @@ static void ieee80211_iface_work(struct >>                case NL80211_IFTYPE_MESH_POINT: >>                        if (!ieee80211_vif_is_mesh(&sdata->vif)) >>                                break; >> +#ifdef CONFIG_MAC80211_MESH >>                        ieee80211_mesh_rx_queued_mgmt(sdata, skb); >> +#endif >>                        break; >>                default: >>                        WARN(1, "frame for unexpected interface type"); >> @@ -818,7 +822,9 @@ static void ieee80211_iface_work(struct >>        case NL80211_IFTYPE_MESH_POINT: >>                if (!ieee80211_vif_is_mesh(&sdata->vif)) >>                        break; >> +#ifdef CONFIG_MAC80211_MESH >>                ieee80211_mesh_work(sdata); >> +#endif >>                break; >>        default: >>                break; >> @@ -872,8 +878,10 @@ static void ieee80211_setup_sdata(struct >>                ieee80211_ibss_setup_sdata(sdata); >>                break; >>        case NL80211_IFTYPE_MESH_POINT: >> +#ifdef CONFIG_MAC80211_MESH >>                if (ieee80211_vif_is_mesh(&sdata->vif)) >>                        ieee80211_mesh_init_sdata(sdata); >> +#endif >>                break; >>        case NL80211_IFTYPE_MONITOR: >>                sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP; >> --- a/net/mac80211/mesh.h >> +++ b/net/mac80211/mesh.h >> @@ -189,8 +189,10 @@ int ieee80211_fill_mesh_addresses(struct >>  int ieee80211_new_mesh_header(struct ieee80211s_hdr *meshhdr, >>                struct ieee80211_sub_if_data *sdata, char *addr4or5, >>                char *addr6); >> +#ifdef CONFIG_MAC80211_MESH >>  int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, >>                struct ieee80211_sub_if_data *sdata); >> +#endif >>  bool mesh_matches_local(struct ieee802_11_elems *ie, >>                struct ieee80211_sub_if_data *sdata); >>  void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); >> --- a/net/mac80211/rx.c >> +++ b/net/mac80211/rx.c >> @@ -453,6 +453,14 @@ static int ieee80211_get_mmie_keyidx(str >>  } >> >> >> +#ifndef CONFIG_MAC80211_MESH >> +static int mesh_rmc_check(u8 *sa, struct ieee80211s_hdr *mesh_hdr, >> +                  struct ieee80211_sub_if_data *sdata) >> +{ >> +       return 0; >> +} >> +#endif >> + >>  static ieee80211_rx_result >>  ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) >>  { >> --- a/net/mac80211/sta_info.c >> +++ b/net/mac80211/sta_info.c >> @@ -470,8 +470,10 @@ int sta_info_insert_rcu(struct sta_info >>        rcu_read_lock(); >>        mutex_unlock(&local->sta_mtx); >> >> +#ifdef CONFIG_MAC80211_MESH >>        if (ieee80211_vif_is_mesh(&sdata->vif)) >>                mesh_accept_plinks_update(sdata); >> +#endif >> >>        return 0; >>  out_free: >> --- a/net/mac80211/status.c >> +++ b/net/mac80211/status.c >> @@ -247,8 +247,10 @@ void ieee80211_tx_status(struct ieee8021 >>                } >> >>                rate_control_tx_status(local, sband, sta, skb); >> +#ifdef CONFIG_MAC80211_MESH >>                if (ieee80211_vif_is_mesh(&sta->sdata->vif)) >>                        ieee80211s_update_metric(local, sta, skb); >> +#endif >> >>                if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) >>                        ieee80211_frame_acked(sta, skb); >> --- a/net/mac80211/tx.c >> +++ b/net/mac80211/tx.c >> @@ -1638,6 +1638,7 @@ static void ieee80211_xmit(struct ieee80 >>        hdr = (struct ieee80211_hdr *) skb->data; >>        info->control.vif = &sdata->vif; >> >> +#ifdef CONFIG_MAC80211_MESH >>        if (ieee80211_vif_is_mesh(&sdata->vif) && >>            ieee80211_is_data(hdr->frame_control) && >>                !is_multicast_ether_addr(hdr->addr1)) >> @@ -1646,6 +1647,7 @@ static void ieee80211_xmit(struct ieee80 >>                                rcu_read_unlock(); >>                                return; >>                        } >> +#endif >> >>        ieee80211_set_qos_hdr(local, skb); >>        ieee80211_tx(sdata, skb, false); >> @@ -2322,7 +2324,9 @@ struct sk_buff *ieee80211_beacon_get_tim >>                *pos++ = WLAN_EID_SSID; >>                *pos++ = 0x0; >> >> +#ifdef CONFIG_MAC80211_MESH >>                mesh_mgmt_ies_add(skb, sdata); >> +#endif >>        } else { >>                WARN_ON(1); >>                goto out; >> --- a/net/netfilter/nf_conntrack_pptp.c >> +++ b/net/netfilter/nf_conntrack_pptp.c >> @@ -67,7 +67,8 @@ void >>                             struct nf_conntrack_expect *exp) __read_mostly; >>  EXPORT_SYMBOL_GPL(nf_nat_pptp_hook_expectfn); >> >> -#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) >> +#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) \ >> +    || defined(CONFIG_CC_CLOSE_OPTIMIZATION) >>  /* PptpControlMessageType names */ >>  const char *const pptp_msg_name[] = { >>        "UNKNOWN_MESSAGE", >