LineageOS 16.0 (v4.4.153) kernel with Halium 9 patches
Find a file
Govind Singh 63900f4bf1 Merge remote-tracking branch 'remotes/origin/tmp-896bb812' into HEAD
Current ATH10k driver snapshot is very old, up merge ATH10k project
to enable WCN3990 chipset in msm4.4 tree.

* remotes/origin/tmp-896bb812:
  ath10k: cache calibration data when the core is stopped
  ath10k: Ignore SWBA event for a vif if its marked for no beacon
  ath10k: fix error return code in ahb
  ath10k: support up to 64 vdevs
  ath10k: document cycle count related counters
  ath10k: fix typo in logging message
  ath10k: fix rfc1042 header retrieval in QCA4019 with eth decap mode
  ath10k: do not check if reset is NULL
  ath10k: use devm_reset_control_get() instead of reset_control_get()
  ath10k: use devm_clk_get() instead of clk_get()
  ath10k: spelling and miscellaneous neatening
  ath10k: remove 4-addr padding related hw_param configuration
  ath10k: properly remove padding from the start of rx payload
  ath10k: add provision for Rx descriptor abstraction
  ath10k: move ath10k_hw_params definition to hw.h
  ath10k: improve logging message
  ath10k: enable peer stats by default
  ath10k: remove unused variable ar_pci
  ath10k: fix memory leak on caldata on error exit path
  ath10k: fix reporting channel survey data
  ath10k: remove unnecessary error code assignment
  ath10k: fix throughput regression in multi client mode
  ath10k: implement NAPI support
  ath10k: fix spelling mistake "montior" -> "monitor"
  ath10k: Fix broken NULL func data frame status for 10.4
  ath10k: replace config_enabled() with IS_REACHABLE()
  ath10k: Added support for extended dbglog module id for 10.4
  ath10k: use complete() instead complete_all()
  ath10k: fix sending frame in management path in push txq logic
  ath10k: improve wake_tx_queue ops performance
  ath10k: suppress warnings when getting wmi WDS peer event id
  ath10k: fix group privacy action frame decryption for qca4019
  ath10k: hide kernel addresses from logs using %pK format specifier
  ath10k: Add WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT wmi service
  ath10k: fix spurious tx/rx during boot
  ath10k: add wmi command barrier utility
  ath10k: implement wmi echo event
  ath10k: implement wmi echo command
  ath10k: add testmode support for 10.4 firmware
  ath10k: handle testmode events for 10.2 and 10.4 based firmware
  ath10k: move firmware_swap_code_seg_info to ath10k_fw_file
  ath10k: Remove driver log suggesting QCA9887 support is experimental
  ath10k: fix get rx_status from htt context
  tree-wide: replace config_enabled() with IS_ENABLED()
  ath10k: disable wake_tx_queue for older devices
  ath10k: fix possible wrong rx_busy time reporting in QCA4019
  ath10k: replace warning with an error message if HTT op version is unset
  ath10k: enable support for QCA9888
  ath10k: remove unused member in ath10k_hw_regs
  ath10k: Clean up peer when sta goes away.
  ath10k: Add WARN_ON if we over-write peer-map pointer.
  ath10k: remove extra space on ath10k_update_channel_list
  ath10k: simplify pktlog htt event processing
  ath10k: remove unused <linux/semaphore.h>
  ath10k: ensure peer_map references are cleaned up
  ath10k: ensure txrx-compl-task is stopped when cleaning htt-tx
  ath10k: remove debugfs support for Per STA total rx duration
  ath10k: add support for ath10k_sta_statistics support
  ath10k: fix 10.4 extended peer stats update
  mac80211: Add support for beacon report radio measurement
  ath10k: fix some typo in spectral code commments
  ath10k: disable TX_STBC for tx chainmask of 1
  ath10k: enable beacon loss detection support for 10.4
  ath10k: fix potential null dereference bugs
  ath10k: remove unneccessary WARN_ON_ONCE in rx during ACS
  ath10k: fix crash during card removal
  ath10k: fix deadlock while processing rx_in_ord_ind
  ath10k: fix cycle counter wraparound handling for QCA4019
  ath10k: define an enum to enable cycle counter wraparound logic
  ath10k: fix CCK h/w rates for QCA99X0 and newer chipsets
  ath10k: remove duplicate and unused rx rate flags
  ath10k: fix some of the macro definitions of HTT_RX_IND message
  ath10k: fix crash related to printing features
  ath10k: add board data download from target
  ath10k: add QCA9887 chipset support
  ath10k: fix deadlock when peer cannot be created
  ath10k: enable ipq4019 device probe in ahb module
  ath10k: add pdev param support to enable/disable btcoex
  ath10k: add new ATH10K_FW_FEATURE_BTCOEX_PARAM
  ath10k: update module description
  ath10k: remove unused phy_mode_to_band
  ath10k: fix operating irq mode for ahb device
  ath10k: fix error while writing 'simulate_fw_crash' debugfs
  ath10k: fix diag_read to collect data for larger memory
  ath10k: fix legacy rate packet debug messages
  ath10k: reduce warning messages during rx without proper channel context
  ath10k: improve tx scheduling
  ath10k: enable support for QCA9984
  ath10k: define rx_ppdu_end for QCA9984
  ath10k: clean up growing hw checks during safe and full reset
  ath10k: move rx_location_info out of struct rx_pkt_end
  ath10k: Fix survey reporting with QCA4019
  ath10k: suppress warnings when getting wmi peer_rate_code_list event
  ath10k: release pre_cal_file while unloading driver
  ath10k: update bss channel survey information
  ath10k: handle pdev_chan_info wmi event
  ath10k: implement wmi_pdev_bss_chan_info_request
  ath10k: add pdev bss channel info wmi definitions
  ath10k: move spectral related structures under ath10k debugfs
  ath10k: remove VHT capabilities from 2.4GHz
  ath10k: fix a typo in ath10k_start()
  ath10k: add max_tx_power for QCA6174 WLAN.RM.2.0 firmware
  ath10k: remove enum ath10k_swap_code_seg_bin_type
  ath10k: switch testmode to use ath10k_core_fetch_firmware_api_n()
  ath10k: move htt_op_version to struct ath10k_fw_file
  ath10k: move wmi_op_version to struct ath10k_fw_file
  ath10k: move fw_features to struct ath10k_fw_file
  ath10k: move fw_version inside struct ath10k_fw_file
  ath10k: refactor firmware images to struct ath10k_fw_components
  ath10k: remove deprecated firmware API 1 support
  ath10k: add dynamic tx mode switch config support for qca4019
  ath10k: add some sanity checks to peer_map_event() functions
  ath10k: fix return value for btcoex and peer stats debugfs
  ath10k: fix parenthesis alignment
  ath10k: prefer ether_addr_copy() over memcpy()
  ath10k: prefer ether_addr_equal() or ether_addr_equal_unaligned() over memcmp()
  ath10k: prefer kernel type 'u64' over 'u_int64_t'
  ath10k: fix checkpatch warnings related to spaces
  ath10k: remove MSI range support
  ath10k: enable set_tsf vdev command to WMI 10.4
  ath10k: update 10.4 WMI vdev parameters
  ath10k: add a support of set_tsf on vdev interface
  ath10k: Document alloc_frag_desc_for_data_pkt config option.
  cfg80211: remove enum ieee80211_band
  ath10k: fix unconditional num_mpdus_ready subtraction
  ath10k: remove unnecessary warning for probe response drops
  ath10k: fix calibration init sequence of qca99x0
  mac80211: allow not sending MIC up from driver for HW crypto
  ath10k: parse Rx MAC timestamp in mgmt frame for FW 10.4
  ath10k: combine txrx and replenish task
  ath10k: reuse copy engine 5 (htt rx) descriptors
  ath10k: cleanup copy engine receive next completion
  ath10k: register ath10k_htt_htc_t2h_msg_handler
  ath10k: speedup htt rx descriptor processing for rx_ind
  ath10k: cleanup amsdu processing for rx indication
  ath10k: remove unused fw_desc processing
  ath10k: copy tx fetch indication message
  ath10k: speedup htt rx descriptor processing for tx completion
  ath10k: enable parsing per station rx duration for 10.4
  ath10k: introduce Extended Resource Config support for 10.4
  ath10k: enable debugfs provision to enable Peer Stats feature
  ath10k: incorporate qca4019 cal data download sequence
  ath10k: move cal data len to hw_params
  ath10k: pass cal data location as an argument to ath10k_download_cal_{file|dt}
  ath10k: fix null deref if device crashes early
  ath10k: fix pull-push tx threshold handling
  ath10k: fix tx hang
  ath10k: advertise force AP scan feature
  ath10k: free cached fw bin contents when get board id fails
  ath10k: move mgmt descriptor limit handle under mgmt_tx
  ath10k: handle channel change htt event
  ath10k: set MAC timestamp in management Rx frame
  ath10k: deliver mgmt frames from htt to monitor vifs only
  ath10k: change htt tx desc/qcache peer limit config
  ath10k: fix HTT Tx CE ring size
  ath10k: implement push-pull tx
  ath10k: keep track of queue depth per txq
  ath10k: store txq in skb_cb
  ath10k: implement updating shared htt txq state
  ath10k: implement wake_tx_queue
  ath10k: add new htt message generation/parsing logic
  ath10k: add fast peer_map lookup
  ath10k: maintain peer_id for each sta and vif
  ath10k: refactor tx pending management
  ath10k: unify txpath decision
  ath10k: refactor tx code
  ath10k: fix sanity check on enabling btcoex via debugfs
  ath10k: reduce number of peers to support peer stats feature
  ath10k: process htt rx indication as batch mode
  ath10k: reduce rx_lock contention for htt rx indication
  ath10k: fix erroneous return value
  ath10k: add hw_rev to trace events to support pktlog
  ath10k: fix pktlog in QCA99X0
  ath10k: fix pointless update of peer stats list
  ath10k: fix updating peer stats rx duration
  ath10k: remove impossible code
  ath10k: populate qca4019 fw specific wmi init params
  ath10k: add qca4019 hw params
  ath10k: add abstraction layer for vdev subtype
  ath10k: use vif->type and vif->p2p for P2P_GO check
  ath10k: update 10.4 WMI service map
  ath10k: rename Mesh related service names
  ath10k: expose hif ops for ahb
  ath10k: add resource init and deinit in ahb
  ath10k: include irq related functions in ahb
  ath10k: add chip and bus halt logic in ahb
  ath10k: add reset ctrl related functions in ahb
  ath10k: add clock ctrl related functions in ahb
  ath10k: add helper functions in ahb.c for reg rd/wr
  ath10k: include qca4019 register map table
  ath10k: add basic skeleton to support ahb
  ath10k: pull reusable code from pci probe and remove for ahb
  ath10k: make ath10k_pci_read32/write32() ops more generic
  ath10k: make some of ath10k_pci_* func reusable
  ath10k: implement basic support for new tx path firmware
  ath10k: clean up cont frag desc init code
  ath10k: add new FW_FEATURE_PEER_FLOW_CONTROL
  ath10k: add new htt definitions
  ath10k: rename some HTT events
  ath10k: remove the p2p notice of absence info from 10.2.4 FW beacon info
  ath10k: add debugfs support for Per STA total rx duration
  ath10k: enable periodic peer stats update
  ath10k: provision to support periodic peer stats update
  ath10k: rename few function names of firmware stats
  ath10k: cleanup setting pdev paramaters
  ath10k: fix naming Peer stats rssi_changed field in 10.2.4
  ath10k: add support for parsing per STA rx_duration for 10.2.4
  ath10k: prevent txrx running for too long
  mac80211: pass block ack session timeout to to driver
  ath10k: set SM power save disabled to default value
  ath10k: reduce indentation by moving powersave check within function
  ath10k: wake up device before accessing registers
  ath10k: allow Mesh Point to install peer security key
  ath10k: do not use coherent memory for allocated device memory chunks
  ath10k: remove unnecessary amsdu/ampdu assignment in debugfs
  ath10k: implement fw_checksums debugfs file
  ath10k: print crc32 checksums for firmware and board files
  ath10k: split driver info messages during device initialisation
  ath10k: always show bmi chip ids and subdevice ids
  ath10k: reorganise hardware and firmware info messages
  ath10k: fix otp board id error message
  ath10k: apply Mesh subtype when Mesh interface created.
  ath10k: introduce new subtypes for proxy STA and Mesh
  ath10k: update WMI 10.x service map
  ath10k: Fix write permission on few debugfs files
  ath10k: stop abusing GFP_DMA
  ath10k: Enable AP + STA interface combination support for 10.x
  ath10k: fix board data fetch error message
  ath10k: Fix build with CONFIG_THERMAL=m
  ath10k: store msdu_id instead of txbuf pointers
  ath10k: replace vdev_id and tid in skb cb
  ath10k: fix tx header parsing
  ath10k: pack up flags in skb_cb
  ath10k: remove freq from skb_cb
  ath10k: remove is_offchan
  ath10k: remove txmode from skb_cb
  ath10k: rename function to adhere to naming convention
  ath10k: merge is_protected with nohwcrypt
  ath10k: adjust the RX packet pad offset at QCA99X0 4addr mode
  ath10k: fix the wrong RX rate idx report at 11G mode
  ath10k: fix peerid configuration in htt tx desc for htt version < 3.4
  ath10k: rename the helper which is used for off-channel tx
  ath10k: fix peer assoc complete WMI command for 10.4
  ath10k: add support for pktlog in QCA99X0
  ath10k: debugfs file to enable Bluetooth coexistence feature
  ath10k: add new pdev params defines to 10.4
  ath10k: add new WMI cmd/event defines for 10.4
  ath10k: add new service defines for 10.4
  ath10k: add thermal throttling support for 10.4 firmware
  ath10k: set peer MFP flag in peer assoc command
  ath10k: add abstraction layer for peer flags
  ath10k: consolidate if statements in ath10k_wmi_event_mgmt_rx

