1. 05 3月, 2014 4 次提交
    • J
      iommu/vt-d: Factor out dmar_alloc_dev_scope() for later reuse · bb3a6b78
      Jiang Liu 提交于
      Factor out function dmar_alloc_dev_scope() from dmar_parse_dev_scope()
      for later reuse.
      Signed-off-by: NJiang Liu <jiang.liu@linux.intel.com>
      Signed-off-by: NJoerg Roedel <joro@8bytes.org>
      bb3a6b78
    • J
      iommu/vt-d: Avoid caching stale domain_device_info when hot-removing PCI device · 7e7dfab7
      Jiang Liu 提交于
      Function device_notifier() in intel-iommu.c only remove domain_device_info
      data structure associated with a PCI device when handling PCI device
      driver unbinding events. If a PCI device has never been bound to a PCI
      device driver, there won't be BUS_NOTIFY_UNBOUND_DRIVER event when
      hot-removing the PCI device. So associated domain_device_info data
      structure may get lost.
      
      On the other hand, if iommu_pass_through is enabled, function
      iommu_prepare_static_indentify_mapping() will create domain_device_info
      data structure for each PCIe to PCIe bridge and PCIe endpoint,
      no matter whether there are drivers associated with those PCIe devices
      or not. So those domain_device_info data structures will get lost when
      hot-removing the assocated PCIe devices if they have never bound to
      any PCI device driver.
      
      To be even worse, it's not only an memory leak issue, but also an
      caching of stale information bug because the memory are kept in
      device_domain_list and domain->devices lists.
      
      Fix the bug by trying to remove domain_device_info data structure when
      handling BUS_NOTIFY_DEL_DEVICE event.
      Signed-off-by: NJiang Liu <jiang.liu@linux.intel.com>
      Signed-off-by: NJoerg Roedel <joro@8bytes.org>
      7e7dfab7
    • J
      iommu/vt-d: Avoid caching stale domain_device_info and fix memory leak · 816997d0
      Jiang Liu 提交于
      Function device_notifier() in intel-iommu.c fails to remove
      device_domain_info data structures for PCI devices if they are
      associated with si_domain because iommu_no_mapping() returns true
      for those PCI devices. This will cause memory leak and caching of
      stale information in domain->devices list.
      
      So fix the issue by not calling iommu_no_mapping() and skipping check
      of iommu_pass_through.
      Signed-off-by: NJiang Liu <jiang.liu@linux.intel.com>
      Signed-off-by: NJoerg Roedel <joro@8bytes.org>
      816997d0
    • J
      iommu/vt-d: Avoid double free of g_iommus on error recovery path · 989d51fc
      Jiang Liu 提交于
      Array 'g_iommus' may be freed twice on error recovery path in function
      init_dmars() and free_dmar_iommu(), thus cause random system crash as
      below.
      
      [    6.774301] IOMMU: dmar init failed
      [    6.778310] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
      [    6.785615] software IO TLB [mem 0x76bcf000-0x7abcf000] (64MB) mapped at [ffff880076bcf000-ffff88007abcefff]
      [    6.796887] general protection fault: 0000 [#1] SMP DEBUG_PAGEALLOC
      [    6.804173] Modules linked in:
      [    6.807731] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.14.0-rc1+ #108
      [    6.815122] Hardware name: Intel Corporation BRICKLAND/BRICKLAND, BIOS BRIVTIN1.86B.0047.R00.1402050741 02/05/2014
      [    6.836000] task: ffff880455a80000 ti: ffff880455a88000 task.ti: ffff880455a88000
      [    6.844487] RIP: 0010:[<ffffffff8143eea6>]  [<ffffffff8143eea6>] memcpy+0x6/0x110
      [    6.853039] RSP: 0000:ffff880455a89cc8  EFLAGS: 00010293
      [    6.859064] RAX: ffff006568636163 RBX: ffff00656863616a RCX: 0000000000000005
      [    6.867134] RDX: 0000000000000005 RSI: ffffffff81cdc439 RDI: ffff006568636163
      [    6.875205] RBP: ffff880455a89d30 R08: 000000000001bc3b R09: 0000000000000000
      [    6.883275] R10: 0000000000000000 R11: ffffffff81cdc43e R12: ffff880455a89da8
      [    6.891338] R13: ffff006568636163 R14: 0000000000000005 R15: ffffffff81cdc439
      [    6.899408] FS:  0000000000000000(0000) GS:ffff88045b800000(0000) knlGS:0000000000000000
      [    6.908575] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [    6.915088] CR2: ffff88047e1ff000 CR3: 0000000001e0e000 CR4: 00000000001407f0
      [    6.923160] Stack:
      [    6.925487]  ffffffff8143c904 ffff88045b407e00 ffff006568636163 ffff006568636163
      [    6.934113]  ffffffff8120a1a9 ffffffff81cdc43e 0000000000000007 0000000000000000
      [    6.942747]  ffff880455a89da8 ffff006568636163 0000000000000007 ffffffff81cdc439
      [    6.951382] Call Trace:
      [    6.954197]  [<ffffffff8143c904>] ? vsnprintf+0x124/0x6f0
      [    6.960323]  [<ffffffff8120a1a9>] ? __kmalloc_track_caller+0x169/0x360
      [    6.967716]  [<ffffffff81440e1b>] kvasprintf+0x6b/0x80
      [    6.973552]  [<ffffffff81432bf1>] kobject_set_name_vargs+0x21/0x70
      [    6.980552]  [<ffffffff8143393d>] kobject_init_and_add+0x4d/0x90
      [    6.987364]  [<ffffffff812067c9>] ? __kmalloc+0x169/0x370
      [    6.993492]  [<ffffffff8102dbbc>] ? cache_add_dev+0x17c/0x4f0
      [    7.000005]  [<ffffffff8102ddfa>] cache_add_dev+0x3ba/0x4f0
      [    7.006327]  [<ffffffff821a87ca>] ? i8237A_init_ops+0x14/0x14
      [    7.012842]  [<ffffffff821a87f8>] cache_sysfs_init+0x2e/0x61
      [    7.019260]  [<ffffffff81002162>] do_one_initcall+0xf2/0x220
      [    7.025679]  [<ffffffff810a4a29>] ? parse_args+0x2c9/0x450
      [    7.031903]  [<ffffffff8219d1b1>] kernel_init_freeable+0x1c9/0x25b
      [    7.038904]  [<ffffffff8219c8d2>] ? do_early_param+0x8a/0x8a
      [    7.045322]  [<ffffffff8184d5e0>] ? rest_init+0x150/0x150
      [    7.051447]  [<ffffffff8184d5ee>] kernel_init+0xe/0x100
      [    7.057380]  [<ffffffff8187b87c>] ret_from_fork+0x7c/0xb0
      [    7.063503]  [<ffffffff8184d5e0>] ? rest_init+0x150/0x150
      [    7.069628] Code: 89 e5 53 48 89 fb 75 16 80 7f 3c 00 75 05 e8 d2 f9 ff ff 48 8b 43 58 48 2b 43 50 88 43 4e 5b 5d c3 90 90 90 90 48 89 f8 48 89 d1 <f3> a4 c3 03 83 e2 07 f3 48 a5 89 d1 f3 a4 c3 20 4c 8b 06 4c 8b
      [    7.094960] RIP  [<ffffffff8143eea6>] memcpy+0x6/0x110
      [    7.100856]  RSP <ffff880455a89cc8>
      [    7.104864] ---[ end trace b5d3fdc6c6c28083 ]---
      [    7.110142] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
      [    7.110142]
      [    7.120540] Kernel Offset: 0x0 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffff9fffffff)
      Signed-off-by: NJiang Liu <jiang.liu@linux.intel.com>
      Signed-off-by: NJoerg Roedel <joro@8bytes.org>
      989d51fc
  2. 02 3月, 2014 3 次提交
  3. 28 2月, 2014 9 次提交
  4. 27 2月, 2014 3 次提交
  5. 26 2月, 2014 8 次提交
  6. 25 2月, 2014 7 次提交
  7. 24 2月, 2014 6 次提交
    • S
      Target/sbc: Don't use sg as iterator in sbc_verify_read · fc272ec7
      Sagi Grimberg 提交于
      Because then this sg is passed to sbc_copy_prot which will
      hit a protection fault in cases we have more than a single sg.
      Signed-off-by: NSagi Grimberg <sagig@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      fc272ec7
    • N
      target: Add DIF sense codes in transport_generic_request_failure · 94387aa7
      Nicholas Bellinger 提交于
      This patch adds the three missing DIF related sense codes within
      transport_generic_request_failure(), which are required to ensure
      that the correct ASC/ASQC is generated by the subsequent call to
      transport_send_check_condition_and_sense().
      
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      94387aa7
    • N
      target/sbc: Fix sbc_dif_copy_prot addr offset bug · 10762e80
      Nicholas Bellinger 提交于
      This patch fixes a bug in sbc_dif_copy_prot() where the updated addr
      offset did not take into account the case where the associated
      scatterlist had not been incremented.
      
      This addresses the case where incoming protection scatterlists may
      contain a length smaller than PAGE_SIZE across multiple entires,
      when the target protection scatterlists are always being explicitly
      filled up to PAGE_SIZE before adding another entry.
      
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: Sagi Grimberg <sagig@mellanox.com>
      Cc: Or Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      10762e80
    • P
      mtd: nand: omap: fix ecclayout->oobfree->length · bb38eefb
      Pekon Gupta 提交于
      This patch excludes reserved-marker byte-position from oobfree->length
      calculation. Thus all bytes from oobfree->offset till end of OOB are free.
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      bb38eefb
    • P
      mtd: nand: omap: fix ecclayout->oobfree->offset · aa6092f9
      Pekon Gupta 提交于
      1) In current implementation, ecclayout->oobfree->offset is calculated with
       respect to ecclayout->eccpos[0] which is incorrect because ECC bytes may not
       be stored contiguously in OOB.
       So, this patch calculates ecclayout->oobfree->offset with respect to last
       ECC byte-position 'eccpos[ecclayout->eccbytes-1]'.
      
      2) ECC layout of some ecc-schemes expects reserved-markers at specific eccpos[]
       which should not be over-written by any file-system metadata.
       So this patch aligns oobfree->offset taking into account of such markers.
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Tested-by: NEnric Balletbo i Serra <eballetbo@gmail.com>
      Tested-by: NStefan Roese <sr@denx.de>
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      aa6092f9
    • P
      mtd: nand: omap: fix ecclayout to be in sync with u-boot NAND driver · eae39cb4
      Pekon Gupta 提交于
      Fixes: commit a919e511
             mtd: nand: omap2: clean-up BCHx_HW and BCHx_SW ECC configurations in device_probe
      
      Fixes ecclayout mismatch introduced in above commit for following ecc-schemes:
       - OMAP_ECC_BCH4_CODE_HW_DETECTION_SW
       - OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
       However, this patch also touches other ecc-schemes as the fix required
       refactoring common code, into ecc-scheme specific code.
      
      This patch aligns ecc-layout for below ecc-schemes as per reference [1],[2],[3]
      
       +---+------------+-------------++-------------+-------------+
       |OOB|BCH8_CODE_HW|BCH8_CODE_HW_||HAM1_CODE_HW |HAM1_CODE_HW |
       |pos|            | DETECTION_SW||(x8 device)  |(x16 device) |
       +---+------------+-------------++-------------+-------------+
       | 0 |BADBLK_MARK | BADBLK_MARK || BADBLK_MARK | BADBLK_MARK |
       | 1 |BADBLK_MARK | BADBLK_MARK || eccpos[0]   | BADBLK_MARK |
       | 2 | eccpos[0]  | eccpos[0]   || eccpos[1]   | eccpos[0]   |
       | 3 | eccpos[1]  | eccpos[1]   || eccpos[2]   | eccpos[1]   |
       | 4 | eccpos[2]  | eccpos[2]   || eccpos[3]   | eccpos[2]   |
       | 5 | eccpos[3]  | eccpos[3]   || eccpos[4]   | eccpos[3]   |
       | 6 | eccpos[4]  | eccpos[4]   || eccpos[5]   | eccpos[4]   |
       | 7 | eccpos[5]  | eccpos[5]   || eccpos[6]   | eccpos[5]   |
       | 8 | eccpos[6]  | eccpos[6]   || eccpos[7]   | eccpos[6]   |
       | 9 | eccpos[7]  | eccpos[7]   || eccpos[8]   | eccpos[7]   |
       |10 | eccpos[8]  | eccpos[8]   || eccpos[9]   | eccpos[8]   |
       |11 | eccpos[9]  | eccpos[9]   || eccpos[10]  | eccpos[9]   |
       |12 | eccpos[10] | eccpos[10]  || eccpos[11]  | eccpos[10]  |
       |13 | eccpos[11] | eccpos[11]  || oobfree[0]  | eccpos[11]  |
       |14 | eccpos[12] | eccpos[12]  || oobfree[1]  | oobfree[0]  |
       |15 | eccpos[13] | <reserved>  || oobfree[2]  | oobfree[1]  |
       +---+------------+-------------++-------------+-------------+
       |16 | eccpos[14] | eccpos[13]  || oobfree[3]  | oobfree[2]  |
       |...| [...]      | [...]       || [...]       | [...]       |
       |56 | eccpos[54] | eccpos[51]  || oobfree[43] | oobfree[42] |
       |57 | eccpos[55] | <reserved>  || oobfree[44] | oobfree[43] |
       +===+============+=============+==============+=============+
       |58 | oobfree[0] | oobfree[0]  || oobfree[45] | oobfree[44] |
       |59 | oobfree[1] | oobfree[1]  || oobfree[46] | oobfree[45] |
       |60 | oobfree[2] | oobfree[2]  || oobfree[47] | oobfree[46] |
       |61 | oobfree[3] | oobfree[3]  || oobfree[48] | oobfree[47] |
       |62 | oobfree[4] | oobfree[4]  || oobfree[49] | oobfree[48] |
       |63 | oobfree[5] | oobfree[5]  || oobfree[50] | oobfree[49] |
       +---+------------+-------------+--------------+-------------+
      
      [1] ecc-layout expected by ROM code, as specified in SoC TRM under:
            Chapter="Initialization"
              Section="Device Initialization by ROM code"
                  Sub-Section="Memory Booting"
                      Heading="NAND"
                      Figure="ECC Locations in NAND Spare Areas"
      
      [2] ecc-layout updates in u-boot
          http://lists.denx.de/pipermail/u-boot/2013-November/167551.html
      
      [3] u-boot configurations to match above ecc-layout are documented at
          https://processors.wiki.ti.com/index.php/Linux_Core_NAND_User%27s_Guide
      
      CC: <stable@vger.kernel.org> # 3.13.x+
      Reported-by: NEnric Balletbo Serra <eballetbo@iseebcn.com>
      Tested-by: NEnric Balletbo i Serra <eballetbo@gmail.com>
      Tested-by: NStefan Roese <sr@denx.de>
      Signed-off-by: NPekon Gupta <pekon@ti.com>
      Signed-off-by: NBrian Norris <computersforpeace@gmail.com>
      eae39cb4