Change-Id: I22c4c7c5791079b17545ef7457c54bb60fcfca80
Signed-off-by: Govind Singh <govinds@codeaurora.org>
2017-01-09 17:31:41 +05:30
android/configs
arch Merge "ARM: dts: msm: Add APC0/1 CPR instances for sdm660" 2017-01-05 02:09:06 -08:00
block
certs
crypto
Documentation Merge "msm: mdss: rename dsi phy version for msm8996 and sdm660" 2017-01-05 02:08:55 -08:00
drivers ath10k: cache calibration data when the core is stopped 2017-01-06 15:59:10 +05:30
firmware
fs
include Merge "ARM: dts: msm: Add initial device tree for SDA630" 2017-01-04 03:25:36 -08:00
init
ipc
kernel Merge "sched: Delete heavy task heuristics in prediction code" 2017-01-05 02:09:05 -08:00
lib
mm
net Merge "nf: IDLETIMER: Use fullsock when querying uid" 2017-01-04 15:40:17 -08:00
samples
scripts scripts: build_all: build sdm defconfigs 2017-01-01 21:01:10 +05:30
security
sound ASoC: msm: Register common sound controls 2017-01-03 11:45:58 +05:30
tools
usr
virt
.get_maintainer.ignore
.gitignore
.mailmap
AndroidKernel.mk
backported-features
COPYING
CREDITS
Kbuild
Kconfig
MAINTAINERS
Makefile
README
REPORTING-BUGS

        Linux kernel release 4.x <http://kernel.org/>

These are the release notes for Linux version 4.  Read them carefully,
as they tell you what this is all about, explain how to install the
kernel, and what to do if something goes wrong. 

WHAT IS LINUX?

  Linux is a clone of the operating system Unix, written from scratch by
  Linus Torvalds with assistance from a loosely-knit team of hackers across
  the Net. It aims towards POSIX and Single UNIX Specification compliance.

  It has all the features you would expect in a modern fully-fledged Unix,
  including true multitasking, virtual memory, shared libraries, demand
  loading, shared copy-on-write executables, proper memory management,
  and multistack networking including IPv4 and IPv6.

  It is distributed under the GNU General Public License - see the
  accompanying COPYING file for more details. 

ON WHAT HARDWARE DOES IT RUN?

  Although originally developed first for 32-bit x86-based PCs (386 or higher),
  today Linux also runs on (at least) the Compaq Alpha AXP, Sun SPARC and
  UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, Cell,
  IBM S/390, MIPS, HP PA-RISC, Intel IA-64, DEC VAX, AMD x86-64, AXIS CRIS,
  Xtensa, Tilera TILE, AVR32, ARC and Renesas M32R architectures.

  Linux is easily portable to most general-purpose 32- or 64-bit architectures
  as long as they have a paged memory management unit (PMMU) and a port of the
  GNU C compiler (gcc) (part of The GNU Compiler Collection, GCC). Linux has
  also been ported to a number of architectures without a PMMU, although
  functionality is then obviously somewhat limited.
  Linux has also been ported to itself. You can now run the kernel as a
  userspace application - this is called UserMode Linux (UML).

DOCUMENTATION:

 - There is a lot of documentation available both in electronic form on
   the Internet and in books, both Linux-specific and pertaining to
   general UNIX questions.  I'd recommend looking into the documentation
   subdirectories on any Linux FTP site for the LDP (Linux Documentation
   Project) books.  This README is not meant to be documentation on the
   system: there are much better sources available.

 - There are various README files in the Documentation/ subdirectory:
   these typically contain kernel-specific installation notes for some 
   drivers for example. See Documentation/00-INDEX for a list of what
   is contained in each file.  Please read the Changes file, as it
   contains information about the problems, which may result by upgrading
   your kernel.

 - The Documentation/DocBook/ subdirectory contains several guides for
   kernel developers and users.  These guides can be rendered in a
   number of formats:  PostScript (.ps), PDF, HTML, & man-pages, among others.
   After installation, "make psdocs", "make pdfdocs", "make htmldocs",
   or "make mandocs" will render the documentation in the requested format.

INSTALLING the kernel source:

 - If you install the full sources, put the kernel tarball in a
   directory where you have permissions (eg. your home directory) and
   unpack it:

     xz -cd linux-4.X.tar.xz | tar xvf -

   Replace "X" with the version number of the latest kernel.

   Do NOT use the /usr/src/linux area! This area has a (usually
   incomplete) set of kernel headers that are used by the library header
   files.  They should match the library, and not get messed up by
   whatever the kernel-du-jour happens to be.

 - You can also upgrade between 4.x releases by patching.  Patches are
   distributed in the xz format.  To install by patching, get all the
   newer patch files, enter the top level directory of the kernel source
   (linux-4.X) and execute:

     xz -cd ../patch-4.x.xz | patch -p1

   Replace "x" for all versions bigger than the version "X" of your current
   source tree, _in_order_, and you should be ok.  You may want to remove
   the backup files (some-file-name~ or some-file-name.orig), and make sure
   that there are no failed patches (some-file-name# or some-file-name.rej).
   If there are, either you or I have made a mistake.

   Unlike patches for the 4.x kernels, patches for the 4.x.y kernels
   (also known as the -stable kernels) are not incremental but instead apply
   directly to the base 4.x kernel.  For example, if your base kernel is 4.0
   and you want to apply the 4.0.3 patch, you must not first apply the 4.0.1
   and 4.0.2 patches. Similarly, if you are running kernel version 4.0.2 and
   want to jump to 4.0.3, you must first reverse the 4.0.2 patch (that is,
   patch -R) _before_ applying the 4.0.3 patch. You can read more on this in
   Documentation/applying-patches.txt

   Alternatively, the script patch-kernel can be used to automate this
   process.  It determines the current kernel version and applies any
   patches found.

     linux/scripts/patch-kernel linux

   The first argument in the command above is the location of the
   kernel source.  Patches are applied from the current directory, but
   an alternative directory can be specified as the second argument.

 - Make sure you have no stale .o files and dependencies lying around:

     cd linux
     make mrproper

   You should now have the sources correctly installed.

SOFTWARE REQUIREMENTS

   Compiling and running the 4.x kernels requires up-to-date
   versions of various software packages.  Consult
   Documentation/Changes for the minimum version numbers required
   and how to get updates for these packages.  Beware that using
   excessively old versions of these packages can cause indirect
   errors that are very difficult to track down, so don't assume that
   you can just update packages when obvious problems arise during
   build or operation.

BUILD directory for the kernel:

   When compiling the kernel, all output files will per default be
   stored together with the kernel source code.
   Using the option "make O=output/dir" allow you to specify an alternate
   place for the output files (including .config).
   Example:

     kernel source code: /usr/src/linux-4.X
     build directory:    /home/name/build/kernel

   To configure and build the kernel, use:

     cd /usr/src/linux-4.X
     make O=/home/name/build/kernel menuconfig
     make O=/home/name/build/kernel
     sudo make O=/home/name/build/kernel modules_install install

   Please note: If the 'O=output/dir' option is used, then it must be
   used for all invocations of make.

CONFIGURING the kernel:

   Do not skip this step even if you are only upgrading one minor
   version.  New configuration options are added in each release, and
   odd problems will turn up if the configuration files are not set up
   as expected.  If you want to carry your existing configuration to a
   new version with minimal work, use "make oldconfig", which will
   only ask you for the answers to new questions.

 - Alternative configuration commands are:

     "make config"      Plain text interface.

     "make menuconfig"  Text based color menus, radiolists & dialogs.

     "make nconfig"     Enhanced text based color menus.

     "make xconfig"     X windows (Qt) based configuration tool.

     "make gconfig"     X windows (GTK+) based configuration tool.

     "make oldconfig"   Default all questions based on the contents of
                        your existing ./.config file and asking about
                        new config symbols.

     "make silentoldconfig"
                        Like above, but avoids cluttering the screen
                        with questions already answered.
                        Additionally updates the dependencies.

     "make olddefconfig"
                        Like above, but sets new symbols to their default
                        values without prompting.

     "make defconfig"   Create a ./.config file by using the default
                        symbol values from either arch/$ARCH/defconfig
                        or arch/$ARCH/configs/${PLATFORM}_defconfig,
                        depending on the architecture.

     "make ${PLATFORM}_defconfig"
                        Create a ./.config file by using the default
                        symbol values from
                        arch/$ARCH/configs/${PLATFORM}_defconfig.
                        Use "make help" to get a list of all available
                        platforms of your architecture.

     "make allyesconfig"
                        Create a ./.config file by setting symbol
                        values to 'y' as much as possible.

     "make allmodconfig"
                        Create a ./.config file by setting symbol
                        values to 'm' as much as possible.

     "make allnoconfig" Create a ./.config file by setting symbol
                        values to 'n' as much as possible.

     "make randconfig"  Create a ./.config file by setting symbol
                        values to random values.

     "make localmodconfig" Create a config based on current config and
                           loaded modules (lsmod). Disables any module
                           option that is not needed for the loaded modules.

                           To create a localmodconfig for another machine,
                           store the lsmod of that machine into a file
                           and pass it in as a LSMOD parameter.

                   target$ lsmod > /tmp/mylsmod
                   target$ scp /tmp/mylsmod host:/tmp

                   host$ make LSMOD=/tmp/mylsmod localmodconfig

                           The above also works when cross compiling.

     "make localyesconfig" Similar to localmodconfig, except it will convert
                           all module options to built in (=y) options.

   You can find more information on using the Linux kernel config tools
   in Documentation/kbuild/kconfig.txt.

 - NOTES on "make config":

    - Having unnecessary drivers will make the kernel bigger, and can
      under some circumstances lead to problems: probing for a
      nonexistent controller card may confuse your other controllers

    - Compiling the kernel with "Processor type" set higher than 386
      will result in a kernel that does NOT work on a 386.  The
      kernel will detect this on bootup, and give up.

    - A kernel with math-emulation compiled in will still use the
      coprocessor if one is present: the math emulation will just
      never get used in that case.  The kernel will be slightly larger,
      but will work on different machines regardless of whether they
      have a math coprocessor or not.

    - The "kernel hacking" configuration details usually result in a
      bigger or slower kernel (or both), and can even make the kernel
      less stable by configuring some routines to actively try to
      break bad code to find kernel problems (kmalloc()).  Thus you
      should probably answer 'n' to the questions for "development",
      "experimental", or "debugging" features.

COMPILING the kernel:

 - Make sure you have at least gcc 3.2 available.
   For more information, refer to Documentation/Changes.

   Please note that you can still run a.out user programs with this kernel.

 - Do a "make" to create a compressed kernel image. It is also
   possible to do "make install" if you have lilo installed to suit the
   kernel makefiles, but you may want to check your particular lilo setup first.

   To do the actual install, you have to be root, but none of the normal
   build should require that. Don't take the name of root in vain.

 - If you configured any of the parts of the kernel as `modules', you
   will also have to do "make modules_install".

 - Verbose kernel compile/build output:

   Normally, the kernel build system runs in a fairly quiet mode (but not
   totally silent).  However, sometimes you or other kernel developers need
   to see compile, link, or other commands exactly as they are executed.
   For this, use "verbose" build mode.  This is done by inserting
   "V=1" in the "make" command.  E.g.:

     make V=1 all

   To have the build system also tell the reason for the rebuild of each
   target, use "V=2".  The default is "V=0".

 - Keep a backup kernel handy in case something goes wrong.  This is 
   especially true for the development releases, since each new release
   contains new code which has not been debugged.  Make sure you keep a
   backup of the modules corresponding to that kernel, as well.  If you
   are installing a new kernel with the same version number as your
   working kernel, make a backup of your modules directory before you
   do a "make modules_install".

   Alternatively, before compiling, use the kernel config option
   "LOCALVERSION" to append a unique suffix to the regular kernel version.
   LOCALVERSION can be set in the "General Setup" menu.

 - In order to boot your new kernel, you'll need to copy the kernel
   image (e.g. .../linux/arch/i386/boot/bzImage after compilation)
   to the place where your regular bootable kernel is found. 

 - Booting a kernel directly from a floppy without the assistance of a
   bootloader such as LILO, is no longer supported.

   If you boot Linux from the hard drive, chances are you use LILO, which
   uses the kernel image as specified in the file /etc/lilo.conf.  The
   kernel image file is usually /vmlinuz, /boot/vmlinuz, /bzImage or
   /boot/bzImage.  To use the new kernel, save a copy of the old image
   and copy the new image over the old one.  Then, you MUST RERUN LILO
   to update the loading map!! If you don't, you won't be able to boot
   the new kernel image.

   Reinstalling LILO is usually a matter of running /sbin/lilo. 
   You may wish to edit /etc/lilo.conf to specify an entry for your
   old kernel image (say, /vmlinux.old) in case the new one does not
   work.  See the LILO docs for more information. 

   After reinstalling LILO, you should be all set.  Shutdown the system,
   reboot, and enjoy!

   If you ever need to change the default root device, video mode,
   ramdisk size, etc.  in the kernel image, use the 'rdev' program (or
   alternatively the LILO boot options when appropriate).  No need to
   recompile the kernel to change these parameters. 

 - Reboot with the new kernel and enjoy. 

IF SOMETHING GOES WRONG:

 - If you have problems that seem to be due to kernel bugs, please check
   the file MAINTAINERS to see if there is a particular person associated
   with the part of the kernel that you are having trouble with. If there
   isn't anyone listed there, then the second best thing is to mail
   them to me (torvalds@linux-foundation.org), and possibly to any other
   relevant mailing-list or to the newsgroup.

 - In all bug-reports, *please* tell what kernel you are talking about,
   how to duplicate the problem, and what your setup is (use your common
   sense).  If the problem is new, tell me so, and if the problem is
   old, please try to tell me when you first noticed it.

 - If the bug results in a message like

     unable to handle kernel paging request at address C0000010
     Oops: 0002
     EIP:   0010:XXXXXXXX
     eax: xxxxxxxx   ebx: xxxxxxxx   ecx: xxxxxxxx   edx: xxxxxxxx
     esi: xxxxxxxx   edi: xxxxxxxx   ebp: xxxxxxxx
     ds: xxxx  es: xxxx  fs: xxxx  gs: xxxx
     Pid: xx, process nr: xx
     xx xx xx xx xx xx xx xx xx xx

   or similar kernel debugging information on your screen or in your
   system log, please duplicate it *exactly*.  The dump may look
   incomprehensible to you, but it does contain information that may
   help debugging the problem.  The text above the dump is also
   important: it tells something about why the kernel dumped code (in
   the above example, it's due to a bad kernel pointer). More information
   on making sense of the dump is in Documentation/oops-tracing.txt

 - If you compiled the kernel with CONFIG_KALLSYMS you can send the dump
   as is, otherwise you will have to use the "ksymoops" program to make
   sense of the dump (but compiling with CONFIG_KALLSYMS is usually preferred).
   This utility can be downloaded from
   ftp://ftp.<country>.kernel.org/pub/linux/utils/kernel/ksymoops/ .
   Alternatively, you can do the dump lookup by hand:

 - In debugging dumps like the above, it helps enormously if you can
   look up what the EIP value means.  The hex value as such doesn't help
   me or anybody else very much: it will depend on your particular
   kernel setup.  What you should do is take the hex value from the EIP
   line (ignore the "0010:"), and look it up in the kernel namelist to
   see which kernel function contains the offending address.

   To find out the kernel function name, you'll need to find the system
   binary associated with the kernel that exhibited the symptom.  This is
   the file 'linux/vmlinux'.  To extract the namelist and match it against
   the EIP from the kernel crash, do:

     nm vmlinux | sort | less

   This will give you a list of kernel addresses sorted in ascending
   order, from which it is simple to find the function that contains the
   offending address.  Note that the address given by the kernel
   debugging messages will not necessarily match exactly with the
   function addresses (in fact, that is very unlikely), so you can't
   just 'grep' the list: the list will, however, give you the starting
   point of each kernel function, so by looking for the function that
   has a starting address lower than the one you are searching for but
   is followed by a function with a higher address you will find the one
   you want.  In fact, it may be a good idea to include a bit of
   "context" in your problem report, giving a few lines around the
   interesting one. 

   If you for some reason cannot do the above (you have a pre-compiled
   kernel image or similar), telling me as much about your setup as
   possible will help.  Please read the REPORTING-BUGS document for details.

 - Alternatively, you can use gdb on a running kernel. (read-only; i.e. you
   cannot change values or set break points.) To do this, first compile the
   kernel with -g; edit arch/i386/Makefile appropriately, then do a "make
   clean". You'll also need to enable CONFIG_PROC_FS (via "make config").

   After you've rebooted with the new kernel, do "gdb vmlinux /proc/kcore".
   You can now use all the usual gdb commands. The command to look up the
   point where your system crashed is "l *0xXXXXXXXX". (Replace the XXXes
   with the EIP value.)

   gdb'ing a non-running kernel currently fails because gdb (wrongly)
   disregards the starting offset for which the kernel is compiled.