···1010 subsystem (mmcss) inside the FlashSS (available in STiH407 SoC1111 family).12121313-- clock-names: Should be "mmc".1313+- clock-names: Should be "mmc" and "icn". (NB: The latter is not compulsory)1414 See: Documentation/devicetree/bindings/resource-names.txt1515- clocks: Phandle to the clock.1616 See: Documentation/devicetree/bindings/clock/clock-bindings.txt
+3-2
MAINTAINERS
···16251625ARM/SAMSUNG EXYNOS ARM ARCHITECTURES16261626M: Kukjin Kim <kgene@kernel.org>16271627M: Krzysztof Kozlowski <krzk@kernel.org>16281628+R: Javier Martinez Canillas <javier@osg.samsung.com>16281629L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)16291630L: linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)16301631S: Maintained···24862485BONDING DRIVER24872486M: Jay Vosburgh <j.vosburgh@gmail.com>24882487M: Veaceslav Falico <vfalico@gmail.com>24892489-M: Andy Gospodarek <gospo@cumulusnetworks.com>24882488+M: Andy Gospodarek <andy@greyhouse.net>24902489L: netdev@vger.kernel.org24912490W: http://sourceforge.net/projects/bonding/24922491S: Supported···32703269F: drivers/net/wan/cosa*3271327032723271CPMAC ETHERNET DRIVER32733273-M: Florian Fainelli <florian@openwrt.org>32723272+M: Florian Fainelli <f.fainelli@gmail.com>32743273L: netdev@vger.kernel.org32753274S: Maintained32763275F: drivers/net/ethernet/ti/cpmac.c
···158158{159159 int i;160160161161- kvm_free_stage2_pgd(kvm);162162-163161 for (i = 0; i < KVM_MAX_VCPUS; ++i) {164162 if (kvm->vcpus[i]) {165163 kvm_arch_vcpu_free(kvm->vcpus[i]);
+3-1
arch/arm/kvm/mmu.c
···17141714 kern_hyp_va(PAGE_OFFSET), kern_hyp_va(~0UL));1715171517161716 if (hyp_idmap_start >= kern_hyp_va(PAGE_OFFSET) &&17171717- hyp_idmap_start < kern_hyp_va(~0UL)) {17171717+ hyp_idmap_start < kern_hyp_va(~0UL) &&17181718+ hyp_idmap_start != (unsigned long)__hyp_idmap_text_start) {17181719 /*17191720 * The idmap page is intersecting with the VA space,17201721 * it is not safe to continue further.···1894189318951894void kvm_arch_flush_shadow_all(struct kvm *kvm)18961895{18961896+ kvm_free_stage2_pgd(kvm);18971897}1898189818991899void kvm_arch_flush_shadow_memslot(struct kvm *kvm,
+6
arch/arm/mach-exynos/suspend.c
···255255 return -ENOMEM;256256 }257257258258+ /*259259+ * Clear the OF_POPULATED flag set in of_irq_init so that260260+ * later the Exynos PMU platform device won't be skipped.261261+ */262262+ of_node_clear_flag(node, OF_POPULATED);263263+258264 return 0;259265}260266
+14
arch/arm/mach-pxa/lubbock.c
···137137 // no D+ pullup; lubbock can't connect/disconnect in software138138};139139140140+static void lubbock_init_pcmcia(void)141141+{142142+ struct clk *clk;143143+144144+ /* Add an alias for the SA1111 PCMCIA clock */145145+ clk = clk_get_sys("pxa2xx-pcmcia", NULL);146146+ if (!IS_ERR(clk)) {147147+ clkdev_create(clk, NULL, "1800");148148+ clk_put(clk);149149+ }150150+}151151+140152static struct resource sa1111_resources[] = {141153 [0] = {142154 .start = 0x10000000,···478466 pxa_set_ffuart_info(NULL);479467 pxa_set_btuart_info(NULL);480468 pxa_set_stuart_info(NULL);469469+470470+ lubbock_init_pcmcia();481471482472 clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL);483473 pxa_set_udc_info(&udc_info);
···171171static inline unsigned long __must_check172172copy_from_user(void *to, const void __user *from, unsigned long n)173173{174174- if (access_ok(VERIFY_READ, from, n))174174+ if (likely(access_ok(VERIFY_READ, from, n))) {175175 memcpy(to, (const void __force *)from, n);176176- else177177- return n;178178- return 0;176176+ return 0;177177+ }178178+ memset(to, 0, n);179179+ return n;179180}180181181182static inline unsigned long __must_check
+32-39
arch/cris/include/asm/uaccess.h
···194194extern unsigned long __copy_user_zeroing(void *to, const void __user *from, unsigned long n);195195extern unsigned long __do_clear_user(void __user *to, unsigned long n);196196197197-static inline unsigned long198198-__generic_copy_to_user(void __user *to, const void *from, unsigned long n)199199-{200200- if (access_ok(VERIFY_WRITE, to, n))201201- return __copy_user(to, from, n);202202- return n;203203-}204204-205205-static inline unsigned long206206-__generic_copy_from_user(void *to, const void __user *from, unsigned long n)207207-{208208- if (access_ok(VERIFY_READ, from, n))209209- return __copy_user_zeroing(to, from, n);210210- return n;211211-}212212-213213-static inline unsigned long214214-__generic_clear_user(void __user *to, unsigned long n)215215-{216216- if (access_ok(VERIFY_WRITE, to, n))217217- return __do_clear_user(to, n);218218- return n;219219-}220220-221197static inline long222198__strncpy_from_user(char *dst, const char __user *src, long count)223199{···258282 else if (n == 24)259283 __asm_copy_from_user_24(to, from, ret);260284 else261261- ret = __generic_copy_from_user(to, from, n);285285+ ret = __copy_user_zeroing(to, from, n);262286263287 return ret;264288}···309333 else if (n == 24)310334 __asm_copy_to_user_24(to, from, ret);311335 else312312- ret = __generic_copy_to_user(to, from, n);336336+ ret = __copy_user(to, from, n);313337314338 return ret;315339}···342366 else if (n == 24)343367 __asm_clear_24(to, ret);344368 else345345- ret = __generic_clear_user(to, n);369369+ ret = __do_clear_user(to, n);346370347371 return ret;348372}349373350374351351-#define clear_user(to, n) \352352- (__builtin_constant_p(n) ? \353353- __constant_clear_user(to, n) : \354354- __generic_clear_user(to, n))375375+static inline size_t clear_user(void __user *to, size_t n)376376+{377377+ if (unlikely(!access_ok(VERIFY_WRITE, to, n)))378378+ return n;379379+ if (__builtin_constant_p(n))380380+ return __constant_clear_user(to, n);381381+ else382382+ return __do_clear_user(to, n);383383+}355384356356-#define copy_from_user(to, from, n) \357357- (__builtin_constant_p(n) ? \358358- __constant_copy_from_user(to, from, n) : \359359- __generic_copy_from_user(to, from, n))385385+static inline size_t copy_from_user(void *to, const void __user *from, size_t n)386386+{387387+ if (unlikely(!access_ok(VERIFY_READ, from, n))) {388388+ memset(to, 0, n);389389+ return n;390390+ }391391+ if (__builtin_constant_p(n))392392+ return __constant_copy_from_user(to, from, n);393393+ else394394+ return __copy_user_zeroing(to, from, n);395395+}360396361361-#define copy_to_user(to, from, n) \362362- (__builtin_constant_p(n) ? \363363- __constant_copy_to_user(to, from, n) : \364364- __generic_copy_to_user(to, from, n))397397+static inline size_t copy_to_user(void __user *to, const void *from, size_t n)398398+{399399+ if (unlikely(!access_ok(VERIFY_WRITE, to, n)))400400+ return n;401401+ if (__builtin_constant_p(n))402402+ return __constant_copy_to_user(to, from, n);403403+ else404404+ return __copy_user(to, from, n);405405+}365406366407/* We let the __ versions of copy_from/to_user inline, because they're often367408 * used in fast paths and have only a small space overhead.
+9-3
arch/frv/include/asm/uaccess.h
···263263extern long __memset_user(void *dst, unsigned long count);264264extern long __memcpy_user(void *dst, const void *src, unsigned long count);265265266266-#define clear_user(dst,count) __memset_user(____force(dst), (count))266266+#define __clear_user(dst,count) __memset_user(____force(dst), (count))267267#define __copy_from_user_inatomic(to, from, n) __memcpy_user((to), ____force(from), (n))268268#define __copy_to_user_inatomic(to, from, n) __memcpy_user(____force(to), (from), (n))269269270270#else271271272272-#define clear_user(dst,count) (memset(____force(dst), 0, (count)), 0)272272+#define __clear_user(dst,count) (memset(____force(dst), 0, (count)), 0)273273#define __copy_from_user_inatomic(to, from, n) (memcpy((to), ____force(from), (n)), 0)274274#define __copy_to_user_inatomic(to, from, n) (memcpy(____force(to), (from), (n)), 0)275275276276#endif277277278278-#define __clear_user clear_user278278+static inline unsigned long __must_check279279+clear_user(void __user *to, unsigned long n)280280+{281281+ if (likely(__access_ok(to, n)))282282+ n = __clear_user(to, n);283283+ return n;284284+}279285280286static inline unsigned long __must_check281287__copy_to_user(void __user *to, const void *from, unsigned long n)
+2-1
arch/hexagon/include/asm/uaccess.h
···103103{104104 long res = __strnlen_user(src, n);105105106106- /* return from strnlen can't be zero -- that would be rubbish. */106106+ if (unlikely(!res))107107+ return -EFAULT;107108108109 if (res > n) {109110 copy_from_user(dst, src, n);
···99 * as published by the Free Software Foundation; either version1010 * 2 of the Licence, or (at your option) any later version.1111 */1212-#include <asm/uaccess.h>1212+#include <linux/uaccess.h>13131414unsigned long1515__generic_copy_to_user(void *to, const void *from, unsigned long n)···2424{2525 if (access_ok(VERIFY_READ, from, n))2626 __copy_user_zeroing(to, from, n);2727+ else2828+ memset(to, 0, n);2729 return n;2830}2931
+8-5
arch/nios2/include/asm/uaccess.h
···102102static inline long copy_from_user(void *to, const void __user *from,103103 unsigned long n)104104{105105- if (!access_ok(VERIFY_READ, from, n))106106- return n;107107- return __copy_from_user(to, from, n);105105+ unsigned long res = n;106106+ if (access_ok(VERIFY_READ, from, n))107107+ res = __copy_from_user(to, from, n);108108+ if (unlikely(res))109109+ memset(to + (n - res), 0, res);110110+ return res;108111}109112110113static inline long copy_to_user(void __user *to, const void *from,···142139143140#define __get_user_unknown(val, size, ptr, err) do { \144141 err = 0; \145145- if (copy_from_user(&(val), ptr, size)) { \142142+ if (__copy_from_user(&(val), ptr, size)) { \146143 err = -EFAULT; \147144 } \148145 } while (0)···169166 ({ \170167 long __gu_err = -EFAULT; \171168 const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \172172- unsigned long __gu_val; \169169+ unsigned long __gu_val = 0; \173170 __get_user_common(__gu_val, sizeof(*(ptr)), __gu_ptr, __gu_err);\174171 (x) = (__force __typeof__(x))__gu_val; \175172 __gu_err; \
+10-23
arch/openrisc/include/asm/uaccess.h
···273273static inline unsigned long274274copy_from_user(void *to, const void *from, unsigned long n)275275{276276- unsigned long over;276276+ unsigned long res = n;277277278278- if (access_ok(VERIFY_READ, from, n))279279- return __copy_tofrom_user(to, from, n);280280- if ((unsigned long)from < TASK_SIZE) {281281- over = (unsigned long)from + n - TASK_SIZE;282282- return __copy_tofrom_user(to, from, n - over) + over;283283- }284284- return n;278278+ if (likely(access_ok(VERIFY_READ, from, n)))279279+ res = __copy_tofrom_user(to, from, n);280280+ if (unlikely(res))281281+ memset(to + (n - res), 0, res);282282+ return res;285283}286284287285static inline unsigned long288286copy_to_user(void *to, const void *from, unsigned long n)289287{290290- unsigned long over;291291-292292- if (access_ok(VERIFY_WRITE, to, n))293293- return __copy_tofrom_user(to, from, n);294294- if ((unsigned long)to < TASK_SIZE) {295295- over = (unsigned long)to + n - TASK_SIZE;296296- return __copy_tofrom_user(to, from, n - over) + over;297297- }288288+ if (likely(access_ok(VERIFY_WRITE, to, n)))289289+ n = __copy_tofrom_user(to, from, n);298290 return n;299291}300292···295303static inline __must_check unsigned long296304clear_user(void *addr, unsigned long size)297305{298298-299299- if (access_ok(VERIFY_WRITE, addr, size))300300- return __clear_user(addr, size);301301- if ((unsigned long)addr < TASK_SIZE) {302302- unsigned long over = (unsigned long)addr + size - TASK_SIZE;303303- return __clear_user(addr, size - over) + over;304304- }306306+ if (likely(access_ok(VERIFY_WRITE, addr, size)))307307+ size = __clear_user(addr, size);305308 return size;306309}307310
+4-1
arch/parisc/include/asm/uaccess.h
···1010#include <asm-generic/uaccess-unaligned.h>11111212#include <linux/bug.h>1313+#include <linux/string.h>13141415#define VERIFY_READ 01516#define VERIFY_WRITE 1···222221 unsigned long n)223222{224223 int sz = __compiletime_object_size(to);225225- int ret = -EFAULT;224224+ unsigned long ret = n;226225227226 if (likely(sz == -1 || sz >= n))228227 ret = __copy_from_user(to, from, n);···231230 else232231 __bad_copy_user();233232233233+ if (unlikely(ret))234234+ memset(to + (n - ret), 0, ret);234235 return ret;235236}236237
···308308static inline unsigned long copy_from_user(void *to,309309 const void __user *from, unsigned long n)310310{311311- unsigned long over;312312-313313- if (access_ok(VERIFY_READ, from, n)) {311311+ if (likely(access_ok(VERIFY_READ, from, n))) {314312 check_object_size(to, n, false);315313 return __copy_tofrom_user((__force void __user *)to, from, n);316314 }317317- if ((unsigned long)from < TASK_SIZE) {318318- over = (unsigned long)from + n - TASK_SIZE;319319- check_object_size(to, n - over, false);320320- return __copy_tofrom_user((__force void __user *)to, from,321321- n - over) + over;322322- }315315+ memset(to, 0, n);323316 return n;324317}325318326319static inline unsigned long copy_to_user(void __user *to,327320 const void *from, unsigned long n)328321{329329- unsigned long over;330330-331322 if (access_ok(VERIFY_WRITE, to, n)) {332323 check_object_size(from, n, true);333324 return __copy_tofrom_user(to, (__force void __user *)from, n);334334- }335335- if ((unsigned long)to < TASK_SIZE) {336336- over = (unsigned long)to + n - TASK_SIZE;337337- check_object_size(from, n - over, true);338338- return __copy_tofrom_user(to, (__force void __user *)from,339339- n - over) + over;340325 }341326 return n;342327}···419434 might_fault();420435 if (likely(access_ok(VERIFY_WRITE, addr, size)))421436 return __clear_user(addr, size);422422- if ((unsigned long)addr < TASK_SIZE) {423423- unsigned long over = (unsigned long)addr + size - TASK_SIZE;424424- return __clear_user(addr, size - over) + over;425425- }426437 return size;427438}428439
+5-5
arch/powerpc/kernel/idle_book3s.S
···411411 *412412 * r13 - PACA413413 * cr3 - gt if waking up with partial/complete hypervisor state loss414414- * cr4 - eq if waking up from complete hypervisor state loss.414414+ * cr4 - gt or eq if waking up from complete hypervisor state loss.415415 */416416_GLOBAL(pnv_wakeup_tb_loss)417417 ld r1,PACAR1(r13)···453453 * At this stage454454 * cr2 - eq if first thread to wakeup in core455455 * cr3- gt if waking up with partial/complete hypervisor state loss456456- * cr4 - eq if waking up from complete hypervisor state loss.456456+ * cr4 - gt or eq if waking up from complete hypervisor state loss.457457 */458458459459 ori r15,r15,PNV_CORE_IDLE_LOCK_BIT···481481 * If waking up from sleep, subcore state is not lost. Hence482482 * skip subcore state restore483483 */484484- bne cr4,subcore_state_restored484484+ blt cr4,subcore_state_restored485485486486 /* Restore per-subcore state */487487 ld r4,_SDR1(r1)···526526 * If waking up from sleep, per core state is not lost, skip to527527 * clear_lock.528528 */529529- bne cr4,clear_lock529529+ blt cr4,clear_lock530530531531 /*532532 * First thread in the core to wake up and its waking up with···557557 * If waking up from sleep, hypervisor state is not lost. Hence558558 * skip hypervisor state restore.559559 */560560- bne cr4,hypervisor_state_restored560560+ blt cr4,hypervisor_state_restored561561562562 /* Waking up from winkle */563563
+23-3
arch/powerpc/platforms/powernv/pci-ioda.c
···2217221722182218 pnv_pci_link_table_and_group(phb->hose->node, num,22192219 tbl, &pe->table_group);22202220- pnv_pci_phb3_tce_invalidate_pe(pe);22202220+ pnv_pci_ioda2_tce_invalidate_pe(pe);2221222122222222 return 0;22232223}···23552355 if (ret)23562356 pe_warn(pe, "Unmapping failed, ret = %ld\n", ret);23572357 else23582358- pnv_pci_phb3_tce_invalidate_pe(pe);23582358+ pnv_pci_ioda2_tce_invalidate_pe(pe);2359235923602360 pnv_pci_unlink_table_and_group(table_group->tables[num], table_group);23612361···34263426 }34273427 }3428342834293429- pnv_ioda_free_pe(pe);34293429+ /*34303430+ * The PE for root bus can be removed because of hotplug in EEH34313431+ * recovery for fenced PHB error. We need to mark the PE dead so34323432+ * that it can be populated again in PCI hot add path. The PE34333433+ * shouldn't be destroyed as it's the global reserved resource.34343434+ */34353435+ if (phb->ioda.root_pe_populated &&34363436+ phb->ioda.root_pe_idx == pe->pe_number)34373437+ phb->ioda.root_pe_populated = false;34383438+ else34393439+ pnv_ioda_free_pe(pe);34303440}3431344134323442static void pnv_pci_release_device(struct pci_dev *pdev)···34523442 if (!pdn || pdn->pe_number == IODA_INVALID_PE)34533443 return;3454344434453445+ /*34463446+ * PCI hotplug can happen as part of EEH error recovery. The @pdn34473447+ * isn't removed and added afterwards in this scenario. We should34483448+ * set the PE number in @pdn to an invalid one. Otherwise, the PE's34493449+ * device count is decreased on removing devices while failing to34503450+ * be increased on adding devices. It leads to unbalanced PE's device34513451+ * count and eventually make normal PCI hotplug path broken.34523452+ */34553453 pe = &phb->ioda.pe_array[pdn->pe_number];34543454+ pdn->pe_number = IODA_INVALID_PE;34553455+34563456 WARN_ON(--pe->device_count < 0);34573457 if (pe->device_count == 0)34583458 pnv_ioda_release_pe(pe);
···22312231 return -EINVAL;22322232 current->thread.fpu.fpc = fpu->fpc;22332233 if (MACHINE_HAS_VX)22342234- convert_fp_to_vx(current->thread.fpu.vxrs, (freg_t *)fpu->fprs);22342234+ convert_fp_to_vx((__vector128 *) vcpu->run->s.regs.vrs,22352235+ (freg_t *) fpu->fprs);22352236 else22362236- memcpy(current->thread.fpu.fprs, &fpu->fprs, sizeof(fpu->fprs));22372237+ memcpy(vcpu->run->s.regs.fprs, &fpu->fprs, sizeof(fpu->fprs));22372238 return 0;22382239}22392240···22432242 /* make sure we have the latest values */22442243 save_fpu_regs();22452244 if (MACHINE_HAS_VX)22462246- convert_vx_to_fp((freg_t *)fpu->fprs, current->thread.fpu.vxrs);22452245+ convert_vx_to_fp((freg_t *) fpu->fprs,22462246+ (__vector128 *) vcpu->run->s.regs.vrs);22472247 else22482248- memcpy(fpu->fprs, current->thread.fpu.fprs, sizeof(fpu->fprs));22482248+ memcpy(fpu->fprs, vcpu->run->s.regs.fprs, sizeof(fpu->fprs));22492249 fpu->fpc = current->thread.fpu.fpc;22502250 return 0;22512251}
+1-1
arch/s390/kvm/vsie.c
···584584 /* Validity 0x0044 will be checked by SIE */585585 if (rc)586586 goto unpin;587587- scb_s->gvrd = hpa;587587+ scb_s->riccbd = hpa;588588 }589589 return 0;590590unpin:
+24-22
arch/score/include/asm/uaccess.h
···163163 __get_user_asm(val, "lw", ptr); \164164 break; \165165 case 8: \166166- if ((copy_from_user((void *)&val, ptr, 8)) == 0) \166166+ if (__copy_from_user((void *)&val, ptr, 8) == 0) \167167 __gu_err = 0; \168168 else \169169 __gu_err = -EFAULT; \···188188 \189189 if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \190190 __get_user_common((x), size, __gu_ptr); \191191+ else \192192+ (x) = 0; \191193 \192194 __gu_err; \193195})···203201 "2:\n" \204202 ".section .fixup,\"ax\"\n" \205203 "3:li %0, %4\n" \204204+ "li %1, 0\n" \206205 "j 2b\n" \207206 ".previous\n" \208207 ".section __ex_table,\"a\"\n" \···301298static inline unsigned long302299copy_from_user(void *to, const void *from, unsigned long len)303300{304304- unsigned long over;301301+ unsigned long res = len;305302306306- if (access_ok(VERIFY_READ, from, len))307307- return __copy_tofrom_user(to, from, len);303303+ if (likely(access_ok(VERIFY_READ, from, len)))304304+ res = __copy_tofrom_user(to, from, len);308305309309- if ((unsigned long)from < TASK_SIZE) {310310- over = (unsigned long)from + len - TASK_SIZE;311311- return __copy_tofrom_user(to, from, len - over) + over;312312- }313313- return len;306306+ if (unlikely(res))307307+ memset(to + (len - res), 0, res);308308+309309+ return res;314310}315311316312static inline unsigned long317313copy_to_user(void *to, const void *from, unsigned long len)318314{319319- unsigned long over;315315+ if (likely(access_ok(VERIFY_WRITE, to, len)))316316+ len = __copy_tofrom_user(to, from, len);320317321321- if (access_ok(VERIFY_WRITE, to, len))322322- return __copy_tofrom_user(to, from, len);323323-324324- if ((unsigned long)to < TASK_SIZE) {325325- over = (unsigned long)to + len - TASK_SIZE;326326- return __copy_tofrom_user(to, from, len - over) + over;327327- }328318 return len;329319}330320331331-#define __copy_from_user(to, from, len) \332332- __copy_tofrom_user((to), (from), (len))321321+static inline unsigned long322322+__copy_from_user(void *to, const void *from, unsigned long len)323323+{324324+ unsigned long left = __copy_tofrom_user(to, from, len);325325+ if (unlikely(left))326326+ memset(to + (len - left), 0, left);327327+ return left;328328+}333329334330#define __copy_to_user(to, from, len) \335331 __copy_tofrom_user((to), (from), (len))···342340static inline unsigned long343341__copy_from_user_inatomic(void *to, const void *from, unsigned long len)344342{345345- return __copy_from_user(to, from, len);343343+ return __copy_tofrom_user(to, from, len);346344}347345348348-#define __copy_in_user(to, from, len) __copy_from_user(to, from, len)346346+#define __copy_in_user(to, from, len) __copy_tofrom_user(to, from, len)349347350348static inline unsigned long351349copy_in_user(void *to, const void *from, unsigned long len)352350{353351 if (access_ok(VERIFY_READ, from, len) &&354352 access_ok(VERFITY_WRITE, to, len))355355- return copy_from_user(to, from, len);353353+ return __copy_tofrom_user(to, from, len);356354}357355358356/*
···3131struct bts_ctx {3232 struct perf_output_handle handle;3333 struct debug_store ds_back;3434- int started;3434+ int state;3535+};3636+3737+/* BTS context states: */3838+enum {3939+ /* no ongoing AUX transactions */4040+ BTS_STATE_STOPPED = 0,4141+ /* AUX transaction is on, BTS tracing is disabled */4242+ BTS_STATE_INACTIVE,4343+ /* AUX transaction is on, BTS tracing is running */4444+ BTS_STATE_ACTIVE,3545};36463747static DEFINE_PER_CPU(struct bts_ctx, bts_ctx);···214204static int215205bts_buffer_reset(struct bts_buffer *buf, struct perf_output_handle *handle);216206207207+/*208208+ * Ordering PMU callbacks wrt themselves and the PMI is done by means209209+ * of bts::state, which:210210+ * - is set when bts::handle::event is valid, that is, between211211+ * perf_aux_output_begin() and perf_aux_output_end();212212+ * - is zero otherwise;213213+ * - is ordered against bts::handle::event with a compiler barrier.214214+ */215215+217216static void __bts_event_start(struct perf_event *event)218217{219218 struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);···240221241222 /*242223 * local barrier to make sure that ds configuration made it243243- * before we enable BTS224224+ * before we enable BTS and bts::state goes ACTIVE244225 */245226 wmb();227227+228228+ /* INACTIVE/STOPPED -> ACTIVE */229229+ WRITE_ONCE(bts->state, BTS_STATE_ACTIVE);246230247231 intel_pmu_enable_bts(config);248232···273251274252 __bts_event_start(event);275253276276- /* PMI handler: this counter is running and likely generating PMIs */277277- ACCESS_ONCE(bts->started) = 1;278278-279254 return;280255281256fail_end_stop:···282263 event->hw.state = PERF_HES_STOPPED;283264}284265285285-static void __bts_event_stop(struct perf_event *event)266266+static void __bts_event_stop(struct perf_event *event, int state)286267{268268+ struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);269269+270270+ /* ACTIVE -> INACTIVE(PMI)/STOPPED(->stop()) */271271+ WRITE_ONCE(bts->state, state);272272+287273 /*288274 * No extra synchronization is mandated by the documentation to have289275 * BTS data stores globally visible.290276 */291277 intel_pmu_disable_bts();292292-293293- if (event->hw.state & PERF_HES_STOPPED)294294- return;295295-296296- ACCESS_ONCE(event->hw.state) |= PERF_HES_STOPPED;297278}298279299280static void bts_event_stop(struct perf_event *event, int flags)300281{301282 struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);302283 struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);303303- struct bts_buffer *buf = perf_get_aux(&bts->handle);284284+ struct bts_buffer *buf = NULL;285285+ int state = READ_ONCE(bts->state);304286305305- /* PMI handler: don't restart this counter */306306- ACCESS_ONCE(bts->started) = 0;287287+ if (state == BTS_STATE_ACTIVE)288288+ __bts_event_stop(event, BTS_STATE_STOPPED);307289308308- __bts_event_stop(event);290290+ if (state != BTS_STATE_STOPPED)291291+ buf = perf_get_aux(&bts->handle);292292+293293+ event->hw.state |= PERF_HES_STOPPED;309294310295 if (flags & PERF_EF_UPDATE) {311296 bts_update(bts);···319296 bts->handle.head =320297 local_xchg(&buf->data_size,321298 buf->nr_pages << PAGE_SHIFT);299299+322300 perf_aux_output_end(&bts->handle, local_xchg(&buf->data_size, 0),323301 !!local_xchg(&buf->lost, 0));324302 }···334310void intel_bts_enable_local(void)335311{336312 struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);313313+ int state = READ_ONCE(bts->state);337314338338- if (bts->handle.event && bts->started)315315+ /*316316+ * Here we transition from INACTIVE to ACTIVE;317317+ * if we instead are STOPPED from the interrupt handler,318318+ * stay that way. Can't be ACTIVE here though.319319+ */320320+ if (WARN_ON_ONCE(state == BTS_STATE_ACTIVE))321321+ return;322322+323323+ if (state == BTS_STATE_STOPPED)324324+ return;325325+326326+ if (bts->handle.event)339327 __bts_event_start(bts->handle.event);340328}341329···355319{356320 struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);357321322322+ /*323323+ * Here we transition from ACTIVE to INACTIVE;324324+ * do nothing for STOPPED or INACTIVE.325325+ */326326+ if (READ_ONCE(bts->state) != BTS_STATE_ACTIVE)327327+ return;328328+358329 if (bts->handle.event)359359- __bts_event_stop(bts->handle.event);330330+ __bts_event_stop(bts->handle.event, BTS_STATE_INACTIVE);360331}361332362333static int···378335 return 0;379336380337 head = handle->head & ((buf->nr_pages << PAGE_SHIFT) - 1);381381- if (WARN_ON_ONCE(head != local_read(&buf->head)))382382- return -EINVAL;383338384339 phys = &buf->buf[buf->cur_buf];385340 space = phys->offset + phys->displacement + phys->size - head;···444403445404int intel_bts_interrupt(void)446405{406406+ struct debug_store *ds = this_cpu_ptr(&cpu_hw_events)->ds;447407 struct bts_ctx *bts = this_cpu_ptr(&bts_ctx);448408 struct perf_event *event = bts->handle.event;449409 struct bts_buffer *buf;450410 s64 old_head;451451- int err;411411+ int err = -ENOSPC, handled = 0;452412453453- if (!event || !bts->started)454454- return 0;413413+ /*414414+ * The only surefire way of knowing if this NMI is ours is by checking415415+ * the write ptr against the PMI threshold.416416+ */417417+ if (ds->bts_index >= ds->bts_interrupt_threshold)418418+ handled = 1;419419+420420+ /*421421+ * this is wrapped in intel_bts_enable_local/intel_bts_disable_local,422422+ * so we can only be INACTIVE or STOPPED423423+ */424424+ if (READ_ONCE(bts->state) == BTS_STATE_STOPPED)425425+ return handled;455426456427 buf = perf_get_aux(&bts->handle);428428+ if (!buf)429429+ return handled;430430+457431 /*458432 * Skip snapshot counters: they don't use the interrupt, but459433 * there's no other way of telling, because the pointer will460434 * keep moving461435 */462462- if (!buf || buf->snapshot)436436+ if (buf->snapshot)463437 return 0;464438465439 old_head = local_read(&buf->head);···482426483427 /* no new data */484428 if (old_head == local_read(&buf->head))485485- return 0;429429+ return handled;486430487431 perf_aux_output_end(&bts->handle, local_xchg(&buf->data_size, 0),488432 !!local_xchg(&buf->lost, 0));489433490434 buf = perf_aux_output_begin(&bts->handle, event);491491- if (!buf)492492- return 1;435435+ if (buf)436436+ err = bts_buffer_reset(buf, &bts->handle);493437494494- err = bts_buffer_reset(buf, &bts->handle);495495- if (err)496496- perf_aux_output_end(&bts->handle, 0, false);438438+ if (err) {439439+ WRITE_ONCE(bts->state, BTS_STATE_STOPPED);440440+441441+ if (buf) {442442+ /*443443+ * BTS_STATE_STOPPED should be visible before444444+ * cleared handle::event445445+ */446446+ barrier();447447+ perf_aux_output_end(&bts->handle, 0, false);448448+ }449449+ }497450498451 return 1;499452}
+8-7
arch/x86/events/intel/core.c
···17301730 * disabled state if called consecutively.17311731 *17321732 * During consecutive calls, the same disable value will be written to related17331733- * registers, so the PMU state remains unchanged. hw.state in17341734- * intel_bts_disable_local will remain PERF_HES_STOPPED too in consecutive17351735- * calls.17331733+ * registers, so the PMU state remains unchanged.17341734+ *17351735+ * intel_bts events don't coexist with intel PMU's BTS events because of17361736+ * x86_add_exclusive(x86_lbr_exclusive_lbr); there's no need to keep them17371737+ * disabled around intel PMU's event batching etc, only inside the PMI handler.17361738 */17371739static void __intel_pmu_disable_all(void)17381740{···1744174217451743 if (test_bit(INTEL_PMC_IDX_FIXED_BTS, cpuc->active_mask))17461744 intel_pmu_disable_bts();17471747- else17481748- intel_bts_disable_local();1749174517501746 intel_pmu_pebs_disable_all();17511747}···17711771 return;1772177217731773 intel_pmu_enable_bts(event->hw.config);17741774- } else17751775- intel_bts_enable_local();17741774+ }17761775}1777177617781777static void intel_pmu_enable_all(int added)···20722073 */20732074 if (!x86_pmu.late_ack)20742075 apic_write(APIC_LVTPC, APIC_DM_NMI);20762076+ intel_bts_disable_local();20752077 __intel_pmu_disable_all();20762078 handled = intel_pmu_drain_bts_buffer();20772079 handled += intel_bts_interrupt();···21722172 /* Only restore PMU state when it's active. See x86_pmu_disable(). */21732173 if (cpuc->enabled)21742174 __intel_pmu_enable_all(0, true);21752175+ intel_bts_enable_local();2175217621762177 /*21772178 * Only unmask the NMI after the overflow counters
+9
arch/x86/events/intel/cqm.c
···458458static void init_mbm_sample(u32 rmid, u32 evt_type);459459static void __intel_mbm_event_count(void *info);460460461461+static bool is_cqm_event(int e)462462+{463463+ return (e == QOS_L3_OCCUP_EVENT_ID);464464+}465465+461466static bool is_mbm_event(int e)462467{463468 return (e >= QOS_MBM_TOTAL_EVENT_ID && e <= QOS_MBM_LOCAL_EVENT_ID);···1369136413701365 if ((event->attr.config < QOS_L3_OCCUP_EVENT_ID) ||13711366 (event->attr.config > QOS_MBM_LOCAL_EVENT_ID))13671367+ return -EINVAL;13681368+13691369+ if ((is_cqm_event(event->attr.config) && !cqm_enabled) ||13701370+ (is_mbm_event(event->attr.config) && !mbm_enabled))13721371 return -EINVAL;1373137213741373 /* unsupported modes and filters */
+11-8
arch/x86/events/intel/ds.c
···12741274 struct pebs_record_nhm *p = at;12751275 u64 pebs_status;1276127612771277- /* PEBS v3 has accurate status bits */12771277+ pebs_status = p->status & cpuc->pebs_enabled;12781278+ pebs_status &= (1ULL << x86_pmu.max_pebs_events) - 1;12791279+12801280+ /* PEBS v3 has more accurate status bits */12781281 if (x86_pmu.intel_cap.pebs_format >= 3) {12791279- for_each_set_bit(bit, (unsigned long *)&p->status,12801280- MAX_PEBS_EVENTS)12821282+ for_each_set_bit(bit, (unsigned long *)&pebs_status,12831283+ x86_pmu.max_pebs_events)12811284 counts[bit]++;1282128512831286 continue;12841287 }12851285-12861286- pebs_status = p->status & cpuc->pebs_enabled;12871287- pebs_status &= (1ULL << x86_pmu.max_pebs_events) - 1;1288128812891289 /*12901290 * On some CPUs the PEBS status can be zero when PEBS is···13331333 continue;1334133413351335 event = cpuc->events[bit];13361336- WARN_ON_ONCE(!event);13371337- WARN_ON_ONCE(!event->attr.precise_ip);13361336+ if (WARN_ON_ONCE(!event))13371337+ continue;13381338+13391339+ if (WARN_ON_ONCE(!event->attr.precise_ip))13401340+ continue;1338134113391342 /* log dropped samples number */13401343 if (error[bit])
+14-4
arch/x86/events/intel/pt.c
···10741074 event->hw.addr_filters = NULL;10751075}1076107610771077+static inline bool valid_kernel_ip(unsigned long ip)10781078+{10791079+ return virt_addr_valid(ip) && kernel_ip(ip);10801080+}10811081+10771082static int pt_event_addr_filters_validate(struct list_head *filters)10781083{10791084 struct perf_addr_filter *filter;···1086108110871082 list_for_each_entry(filter, filters, entry) {10881083 /* PT doesn't support single address triggers */10891089- if (!filter->range)10841084+ if (!filter->range || !filter->size)10901085 return -EOPNOTSUPP;1091108610921092- if (!filter->inode && !kernel_ip(filter->offset))10931093- return -EINVAL;10871087+ if (!filter->inode) {10881088+ if (!valid_kernel_ip(filter->offset))10891089+ return -EINVAL;10901090+10911091+ if (!valid_kernel_ip(filter->offset + filter->size))10921092+ return -EINVAL;10931093+ }1094109410951095 if (++range > pt_cap_get(PT_CAP_num_address_ranges))10961096 return -EOPNOTSUPP;···11211111 } else {11221112 /* apply the offset */11231113 msr_a = filter->offset + offs[range];11241124- msr_b = filter->size + msr_a;11141114+ msr_b = filter->size + msr_a - 1;11251115 }1126111611271117 filters->filter[range].msr_a = msr_a;
···27432743 if (tsc_delta < 0)27442744 mark_tsc_unstable("KVM discovered backwards TSC");2745274527462746- if (kvm_lapic_hv_timer_in_use(vcpu) &&27472747- kvm_x86_ops->set_hv_timer(vcpu,27482748- kvm_get_lapic_tscdeadline_msr(vcpu)))27492749- kvm_lapic_switch_to_sw_timer(vcpu);27502746 if (check_tsc_unstable()) {27512747 u64 offset = kvm_compute_tsc_offset(vcpu,27522748 vcpu->arch.last_guest_tsc);27532749 kvm_x86_ops->write_tsc_offset(vcpu, offset);27542750 vcpu->arch.tsc_catchup = 1;27552751 }27522752+ if (kvm_lapic_hv_timer_in_use(vcpu) &&27532753+ kvm_x86_ops->set_hv_timer(vcpu,27542754+ kvm_get_lapic_tscdeadline_msr(vcpu)))27552755+ kvm_lapic_switch_to_sw_timer(vcpu);27562756 /*27572757 * On a host with synchronized TSC, there is no need to update27582758 * kvmclock on vcpu->cpu migration
+13-7
arch/x86/pci/fixup.c
···553553DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x27B9, twinhead_reserve_killing_zone);554554555555/*556556- * Broadwell EP Home Agent BARs erroneously return non-zero values when read.556556+ * Device [8086:2fc0]557557+ * Erratum HSE43558558+ * CONFIG_TDP_NOMINAL CSR Implemented at Incorrect Offset559559+ * http://www.intel.com/content/www/us/en/processors/xeon/xeon-e5-v3-spec-update.html557560 *558558- * See http://www.intel.com/content/www/us/en/processors/xeon/xeon-e5-v4-spec-update.html559559- * entry BDF2.561561+ * Devices [8086:6f60,6fa0,6fc0]562562+ * Erratum BDF2563563+ * PCI BARs in the Home Agent Will Return Non-Zero Values During Enumeration564564+ * http://www.intel.com/content/www/us/en/processors/xeon/xeon-e5-v4-spec-update.html560565 */561561-static void pci_bdwep_bar(struct pci_dev *dev)566566+static void pci_invalid_bar(struct pci_dev *dev)562567{563568 dev->non_compliant_bars = 1;564569}565565-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6f60, pci_bdwep_bar);566566-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fa0, pci_bdwep_bar);567567-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fc0, pci_bdwep_bar);570570+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x2fc0, pci_invalid_bar);571571+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6f60, pci_invalid_bar);572572+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fa0, pci_invalid_bar);573573+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fc0, pci_invalid_bar);
···1414#include "ccu_gate.h"1515#include "ccu_nk.h"16161717-void ccu_nk_find_best(unsigned long parent, unsigned long rate,1818- unsigned int max_n, unsigned int max_k,1919- unsigned int *n, unsigned int *k)1717+static void ccu_nk_find_best(unsigned long parent, unsigned long rate,1818+ unsigned int max_n, unsigned int max_k,1919+ unsigned int *n, unsigned int *k)2020{2121 unsigned long best_rate = 0;2222 unsigned int best_k = 0, best_n = 0;
+2-2
drivers/clk/sunxi/clk-a10-pll2.c
···7373 SUN4I_PLL2_PRE_DIV_WIDTH,7474 CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,7575 &sun4i_a10_pll2_lock);7676- if (!prediv_clk) {7676+ if (IS_ERR(prediv_clk)) {7777 pr_err("Couldn't register the prediv clock\n");7878 goto err_free_array;7979 }···106106 &mult->hw, &clk_multiplier_ops,107107 &gate->hw, &clk_gate_ops,108108 CLK_SET_RATE_PARENT);109109- if (!base_clk) {109109+ if (IS_ERR(base_clk)) {110110 pr_err("Couldn't register the base multiplier clock\n");111111 goto err_free_multiplier;112112 }
+1-1
drivers/clk/sunxi/clk-sun8i-mbus.c
···4848 return;49495050 reg = of_io_request_and_map(node, 0, of_node_full_name(node));5151- if (!reg) {5151+ if (IS_ERR(reg)) {5252 pr_err("Could not get registers for sun8i-mbus-clk\n");5353 goto err_free_parents;5454 }
+5-2
drivers/firmware/efi/efi.c
···657657 }658658659659 if (subnode) {660660- node = of_get_flat_dt_subnode_by_name(node, subnode);661661- if (node < 0)660660+ int err = of_get_flat_dt_subnode_by_name(node, subnode);661661+662662+ if (err < 0)662663 return 0;664664+665665+ node = err;663666 }664667665668 return __find_uefi_params(node, info, dt_params[i].params);
+139-30
drivers/firmware/efi/libstub/efi-stub-helper.c
···4141#define EFI_ALLOC_ALIGN EFI_PAGE_SIZE4242#endif43434444+#define EFI_MMAP_NR_SLACK_SLOTS 84545+4446struct file_info {4547 efi_file_handle_t *handle;4648 u64 size;···6563 }6664}67656666+static inline bool mmap_has_headroom(unsigned long buff_size,6767+ unsigned long map_size,6868+ unsigned long desc_size)6969+{7070+ unsigned long slack = buff_size - map_size;7171+7272+ return slack / desc_size >= EFI_MMAP_NR_SLACK_SLOTS;7373+}7474+6875efi_status_t efi_get_memory_map(efi_system_table_t *sys_table_arg,6969- efi_memory_desc_t **map,7070- unsigned long *map_size,7171- unsigned long *desc_size,7272- u32 *desc_ver,7373- unsigned long *key_ptr)7676+ struct efi_boot_memmap *map)7477{7578 efi_memory_desc_t *m = NULL;7679 efi_status_t status;7780 unsigned long key;7881 u32 desc_version;79828080- *map_size = sizeof(*m) * 32;8383+ *map->desc_size = sizeof(*m);8484+ *map->map_size = *map->desc_size * 32;8585+ *map->buff_size = *map->map_size;8186again:8282- /*8383- * Add an additional efi_memory_desc_t because we're doing an8484- * allocation which may be in a new descriptor region.8585- */8686- *map_size += sizeof(*m);8787 status = efi_call_early(allocate_pool, EFI_LOADER_DATA,8888- *map_size, (void **)&m);8888+ *map->map_size, (void **)&m);8989 if (status != EFI_SUCCESS)9090 goto fail;91919292- *desc_size = 0;9292+ *map->desc_size = 0;9393 key = 0;9494- status = efi_call_early(get_memory_map, map_size, m,9595- &key, desc_size, &desc_version);9696- if (status == EFI_BUFFER_TOO_SMALL) {9494+ status = efi_call_early(get_memory_map, map->map_size, m,9595+ &key, map->desc_size, &desc_version);9696+ if (status == EFI_BUFFER_TOO_SMALL ||9797+ !mmap_has_headroom(*map->buff_size, *map->map_size,9898+ *map->desc_size)) {9799 efi_call_early(free_pool, m);100100+ /*101101+ * Make sure there is some entries of headroom so that the102102+ * buffer can be reused for a new map after allocations are103103+ * no longer permitted. Its unlikely that the map will grow to104104+ * exceed this headroom once we are ready to trigger105105+ * ExitBootServices()106106+ */107107+ *map->map_size += *map->desc_size * EFI_MMAP_NR_SLACK_SLOTS;108108+ *map->buff_size = *map->map_size;98109 goto again;99110 }100111101112 if (status != EFI_SUCCESS)102113 efi_call_early(free_pool, m);103114104104- if (key_ptr && status == EFI_SUCCESS)105105- *key_ptr = key;106106- if (desc_ver && status == EFI_SUCCESS)107107- *desc_ver = desc_version;115115+ if (map->key_ptr && status == EFI_SUCCESS)116116+ *map->key_ptr = key;117117+ if (map->desc_ver && status == EFI_SUCCESS)118118+ *map->desc_ver = desc_version;108119109120fail:110110- *map = m;121121+ *map->map = m;111122 return status;112123}113124···128113unsigned long get_dram_base(efi_system_table_t *sys_table_arg)129114{130115 efi_status_t status;131131- unsigned long map_size;116116+ unsigned long map_size, buff_size;132117 unsigned long membase = EFI_ERROR;133118 struct efi_memory_map map;134119 efi_memory_desc_t *md;120120+ struct efi_boot_memmap boot_map;135121136136- status = efi_get_memory_map(sys_table_arg, (efi_memory_desc_t **)&map.map,137137- &map_size, &map.desc_size, NULL, NULL);122122+ boot_map.map = (efi_memory_desc_t **)&map.map;123123+ boot_map.map_size = &map_size;124124+ boot_map.desc_size = &map.desc_size;125125+ boot_map.desc_ver = NULL;126126+ boot_map.key_ptr = NULL;127127+ boot_map.buff_size = &buff_size;128128+129129+ status = efi_get_memory_map(sys_table_arg, &boot_map);138130 if (status != EFI_SUCCESS)139131 return membase;140132···166144 unsigned long size, unsigned long align,167145 unsigned long *addr, unsigned long max)168146{169169- unsigned long map_size, desc_size;147147+ unsigned long map_size, desc_size, buff_size;170148 efi_memory_desc_t *map;171149 efi_status_t status;172150 unsigned long nr_pages;173151 u64 max_addr = 0;174152 int i;153153+ struct efi_boot_memmap boot_map;175154176176- status = efi_get_memory_map(sys_table_arg, &map, &map_size, &desc_size,177177- NULL, NULL);155155+ boot_map.map = ↦156156+ boot_map.map_size = &map_size;157157+ boot_map.desc_size = &desc_size;158158+ boot_map.desc_ver = NULL;159159+ boot_map.key_ptr = NULL;160160+ boot_map.buff_size = &buff_size;161161+162162+ status = efi_get_memory_map(sys_table_arg, &boot_map);178163 if (status != EFI_SUCCESS)179164 goto fail;180165···259230 unsigned long size, unsigned long align,260231 unsigned long *addr)261232{262262- unsigned long map_size, desc_size;233233+ unsigned long map_size, desc_size, buff_size;263234 efi_memory_desc_t *map;264235 efi_status_t status;265236 unsigned long nr_pages;266237 int i;238238+ struct efi_boot_memmap boot_map;267239268268- status = efi_get_memory_map(sys_table_arg, &map, &map_size, &desc_size,269269- NULL, NULL);240240+ boot_map.map = ↦241241+ boot_map.map_size = &map_size;242242+ boot_map.desc_size = &desc_size;243243+ boot_map.desc_ver = NULL;244244+ boot_map.key_ptr = NULL;245245+ boot_map.buff_size = &buff_size;246246+247247+ status = efi_get_memory_map(sys_table_arg, &boot_map);270248 if (status != EFI_SUCCESS)271249 goto fail;272250···739703740704 *cmd_line_len = options_bytes;741705 return (char *)cmdline_addr;706706+}707707+708708+/*709709+ * Handle calling ExitBootServices according to the requirements set out by the710710+ * spec. Obtains the current memory map, and returns that info after calling711711+ * ExitBootServices. The client must specify a function to perform any712712+ * processing of the memory map data prior to ExitBootServices. A client713713+ * specific structure may be passed to the function via priv. The client714714+ * function may be called multiple times.715715+ */716716+efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table_arg,717717+ void *handle,718718+ struct efi_boot_memmap *map,719719+ void *priv,720720+ efi_exit_boot_map_processing priv_func)721721+{722722+ efi_status_t status;723723+724724+ status = efi_get_memory_map(sys_table_arg, map);725725+726726+ if (status != EFI_SUCCESS)727727+ goto fail;728728+729729+ status = priv_func(sys_table_arg, map, priv);730730+ if (status != EFI_SUCCESS)731731+ goto free_map;732732+733733+ status = efi_call_early(exit_boot_services, handle, *map->key_ptr);734734+735735+ if (status == EFI_INVALID_PARAMETER) {736736+ /*737737+ * The memory map changed between efi_get_memory_map() and738738+ * exit_boot_services(). Per the UEFI Spec v2.6, Section 6.4:739739+ * EFI_BOOT_SERVICES.ExitBootServices we need to get the740740+ * updated map, and try again. The spec implies one retry741741+ * should be sufficent, which is confirmed against the EDK2742742+ * implementation. Per the spec, we can only invoke743743+ * get_memory_map() and exit_boot_services() - we cannot alloc744744+ * so efi_get_memory_map() cannot be used, and we must reuse745745+ * the buffer. For all practical purposes, the headroom in the746746+ * buffer should account for any changes in the map so the call747747+ * to get_memory_map() is expected to succeed here.748748+ */749749+ *map->map_size = *map->buff_size;750750+ status = efi_call_early(get_memory_map,751751+ map->map_size,752752+ *map->map,753753+ map->key_ptr,754754+ map->desc_size,755755+ map->desc_ver);756756+757757+ /* exit_boot_services() was called, thus cannot free */758758+ if (status != EFI_SUCCESS)759759+ goto fail;760760+761761+ status = priv_func(sys_table_arg, map, priv);762762+ /* exit_boot_services() was called, thus cannot free */763763+ if (status != EFI_SUCCESS)764764+ goto fail;765765+766766+ status = efi_call_early(exit_boot_services, handle, *map->key_ptr);767767+ }768768+769769+ /* exit_boot_services() was called, thus cannot free */770770+ if (status != EFI_SUCCESS)771771+ goto fail;772772+773773+ return EFI_SUCCESS;774774+775775+free_map:776776+ efi_call_early(free_pool, *map->map);777777+fail:778778+ return status;742779}
+39-15
drivers/firmware/efi/libstub/fdt.c
···152152#define EFI_FDT_ALIGN EFI_PAGE_SIZE153153#endif154154155155+struct exit_boot_struct {156156+ efi_memory_desc_t *runtime_map;157157+ int *runtime_entry_count;158158+};159159+160160+static efi_status_t exit_boot_func(efi_system_table_t *sys_table_arg,161161+ struct efi_boot_memmap *map,162162+ void *priv)163163+{164164+ struct exit_boot_struct *p = priv;165165+ /*166166+ * Update the memory map with virtual addresses. The function will also167167+ * populate @runtime_map with copies of just the EFI_MEMORY_RUNTIME168168+ * entries so that we can pass it straight to SetVirtualAddressMap()169169+ */170170+ efi_get_virtmap(*map->map, *map->map_size, *map->desc_size,171171+ p->runtime_map, p->runtime_entry_count);172172+173173+ return EFI_SUCCESS;174174+}175175+155176/*156177 * Allocate memory for a new FDT, then add EFI, commandline, and157178 * initrd related fields to the FDT. This routine increases the···196175 unsigned long fdt_addr,197176 unsigned long fdt_size)198177{199199- unsigned long map_size, desc_size;178178+ unsigned long map_size, desc_size, buff_size;200179 u32 desc_ver;201180 unsigned long mmap_key;202181 efi_memory_desc_t *memory_map, *runtime_map;203182 unsigned long new_fdt_size;204183 efi_status_t status;205184 int runtime_entry_count = 0;185185+ struct efi_boot_memmap map;186186+ struct exit_boot_struct priv;187187+188188+ map.map = &runtime_map;189189+ map.map_size = &map_size;190190+ map.desc_size = &desc_size;191191+ map.desc_ver = &desc_ver;192192+ map.key_ptr = &mmap_key;193193+ map.buff_size = &buff_size;206194207195 /*208196 * Get a copy of the current memory map that we will use to prepare···219189 * subsequent allocations adding entries, since they could not affect220190 * the number of EFI_MEMORY_RUNTIME regions.221191 */222222- status = efi_get_memory_map(sys_table, &runtime_map, &map_size,223223- &desc_size, &desc_ver, &mmap_key);192192+ status = efi_get_memory_map(sys_table, &map);224193 if (status != EFI_SUCCESS) {225194 pr_efi_err(sys_table, "Unable to retrieve UEFI memory map.\n");226195 return status;···228199 pr_efi(sys_table,229200 "Exiting boot services and installing virtual address map...\n");230201202202+ map.map = &memory_map;231203 /*232204 * Estimate size of new FDT, and allocate memory for it. We233205 * will allocate a bigger buffer if this ends up being too···248218 * we can get the memory map key needed for249219 * exit_boot_services().250220 */251251- status = efi_get_memory_map(sys_table, &memory_map, &map_size,252252- &desc_size, &desc_ver, &mmap_key);221221+ status = efi_get_memory_map(sys_table, &map);253222 if (status != EFI_SUCCESS)254223 goto fail_free_new_fdt;255224···279250 }280251 }281252282282- /*283283- * Update the memory map with virtual addresses. The function will also284284- * populate @runtime_map with copies of just the EFI_MEMORY_RUNTIME285285- * entries so that we can pass it straight into SetVirtualAddressMap()286286- */287287- efi_get_virtmap(memory_map, map_size, desc_size, runtime_map,288288- &runtime_entry_count);289289-290290- /* Now we are ready to exit_boot_services.*/291291- status = sys_table->boottime->exit_boot_services(handle, mmap_key);253253+ sys_table->boottime->free_pool(memory_map);254254+ priv.runtime_map = runtime_map;255255+ priv.runtime_entry_count = &runtime_entry_count;256256+ status = efi_exit_boot_services(sys_table, handle, &map, &priv,257257+ exit_boot_func);292258293259 if (status == EFI_SUCCESS) {294260 efi_set_virtual_address_map_t *svam;
+10-2
drivers/firmware/efi/libstub/random.c
···7373 unsigned long random_seed)7474{7575 unsigned long map_size, desc_size, total_slots = 0, target_slot;7676+ unsigned long buff_size;7677 efi_status_t status;7778 efi_memory_desc_t *memory_map;7879 int map_offset;8080+ struct efi_boot_memmap map;79818080- status = efi_get_memory_map(sys_table_arg, &memory_map, &map_size,8181- &desc_size, NULL, NULL);8282+ map.map = &memory_map;8383+ map.map_size = &map_size;8484+ map.desc_size = &desc_size;8585+ map.desc_ver = NULL;8686+ map.key_ptr = NULL;8787+ map.buff_size = &buff_size;8888+8989+ status = efi_get_memory_map(sys_table_arg, &map);8290 if (status != EFI_SUCCESS)8391 return status;8492
···1281128112821282 intel_runtime_pm_enable(dev_priv);1283128312841284+ /* Everything is in place, we can now relax! */12851285+ DRM_INFO("Initialized %s %d.%d.%d %s for %s on minor %d\n",12861286+ driver.name, driver.major, driver.minor, driver.patchlevel,12871287+ driver.date, pci_name(pdev), dev_priv->drm.primary->index);12881288+12841289 intel_runtime_pm_put(dev_priv);1285129012861291 return 0;
+6-3
drivers/gpu/drm/i915/i915_gem_gtt.c
···122122 has_full_48bit_ppgtt =123123 IS_BROADWELL(dev_priv) || INTEL_GEN(dev_priv) >= 9;124124125125- if (intel_vgpu_active(dev_priv))126126- has_full_ppgtt = false; /* emulation is too hard */125125+ if (intel_vgpu_active(dev_priv)) {126126+ /* emulation is too hard */127127+ has_full_ppgtt = false;128128+ has_full_48bit_ppgtt = false;129129+ }127130128131 if (!has_aliasing_ppgtt)129132 return 0;···161158 return 0;162159 }163160164164- if (INTEL_GEN(dev_priv) >= 8 && i915.enable_execlists)161161+ if (INTEL_GEN(dev_priv) >= 8 && i915.enable_execlists && has_full_ppgtt)165162 return has_full_48bit_ppgtt ? 3 : 2;166163 else167164 return has_aliasing_ppgtt ? 1 : 0;
-3
drivers/gpu/drm/i915/i915_vgpu.c
···65656666 BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE);67676868- if (!IS_HASWELL(dev_priv))6969- return;7070-7168 magic = __raw_i915_read64(dev_priv, vgtif_reg(magic));7269 if (magic != VGT_MAGIC)7370 return;
···10471047 return err;10481048}1049104910501050+static int intel_use_opregion_panel_type_callback(const struct dmi_system_id *id)10511051+{10521052+ DRM_INFO("Using panel type from OpRegion on %s\n", id->ident);10531053+ return 1;10541054+}10551055+10561056+static const struct dmi_system_id intel_use_opregion_panel_type[] = {10571057+ {10581058+ .callback = intel_use_opregion_panel_type_callback,10591059+ .ident = "Conrac GmbH IX45GM2",10601060+ .matches = {DMI_MATCH(DMI_SYS_VENDOR, "Conrac GmbH"),10611061+ DMI_MATCH(DMI_PRODUCT_NAME, "IX45GM2"),10621062+ },10631063+ },10641064+ { }10651065+};10661066+10501067int10511068intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)10521069{···10861069 /* fall back to VBT panel type? */10871070 if (ret == 0x0) {10881071 DRM_DEBUG_KMS("No panel type in OpRegion\n");10721072+ return -ENODEV;10731073+ }10741074+10751075+ /*10761076+ * So far we know that some machined must use it, others must not use it.10771077+ * There doesn't seem to be any way to determine which way to go, except10781078+ * via a quirk list :(10791079+ */10801080+ if (!dmi_check_system(intel_use_opregion_panel_type)) {10811081+ DRM_DEBUG_KMS("Ignoring OpRegion panel type (%d)\n", ret - 1);10891082 return -ENODEV;10901083 }10911084
+1
drivers/gpu/drm/i915/intel_pm.c
···78597859 case GEN6_PCODE_ILLEGAL_CMD:78607860 return -ENXIO;78617861 case GEN6_PCODE_MIN_FREQ_TABLE_GT_RATIO_OUT_OF_RANGE:78627862+ case GEN7_PCODE_MIN_FREQ_TABLE_GT_RATIO_OUT_OF_RANGE:78627863 return -EOVERFLOW;78637864 case GEN6_PCODE_TIMEOUT:78647865 return -ETIMEDOUT;
+7-7
drivers/gpu/drm/i915/intel_psr.c
···255255 struct drm_i915_private *dev_priv = to_i915(dev);256256257257 uint32_t max_sleep_time = 0x1f;258258- /* Lately it was identified that depending on panel idle frame count259259- * calculated at HW can be off by 1. So let's use what came260260- * from VBT + 1.261261- * There are also other cases where panel demands at least 4262262- * but VBT is not being set. To cover these 2 cases lets use263263- * at least 5 when VBT isn't set to be on the safest side.258258+ /*259259+ * Let's respect VBT in case VBT asks a higher idle_frame value.260260+ * Let's use 6 as the minimum to cover all known cases including261261+ * the off-by-one issue that HW has in some cases. Also there are262262+ * cases where sink should be able to train263263+ * with the 5 or 6 idle patterns.264264 */265265- uint32_t idle_frames = dev_priv->vbt.psr.idle_frames + 1;265265+ uint32_t idle_frames = max(6, dev_priv->vbt.psr.idle_frames);266266 uint32_t val = EDP_PSR_ENABLE;267267268268 val |= max_sleep_time << EDP_PSR_MAX_SLEEP_TIME_SHIFT;
···309309 * of uniforms on each side. However, this scheme is easy to310310 * validate so it's all we allow for now.311311 */312312-313313- if (QPU_GET_FIELD(inst, QPU_SIG) != QPU_SIG_NONE) {312312+ switch (QPU_GET_FIELD(inst, QPU_SIG)) {313313+ case QPU_SIG_NONE:314314+ case QPU_SIG_SCOREBOARD_UNLOCK:315315+ case QPU_SIG_COLOR_LOAD:316316+ case QPU_SIG_LOAD_TMU0:317317+ case QPU_SIG_LOAD_TMU1:318318+ break;319319+ default:314320 DRM_ERROR("uniforms address change must be "315321 "normal math\n");316322 return false;
+5-1
drivers/infiniband/hw/cxgb4/cm.c
···333333334334 spin_lock_irqsave(&ep->com.dev->lock, flags);335335 _remove_handle(ep->com.dev, &ep->com.dev->hwtid_idr, ep->hwtid, 0);336336+ if (idr_is_empty(&ep->com.dev->hwtid_idr))337337+ wake_up(&ep->com.dev->wait);336338 spin_unlock_irqrestore(&ep->com.dev->lock, flags);337339}338340···21192117 }21202118 ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t,21212119 n, pdev, rt_tos2priority(tos));21222122- if (!ep->l2t)21202120+ if (!ep->l2t) {21212121+ dev_put(pdev);21232122 goto out;21232123+ }21242124 ep->mtu = pdev->mtu;21252125 ep->tx_chan = cxgb4_port_chan(pdev);21262126 ep->smac_idx = cxgb4_tp_smt_idx(adapter_type,
···1128112811291129 /* Generate GUID changed event */11301130 if (changed_attr & MLX4_EQ_PORT_INFO_GID_PFX_CHANGE_MASK) {11311131+ if (mlx4_is_master(dev->dev)) {11321132+ union ib_gid gid;11331133+ int err = 0;11341134+11351135+ if (!eqe->event.port_mgmt_change.params.port_info.gid_prefix)11361136+ err = __mlx4_ib_query_gid(&dev->ib_dev, port, 0, &gid, 1);11371137+ else11381138+ gid.global.subnet_prefix =11391139+ eqe->event.port_mgmt_change.params.port_info.gid_prefix;11401140+ if (err) {11411141+ pr_warn("Could not change QP1 subnet prefix for port %d: query_gid error (%d)\n",11421142+ port, err);11431143+ } else {11441144+ pr_debug("Changing QP1 subnet prefix for port %d. old=0x%llx. new=0x%llx\n",11451145+ port,11461146+ (u64)atomic64_read(&dev->sriov.demux[port - 1].subnet_prefix),11471147+ be64_to_cpu(gid.global.subnet_prefix));11481148+ atomic64_set(&dev->sriov.demux[port - 1].subnet_prefix,11491149+ be64_to_cpu(gid.global.subnet_prefix));11501150+ }11511151+ }11311152 mlx4_ib_dispatch_event(dev, port, IB_EVENT_GID_CHANGE);11321153 /*if master, notify all slaves*/11331154 if (mlx4_is_master(dev->dev))···22232202 if (err)22242203 goto demux_err;22252204 dev->sriov.demux[i].guid_cache[0] = gid.global.interface_id;22052205+ atomic64_set(&dev->sriov.demux[i].subnet_prefix,22062206+ be64_to_cpu(gid.global.subnet_prefix));22262207 err = alloc_pv_object(dev, mlx4_master_func_num(dev->dev), i + 1,22272208 &dev->sriov.sqps[i]);22282209 if (err)
+3
drivers/infiniband/hw/mlx4/main.c
···22022202 bool per_port = !!(ibdev->dev->caps.flags2 &22032203 MLX4_DEV_CAP_FLAG2_DIAG_PER_PORT);2204220422052205+ if (mlx4_is_slave(ibdev->dev))22062206+ return 0;22072207+22052208 for (i = 0; i < MLX4_DIAG_COUNTERS_TYPES; i++) {22062209 /* i == 1 means we are building port counters */22072210 if (i && !per_port)
+7-7
drivers/infiniband/hw/mlx4/mcg.c
···489489 if (!group->members[i])490490 leave_state |= (1 << i);491491492492- return leave_state & (group->rec.scope_join_state & 7);492492+ return leave_state & (group->rec.scope_join_state & 0xf);493493}494494495495static int join_group(struct mcast_group *group, int slave, u8 join_mask)···564564 } else565565 mcg_warn_group(group, "DRIVER BUG\n");566566 } else if (group->state == MCAST_LEAVE_SENT) {567567- if (group->rec.scope_join_state & 7)568568- group->rec.scope_join_state &= 0xf8;567567+ if (group->rec.scope_join_state & 0xf)568568+ group->rec.scope_join_state &= 0xf0;569569 group->state = MCAST_IDLE;570570 mutex_unlock(&group->lock);571571 if (release_group(group, 1))···605605static int handle_join_req(struct mcast_group *group, u8 join_mask,606606 struct mcast_req *req)607607{608608- u8 group_join_state = group->rec.scope_join_state & 7;608608+ u8 group_join_state = group->rec.scope_join_state & 0xf;609609 int ref = 0;610610 u16 status;611611 struct ib_sa_mcmember_data *sa_data = (struct ib_sa_mcmember_data *)req->sa_mad.data;···690690 u8 cur_join_state;691691692692 resp_join_state = ((struct ib_sa_mcmember_data *)693693- group->response_sa_mad.data)->scope_join_state & 7;694694- cur_join_state = group->rec.scope_join_state & 7;693693+ group->response_sa_mad.data)->scope_join_state & 0xf;694694+ cur_join_state = group->rec.scope_join_state & 0xf;695695696696 if (method == IB_MGMT_METHOD_GET_RESP) {697697 /* successfull join */···710710 req = list_first_entry(&group->pending_list, struct mcast_req,711711 group_list);712712 sa_data = (struct ib_sa_mcmember_data *)req->sa_mad.data;713713- req_join_state = sa_data->scope_join_state & 0x7;713713+ req_join_state = sa_data->scope_join_state & 0xf;714714715715 /* For a leave request, we will immediately answer the VF, and716716 * update our internal counters. The actual leave will be sent
+1-1
drivers/infiniband/hw/mlx4/mlx4_ib.h
···448448 struct workqueue_struct *wq;449449 struct workqueue_struct *ud_wq;450450 spinlock_t ud_lock;451451- __be64 subnet_prefix;451451+ atomic64_t subnet_prefix;452452 __be64 guid_cache[128];453453 struct mlx4_ib_dev *dev;454454 /* the following lock protects both mcg_table and mcg_mgid0_list */
+20-17
drivers/infiniband/hw/mlx4/qp.c
···24932493 sqp->ud_header.grh.flow_label =24942494 ah->av.ib.sl_tclass_flowlabel & cpu_to_be32(0xfffff);24952495 sqp->ud_header.grh.hop_limit = ah->av.ib.hop_limit;24962496- if (is_eth)24962496+ if (is_eth) {24972497 memcpy(sqp->ud_header.grh.source_gid.raw, sgid.raw, 16);24982498- else {24992499- if (mlx4_is_mfunc(to_mdev(ib_dev)->dev)) {25002500- /* When multi-function is enabled, the ib_core gid25012501- * indexes don't necessarily match the hw ones, so25022502- * we must use our own cache */25032503- sqp->ud_header.grh.source_gid.global.subnet_prefix =25042504- to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].25052505- subnet_prefix;25062506- sqp->ud_header.grh.source_gid.global.interface_id =25072507- to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].25082508- guid_cache[ah->av.ib.gid_index];25092509- } else25102510- ib_get_cached_gid(ib_dev,25112511- be32_to_cpu(ah->av.ib.port_pd) >> 24,25122512- ah->av.ib.gid_index,25132513- &sqp->ud_header.grh.source_gid, NULL);24982498+ } else {24992499+ if (mlx4_is_mfunc(to_mdev(ib_dev)->dev)) {25002500+ /* When multi-function is enabled, the ib_core gid25012501+ * indexes don't necessarily match the hw ones, so25022502+ * we must use our own cache25032503+ */25042504+ sqp->ud_header.grh.source_gid.global.subnet_prefix =25052505+ cpu_to_be64(atomic64_read(&(to_mdev(ib_dev)->sriov.25062506+ demux[sqp->qp.port - 1].25072507+ subnet_prefix)));25082508+ sqp->ud_header.grh.source_gid.global.interface_id =25092509+ to_mdev(ib_dev)->sriov.demux[sqp->qp.port - 1].25102510+ guid_cache[ah->av.ib.gid_index];25112511+ } else {25122512+ ib_get_cached_gid(ib_dev,25132513+ be32_to_cpu(ah->av.ib.port_pd) >> 24,25142514+ ah->av.ib.gid_index,25152515+ &sqp->ud_header.grh.source_gid, NULL);25162516+ }25142517 }25152518 memcpy(sqp->ud_header.grh.destination_gid.raw,25162519 ah->av.ib.dgid, 16);
···312312 * make a copy of the skb to post to the next qp313313 */314314 skb_copy = (mce->qp_list.next != &mcg->qp_list) ?315315- skb_clone(skb, GFP_KERNEL) : NULL;315315+ skb_clone(skb, GFP_ATOMIC) : NULL;316316317317 pkt->qp = qp;318318 rxe_add_ref(qp);
+44-13
drivers/infiniband/sw/rxe/rxe_req.c
···511511}512512513513static void update_wqe_state(struct rxe_qp *qp,514514- struct rxe_send_wqe *wqe,515515- struct rxe_pkt_info *pkt,516516- enum wqe_state *prev_state)514514+ struct rxe_send_wqe *wqe,515515+ struct rxe_pkt_info *pkt)517516{518518- enum wqe_state prev_state_ = wqe->state;519519-520517 if (pkt->mask & RXE_END_MASK) {521518 if (qp_type(qp) == IB_QPT_RC)522519 wqe->state = wqe_state_pending;523520 } else {524521 wqe->state = wqe_state_processing;525522 }526526-527527- *prev_state = prev_state_;528523}529524530530-static void update_state(struct rxe_qp *qp, struct rxe_send_wqe *wqe,531531- struct rxe_pkt_info *pkt, int payload)525525+static void update_wqe_psn(struct rxe_qp *qp,526526+ struct rxe_send_wqe *wqe,527527+ struct rxe_pkt_info *pkt,528528+ int payload)532529{533530 /* number of packets left to send including current one */534531 int num_pkt = (wqe->dma.resid + payload + qp->mtu - 1) / qp->mtu;···543546 qp->req.psn = (wqe->first_psn + num_pkt) & BTH_PSN_MASK;544547 else545548 qp->req.psn = (qp->req.psn + 1) & BTH_PSN_MASK;549549+}546550551551+static void save_state(struct rxe_send_wqe *wqe,552552+ struct rxe_qp *qp,553553+ struct rxe_send_wqe *rollback_wqe,554554+ struct rxe_qp *rollback_qp)555555+{556556+ rollback_wqe->state = wqe->state;557557+ rollback_wqe->first_psn = wqe->first_psn;558558+ rollback_wqe->last_psn = wqe->last_psn;559559+ rollback_qp->req.psn = qp->req.psn;560560+}561561+562562+static void rollback_state(struct rxe_send_wqe *wqe,563563+ struct rxe_qp *qp,564564+ struct rxe_send_wqe *rollback_wqe,565565+ struct rxe_qp *rollback_qp)566566+{567567+ wqe->state = rollback_wqe->state;568568+ wqe->first_psn = rollback_wqe->first_psn;569569+ wqe->last_psn = rollback_wqe->last_psn;570570+ qp->req.psn = rollback_qp->req.psn;571571+}572572+573573+static void update_state(struct rxe_qp *qp, struct rxe_send_wqe *wqe,574574+ struct rxe_pkt_info *pkt, int payload)575575+{547576 qp->req.opcode = pkt->opcode;548548-549577550578 if (pkt->mask & RXE_END_MASK)551579 qp->req.wqe_index = next_index(qp->sq.queue, qp->req.wqe_index);···593571 int mtu;594572 int opcode;595573 int ret;596596- enum wqe_state prev_state;574574+ struct rxe_qp rollback_qp;575575+ struct rxe_send_wqe rollback_wqe;597576598577next_wqe:599578 if (unlikely(!qp->valid || qp->req.state == QP_STATE_ERROR))···711688 goto err;712689 }713690714714- update_wqe_state(qp, wqe, &pkt, &prev_state);691691+ /*692692+ * To prevent a race on wqe access between requester and completer,693693+ * wqe members state and psn need to be set before calling694694+ * rxe_xmit_packet().695695+ * Otherwise, completer might initiate an unjustified retry flow.696696+ */697697+ save_state(wqe, qp, &rollback_wqe, &rollback_qp);698698+ update_wqe_state(qp, wqe, &pkt);699699+ update_wqe_psn(qp, wqe, &pkt, payload);715700 ret = rxe_xmit_packet(to_rdev(qp->ibqp.device), qp, &pkt, skb);716701 if (ret) {717702 qp->need_req_skb = 1;718703 kfree_skb(skb);719704720720- wqe->state = prev_state;705705+ rollback_state(wqe, qp, &rollback_wqe, &rollback_qp);721706722707 if (ret == -EAGAIN) {723708 rxe_run_task(&qp->req.task, 1);
···11611161 }1162116211631163 if (level == IPOIB_FLUSH_LIGHT) {11641164+ int oper_up;11641165 ipoib_mark_paths_invalid(dev);11661166+ /* Set IPoIB operation as down to prevent races between:11671167+ * the flush flow which leaves MCG and on the fly joins11681168+ * which can happen during that time. mcast restart task11691169+ * should deal with join requests we missed.11701170+ */11711171+ oper_up = test_and_clear_bit(IPOIB_FLAG_OPER_UP, &priv->flags);11651172 ipoib_mcast_dev_flush(dev);11731173+ if (oper_up)11741174+ set_bit(IPOIB_FLAG_OPER_UP, &priv->flags);11661175 ipoib_flush_ah(dev);11671176 }11681177
···7610761076117611int md_setup_cluster(struct mddev *mddev, int nodes)76127612{76137613- int err;76147614-76157615- err = request_module("md-cluster");76167616- if (err) {76177617- pr_err("md-cluster module not found.\n");76187618- return -ENOENT;76197619- }76207620-76137613+ if (!md_cluster_ops)76147614+ request_module("md-cluster");76217615 spin_lock(&pers_lock);76167616+ /* ensure module won't be unloaded */76227617 if (!md_cluster_ops || !try_module_get(md_cluster_mod)) {76187618+ pr_err("can't find md-cluster module or get it's reference.\n");76237619 spin_unlock(&pers_lock);76247620 return -ENOENT;76257621 }
+15-31
drivers/md/raid5-cache.c
···9696 spinlock_t no_space_stripes_lock;97979898 bool need_cache_flush;9999- bool in_teardown;10099};101100102101/*···703704704705 mddev = log->rdev->mddev;705706 /*706706- * This is to avoid a deadlock. r5l_quiesce holds reconfig_mutex and707707- * wait for this thread to finish. This thread waits for708708- * MD_CHANGE_PENDING clear, which is supposed to be done in709709- * md_check_recovery(). md_check_recovery() tries to get710710- * reconfig_mutex. Since r5l_quiesce already holds the mutex,711711- * md_check_recovery() fails, so the PENDING never get cleared. The712712- * in_teardown check workaround this issue.707707+ * Discard could zero data, so before discard we must make sure708708+ * superblock is updated to new log tail. Updating superblock (either709709+ * directly call md_update_sb() or depend on md thread) must hold710710+ * reconfig mutex. On the other hand, raid5_quiesce is called with711711+ * reconfig_mutex hold. The first step of raid5_quiesce() is waitting712712+ * for all IO finish, hence waitting for reclaim thread, while reclaim713713+ * thread is calling this function and waitting for reconfig mutex. So714714+ * there is a deadlock. We workaround this issue with a trylock.715715+ * FIXME: we could miss discard if we can't take reconfig mutex713716 */714714- if (!log->in_teardown) {715715- set_mask_bits(&mddev->flags, 0,716716- BIT(MD_CHANGE_DEVS) | BIT(MD_CHANGE_PENDING));717717- md_wakeup_thread(mddev->thread);718718- wait_event(mddev->sb_wait,719719- !test_bit(MD_CHANGE_PENDING, &mddev->flags) ||720720- log->in_teardown);721721- /*722722- * r5l_quiesce could run after in_teardown check and hold723723- * mutex first. Superblock might get updated twice.724724- */725725- if (log->in_teardown)726726- md_update_sb(mddev, 1);727727- } else {728728- WARN_ON(!mddev_is_locked(mddev));729729- md_update_sb(mddev, 1);730730- }717717+ set_mask_bits(&mddev->flags, 0,718718+ BIT(MD_CHANGE_DEVS) | BIT(MD_CHANGE_PENDING));719719+ if (!mddev_trylock(mddev))720720+ return;721721+ md_update_sb(mddev, 1);722722+ mddev_unlock(mddev);731723732724 /* discard IO error really doesn't matter, ignore it */733725 if (log->last_checkpoint < end) {···817827 if (!log || state == 2)818828 return;819829 if (state == 0) {820820- log->in_teardown = 0;821830 /*822831 * This is a special case for hotadd. In suspend, the array has823832 * no journal. In resume, journal is initialized as well as the···827838 log->reclaim_thread = md_register_thread(r5l_reclaim_thread,828839 log->rdev->mddev, "reclaim");829840 } else if (state == 1) {830830- /*831831- * at this point all stripes are finished, so io_unit is at832832- * least in STRIPE_END state833833- */834834- log->in_teardown = 1;835841 /* make sure r5l_write_super_and_discard_space exits */836842 mddev = log->rdev->mddev;837843 wake_up(&mddev->sb_wait);
+12-2
drivers/md/raid5.c
···24232423 }24242424 }24252425 rdev_dec_pending(rdev, conf->mddev);24262426+ bio_reset(bi);24262427 clear_bit(R5_LOCKED, &sh->dev[i].flags);24272428 set_bit(STRIPE_HANDLE, &sh->state);24282429 raid5_release_stripe(sh);24292429- bio_reset(bi);24302430}2431243124322432static void raid5_end_write_request(struct bio *bi)···24982498 if (sh->batch_head && bi->bi_error && !replacement)24992499 set_bit(STRIPE_BATCH_ERR, &sh->batch_head->state);2500250025012501+ bio_reset(bi);25012502 if (!test_and_clear_bit(R5_DOUBLE_LOCKED, &sh->dev[i].flags))25022503 clear_bit(R5_LOCKED, &sh->dev[i].flags);25032504 set_bit(STRIPE_HANDLE, &sh->state);···2506250525072506 if (sh->batch_head && sh != sh->batch_head)25082507 raid5_release_stripe(sh->batch_head);25092509- bio_reset(bi);25102508}2511250925122510static void raid5_build_block(struct stripe_head *sh, int i, int previous)···66396639 }6640664066416641 conf->min_nr_stripes = NR_STRIPES;66426642+ if (mddev->reshape_position != MaxSector) {66436643+ int stripes = max_t(int,66446644+ ((mddev->chunk_sectors << 9) / STRIPE_SIZE) * 4,66456645+ ((mddev->new_chunk_sectors << 9) / STRIPE_SIZE) * 4);66466646+ conf->min_nr_stripes = max(NR_STRIPES, stripes);66476647+ if (conf->min_nr_stripes != NR_STRIPES)66486648+ printk(KERN_INFO66496649+ "md/raid:%s: force stripe size %d for reshape\n",66506650+ mdname(mddev), conf->min_nr_stripes);66516651+ }66426652 memory = conf->min_nr_stripes * (sizeof(struct stripe_head) +66436653 max_disks * ((sizeof(struct bio) + PAGE_SIZE))) / 1024;66446654 atomic_set(&conf->empty_inactive_list_nr, NR_STRIPE_HASH_LOCKS);
+10-8
drivers/mmc/host/omap.c
···1016101610171017 /* Only reconfigure if we have a different burst size */10181018 if (*bp != burst) {10191019- struct dma_slave_config cfg;10201020-10211021- cfg.src_addr = host->phys_base + OMAP_MMC_REG(host, DATA);10221022- cfg.dst_addr = host->phys_base + OMAP_MMC_REG(host, DATA);10231023- cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;10241024- cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES;10251025- cfg.src_maxburst = burst;10261026- cfg.dst_maxburst = burst;10191019+ struct dma_slave_config cfg = {10201020+ .src_addr = host->phys_base +10211021+ OMAP_MMC_REG(host, DATA),10221022+ .dst_addr = host->phys_base +10231023+ OMAP_MMC_REG(host, DATA),10241024+ .src_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES,10251025+ .dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES,10261026+ .src_maxburst = burst,10271027+ .dst_maxburst = burst,10281028+ };1027102910281030 if (dmaengine_slave_config(c, &cfg))10291031 goto use_pio;
+8-8
drivers/mmc/host/omap_hsmmc.c
···14091409static int omap_hsmmc_setup_dma_transfer(struct omap_hsmmc_host *host,14101410 struct mmc_request *req)14111411{14121412- struct dma_slave_config cfg;14131412 struct dma_async_tx_descriptor *tx;14141413 int ret = 0, i;14151414 struct mmc_data *data = req->data;14161415 struct dma_chan *chan;14161416+ struct dma_slave_config cfg = {14171417+ .src_addr = host->mapbase + OMAP_HSMMC_DATA,14181418+ .dst_addr = host->mapbase + OMAP_HSMMC_DATA,14191419+ .src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES,14201420+ .dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES,14211421+ .src_maxburst = data->blksz / 4,14221422+ .dst_maxburst = data->blksz / 4,14231423+ };1417142414181425 /* Sanity check: all the SG entries must be aligned by block size. */14191426 for (i = 0; i < data->sg_len; i++) {···14391432 BUG_ON(host->dma_ch != -1);1440143314411434 chan = omap_hsmmc_get_dma_chan(host, data);14421442-14431443- cfg.src_addr = host->mapbase + OMAP_HSMMC_DATA;14441444- cfg.dst_addr = host->mapbase + OMAP_HSMMC_DATA;14451445- cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;14461446- cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;14471447- cfg.src_maxburst = data->blksz / 4;14481448- cfg.dst_maxburst = data->blksz / 4;1449143514501436 ret = dmaengine_slave_config(chan, &cfg);14511437 if (ret)
+14-1
drivers/mmc/host/sdhci-st.c
···28282929struct st_mmc_platform_data {3030 struct reset_control *rstc;3131+ struct clk *icnclk;3132 void __iomem *top_ioaddr;3233};3334···354353 struct sdhci_host *host;355354 struct st_mmc_platform_data *pdata;356355 struct sdhci_pltfm_host *pltfm_host;357357- struct clk *clk;356356+ struct clk *clk, *icnclk;358357 int ret = 0;359358 u16 host_version;360359 struct resource *res;···365364 dev_err(&pdev->dev, "Peripheral clk not found\n");366365 return PTR_ERR(clk);367366 }367367+368368+ /* ICN clock isn't compulsory, but use it if it's provided. */369369+ icnclk = devm_clk_get(&pdev->dev, "icn");370370+ if (IS_ERR(icnclk))371371+ icnclk = NULL;368372369373 rstc = devm_reset_control_get(&pdev->dev, NULL);370374 if (IS_ERR(rstc))···395389 }396390397391 clk_prepare_enable(clk);392392+ clk_prepare_enable(icnclk);398393399394 /* Configure the FlashSS Top registers for setting eMMC TX/RX delay */400395 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,···407400 }408401409402 pltfm_host->clk = clk;403403+ pdata->icnclk = icnclk;410404411405 /* Configure the Arasan HC inside the flashSS */412406 st_mmcss_cconfig(np, host);···430422 return 0;431423432424err_out:425425+ clk_disable_unprepare(icnclk);433426 clk_disable_unprepare(clk);434427err_of:435428 sdhci_pltfm_free(pdev);···450441 int ret;451442452443 ret = sdhci_pltfm_unregister(pdev);444444+445445+ clk_disable_unprepare(pdata->icnclk);453446454447 if (rstc)455448 reset_control_assert(rstc);···473462 if (pdata->rstc)474463 reset_control_assert(pdata->rstc);475464465465+ clk_disable_unprepare(pdata->icnclk);476466 clk_disable_unprepare(pltfm_host->clk);477467out:478468 return ret;···487475 struct device_node *np = dev->of_node;488476489477 clk_prepare_enable(pltfm_host->clk);478478+ clk_prepare_enable(pdata->icnclk);490479491480 if (pdata->rstc)492481 reset_control_deassert(pdata->rstc);
+4-3
drivers/net/bonding/bond_main.c
···13411341 slave_dev->name);13421342 }1343134313441344- /* already enslaved */13451345- if (slave_dev->flags & IFF_SLAVE) {13461346- netdev_dbg(bond_dev, "Error: Device was already enslaved\n");13441344+ /* already in-use? */13451345+ if (netdev_is_rx_handler_busy(slave_dev)) {13461346+ netdev_err(bond_dev,13471347+ "Error: Device is in use and cannot be enslaved\n");13471348 return -EBUSY;13481349 }13491350
+15-4
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
···772772 (bp->common.bc_ver & 0xff00) >> 8,773773 (bp->common.bc_ver & 0xff));774774775775+ if (pci_channel_offline(bp->pdev)) {776776+ BNX2X_ERR("Cannot dump MCP info while in PCI error\n");777777+ return;778778+ }779779+775780 val = REG_RD(bp, MCP_REG_MCPR_CPU_PROGRAM_COUNTER);776781 if (val == REG_RD(bp, MCP_REG_MCPR_CPU_PROGRAM_COUNTER))777782 BNX2X_ERR("%s" "MCP PC at 0x%x\n", lvl, val);···94209415 /* Release IRQs */94219416 bnx2x_free_irq(bp);9422941794239423- /* Reset the chip */94249424- rc = bnx2x_reset_hw(bp, reset_code);94259425- if (rc)94269426- BNX2X_ERR("HW_RESET failed\n");94189418+ /* Reset the chip, unless PCI function is offline. If we reach this94199419+ * point following a PCI error handling, it means device is really94209420+ * in a bad state and we're about to remove it, so reset the chip94219421+ * is not a good idea.94229422+ */94239423+ if (!pci_channel_offline(bp->pdev)) {94249424+ rc = bnx2x_reset_hw(bp, reset_code);94259425+ if (rc)94269426+ BNX2X_ERR("HW_RESET failed\n");94279427+ }9427942894289429 /* Report UNLOAD_DONE to MCP */94299430 bnx2x_send_unload_done(bp, keep_link);
···1401214012 if ((ec->rx_coalesce_usecs > MAX_RXCOL_TICKS) ||1401314013 (!ec->rx_coalesce_usecs) ||1401414014 (ec->tx_coalesce_usecs > MAX_TXCOL_TICKS) ||1401514015+ (!ec->tx_coalesce_usecs) ||1401514016 (ec->rx_max_coalesced_frames > MAX_RXMAX_FRAMES) ||1401614017 (ec->tx_max_coalesced_frames > MAX_TXMAX_FRAMES) ||1401714018 (ec->rx_coalesce_usecs_irq > max_rxcoal_tick_int) ||···1402114020 (ec->tx_max_coalesced_frames_irq > MAX_TXCOAL_MAXF_INT) ||1402214021 (ec->stats_block_coalesce_usecs > max_stat_coal_ticks) ||1402314022 (ec->stats_block_coalesce_usecs < min_stat_coal_ticks))1402414024- return -EINVAL;1402514025-1402614026- /* No rx interrupts will be generated if both are zero */1402714027- if ((ec->rx_coalesce_usecs == 0) &&1402814028- (ec->rx_max_coalesced_frames == 0))1402914029- return -EINVAL;1403014030-1403114031- /* No tx interrupts will be generated if both are zero */1403214032- if ((ec->tx_coalesce_usecs == 0) &&1403314033- (ec->tx_max_coalesced_frames == 0))1403414023 return -EINVAL;14035140241403614025 /* Only copy relevant parameters, ignore all others. */
+23
drivers/net/ethernet/cadence/macb.c
···13231323 return 0;13241324}1325132513261326+static inline int macb_clear_csum(struct sk_buff *skb)13271327+{13281328+ /* no change for packets without checksum offloading */13291329+ if (skb->ip_summed != CHECKSUM_PARTIAL)13301330+ return 0;13311331+13321332+ /* make sure we can modify the header */13331333+ if (unlikely(skb_cow_head(skb, 0)))13341334+ return -1;13351335+13361336+ /* initialize checksum field13371337+ * This is required - at least for Zynq, which otherwise calculates13381338+ * wrong UDP header checksums for UDP packets with UDP data len <=213391339+ */13401340+ *(__sum16 *)(skb_checksum_start(skb) + skb->csum_offset) = 0;13411341+ return 0;13421342+}13431343+13261344static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)13271345{13281346 u16 queue_index = skb_get_queue_mapping(skb);···13781360 netdev_dbg(bp->dev, "tx_head = %u, tx_tail = %u\n",13791361 queue->tx_head, queue->tx_tail);13801362 return NETDEV_TX_BUSY;13631363+ }13641364+13651365+ if (macb_clear_csum(skb)) {13661366+ dev_kfree_skb_any(skb);13671367+ return NETDEV_TX_OK;13811368 }1382136913831370 /* Map socket buffer for DMA transfer */
···251251 int lmac;252252 u64 lmac_cfg;253253254254- /* Max value that can be set is 60 */255255- if (size > 60)256256- size = 60;254254+ /* There is a issue in HW where-in while sending GSO sized255255+ * pkts as part of TSO, if pkt len falls below this size256256+ * NIC will zero PAD packet and also updates IP total length.257257+ * Hence set this value to lessthan min pkt size of MAC+IP+TCP258258+ * headers, BGX will do the padding to transmit 64 byte pkt.259259+ */260260+ if (size > 52)261261+ size = 52;257262258263 for (lmac = 0; lmac < (MAX_BGX_PER_CN88XX * MAX_LMAC_PER_BGX); lmac++) {259264 lmac_cfg = nic_reg_read(nic, NIC_PF_LMAC_0_7_CFG | (lmac << 3));
+15-5
drivers/net/ethernet/cavium/thunder/nicvf_main.c
···513513 struct nicvf *nic = netdev_priv(netdev);514514 struct snd_queue *sq;515515 struct sq_hdr_subdesc *hdr;516516+ struct sq_hdr_subdesc *tso_sqe;516517517518 sq = &nic->qs->sq[cqe_tx->sq_idx];518519···528527529528 nicvf_check_cqe_tx_errs(nic, cq, cqe_tx);530529 skb = (struct sk_buff *)sq->skbuff[cqe_tx->sqe_ptr];531531- /* For TSO offloaded packets only one SQE will have a valid SKB */532530 if (skb) {531531+ /* Check for dummy descriptor used for HW TSO offload on 88xx */532532+ if (hdr->dont_send) {533533+ /* Get actual TSO descriptors and free them */534534+ tso_sqe =535535+ (struct sq_hdr_subdesc *)GET_SQ_DESC(sq, hdr->rsvd2);536536+ nicvf_put_sq_desc(sq, tso_sqe->subdesc_cnt + 1);537537+ }533538 nicvf_put_sq_desc(sq, hdr->subdesc_cnt + 1);534539 prefetch(skb);535540 dev_consume_skb_any(skb);536541 sq->skbuff[cqe_tx->sqe_ptr] = (u64)NULL;537542 } else {538538- /* In case of HW TSO, HW sends a CQE for each segment of a TSO539539- * packet instead of a single CQE for the whole TSO packet540540- * transmitted. Each of this CQE points to the same SQE, so541541- * avoid freeing same SQE multiple times.543543+ /* In case of SW TSO on 88xx, only last segment will have544544+ * a SKB attached, so just free SQEs here.542545 */543546 if (!nic->hw_tso)544547 nicvf_put_sq_desc(sq, hdr->subdesc_cnt + 1);···15071502 struct net_device *netdev;15081503 struct nicvf *nic;15091504 int err, qcount;15051505+ u16 sdevid;1510150615111507 err = pci_enable_device(pdev);15121508 if (err) {···1580157415811575 if (!pass1_silicon(nic->pdev))15821576 nic->hw_tso = true;15771577+15781578+ pci_read_config_word(nic->pdev, PCI_SUBSYSTEM_ID, &sdevid);15791579+ if (sdevid == 0xA134)15801580+ nic->t88 = true;1583158115841582 /* Check if this VF is in QS only mode */15851583 if (nic->sqs_mode)
···938938 return num_edescs + sh->gso_segs;939939}940940941941+#define POST_CQE_DESC_COUNT 2942942+941943/* Get the number of SQ descriptors needed to xmit this skb */942944static int nicvf_sq_subdesc_required(struct nicvf *nic, struct sk_buff *skb)943945{···949947 subdesc_cnt = nicvf_tso_count_subdescs(skb);950948 return subdesc_cnt;951949 }950950+951951+ /* Dummy descriptors to get TSO pkt completion notification */952952+ if (nic->t88 && nic->hw_tso && skb_shinfo(skb)->gso_size)953953+ subdesc_cnt += POST_CQE_DESC_COUNT;952954953955 if (skb_shinfo(skb)->nr_frags)954956 subdesc_cnt += skb_shinfo(skb)->nr_frags;···971965 struct sq_hdr_subdesc *hdr;972966973967 hdr = (struct sq_hdr_subdesc *)GET_SQ_DESC(sq, qentry);974974- sq->skbuff[qentry] = (u64)skb;975975-976968 memset(hdr, 0, SND_QUEUE_DESC_SIZE);977969 hdr->subdesc_type = SQ_DESC_TYPE_HEADER;978978- /* Enable notification via CQE after processing SQE */979979- hdr->post_cqe = 1;980980- /* No of subdescriptors following this */981981- hdr->subdesc_cnt = subdesc_cnt;970970+971971+ if (nic->t88 && nic->hw_tso && skb_shinfo(skb)->gso_size) {972972+ /* post_cqe = 0, to avoid HW posting a CQE for every TSO973973+ * segment transmitted on 88xx.974974+ */975975+ hdr->subdesc_cnt = subdesc_cnt - POST_CQE_DESC_COUNT;976976+ } else {977977+ sq->skbuff[qentry] = (u64)skb;978978+ /* Enable notification via CQE after processing SQE */979979+ hdr->post_cqe = 1;980980+ /* No of subdescriptors following this */981981+ hdr->subdesc_cnt = subdesc_cnt;982982+ }982983 hdr->tot_len = len;983984984985 /* Offload checksum calculation to HW */···10341021 gather->ld_type = NIC_SEND_LD_TYPE_E_LDD;10351022 gather->size = size;10361023 gather->addr = data;10241024+}10251025+10261026+/* Add HDR + IMMEDIATE subdescriptors right after descriptors of a TSO10271027+ * packet so that a CQE is posted as a notifation for transmission of10281028+ * TSO packet.10291029+ */10301030+static inline void nicvf_sq_add_cqe_subdesc(struct snd_queue *sq, int qentry,10311031+ int tso_sqe, struct sk_buff *skb)10321032+{10331033+ struct sq_imm_subdesc *imm;10341034+ struct sq_hdr_subdesc *hdr;10351035+10361036+ sq->skbuff[qentry] = (u64)skb;10371037+10381038+ hdr = (struct sq_hdr_subdesc *)GET_SQ_DESC(sq, qentry);10391039+ memset(hdr, 0, SND_QUEUE_DESC_SIZE);10401040+ hdr->subdesc_type = SQ_DESC_TYPE_HEADER;10411041+ /* Enable notification via CQE after processing SQE */10421042+ hdr->post_cqe = 1;10431043+ /* There is no packet to transmit here */10441044+ hdr->dont_send = 1;10451045+ hdr->subdesc_cnt = POST_CQE_DESC_COUNT - 1;10461046+ hdr->tot_len = 1;10471047+ /* Actual TSO header SQE index, needed for cleanup */10481048+ hdr->rsvd2 = tso_sqe;10491049+10501050+ qentry = nicvf_get_nxt_sqentry(sq, qentry);10511051+ imm = (struct sq_imm_subdesc *)GET_SQ_DESC(sq, qentry);10521052+ memset(imm, 0, SND_QUEUE_DESC_SIZE);10531053+ imm->subdesc_type = SQ_DESC_TYPE_IMMEDIATE;10541054+ imm->len = 1;10371055}1038105610391057/* Segment a TSO packet into 'gso_size' segments and append···11401096int nicvf_sq_append_skb(struct nicvf *nic, struct sk_buff *skb)11411097{11421098 int i, size;11431143- int subdesc_cnt;10991099+ int subdesc_cnt, tso_sqe = 0;11441100 int sq_num, qentry;11451101 struct queue_set *qs;11461102 struct snd_queue *sq;···11751131 /* Add SQ header subdesc */11761132 nicvf_sq_add_hdr_subdesc(nic, sq, qentry, subdesc_cnt - 1,11771133 skb, skb->len);11341134+ tso_sqe = qentry;1178113511791136 /* Add SQ gather subdescs */11801137 qentry = nicvf_get_nxt_sqentry(sq, qentry);···11991154 }1200115512011156doorbell:11571157+ if (nic->t88 && skb_shinfo(skb)->gso_size) {11581158+ qentry = nicvf_get_nxt_sqentry(sq, qentry);11591159+ nicvf_sq_add_cqe_subdesc(sq, qentry, tso_sqe, skb);11601160+ }11611161+12021162 /* make sure all memory stores are done before ringing doorbell */12031163 smp_wmb();12041164
+11-4
drivers/net/ethernet/intel/i40e/i40e_main.c
···51135113 DCB_CAP_DCBX_VER_IEEE;5114511451155115 pf->flags |= I40E_FLAG_DCB_CAPABLE;51165116- /* Enable DCB tagging only when more than one TC */51165116+ /* Enable DCB tagging only when more than one TC51175117+ * or explicitly disable if only one TC51185118+ */51175119 if (i40e_dcb_get_num_tc(&hw->local_dcbx_config) > 1)51185120 pf->flags |= I40E_FLAG_DCB_ENABLED;51215121+ else51225122+ pf->flags &= ~I40E_FLAG_DCB_ENABLED;51195123 dev_dbg(&pf->pdev->dev,51205124 "DCBX offload is supported for this PF.\n");51215125 }···57205716 u8 type;5721571757225718 /* Not DCB capable or capability disabled */57235723- if (!(pf->flags & I40E_FLAG_DCB_CAPABLE))57195719+ if (!(pf->flags & I40E_FLAG_DCB_ENABLED))57245720 return ret;5725572157265722 /* Ignore if event is not for Nearest Bridge */···79007896#endif79017897 I40E_FLAG_RSS_ENABLED |79027898 I40E_FLAG_DCB_CAPABLE |78997899+ I40E_FLAG_DCB_ENABLED |79037900 I40E_FLAG_SRIOV_ENABLED |79047901 I40E_FLAG_FD_SB_ENABLED |79057902 I40E_FLAG_FD_ATR_ENABLED |···1050710502 I40E_FLAG_FD_SB_ENABLED |1050810503 I40E_FLAG_FD_ATR_ENABLED |1050910504 I40E_FLAG_DCB_CAPABLE |1050510505+ I40E_FLAG_DCB_ENABLED |1051010506 I40E_FLAG_SRIOV_ENABLED |1051110507 I40E_FLAG_VMDQ_ENABLED);1051210508 } else if (!(pf->flags & (I40E_FLAG_RSS_ENABLED |···1053110525 /* Not enough queues for all TCs */1053210526 if ((pf->flags & I40E_FLAG_DCB_CAPABLE) &&1053310527 (queues_left < I40E_MAX_TRAFFIC_CLASS)) {1053410534- pf->flags &= ~I40E_FLAG_DCB_CAPABLE;1052810528+ pf->flags &= ~(I40E_FLAG_DCB_CAPABLE |1052910529+ I40E_FLAG_DCB_ENABLED);1053510530 dev_info(&pf->pdev->dev, "not enough queues for DCB. DCB is disabled.\n");1053610531 }1053710532 pf->num_lan_qps = max_t(int, pf->rss_size_max,···1092910922 err = i40e_init_pf_dcb(pf);1093010923 if (err) {1093110924 dev_info(&pdev->dev, "DCB init failed %d, disabled\n", err);1093210932- pf->flags &= ~I40E_FLAG_DCB_CAPABLE;1092510925+ pf->flags &= ~(I40E_FLAG_DCB_CAPABLE & I40E_FLAG_DCB_ENABLED);1093310926 /* Continue without DCB enabled */1093410927 }1093510928#endif /* CONFIG_I40E_DCB */
+42-40
drivers/net/ethernet/mediatek/mtk_eth_soc.c
···5050 MTK_ETHTOOL_STAT(rx_flow_control_packets),5151};52525353+static const char * const mtk_clks_source_name[] = {5454+ "ethif", "esw", "gp1", "gp2"5555+};5656+5357void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg)5458{5559 __raw_writel(val, eth->base + reg);···295291static int mtk_mdio_init(struct mtk_eth *eth)296292{297293 struct device_node *mii_np;298298- int err;294294+ int ret;299295300296 mii_np = of_get_child_by_name(eth->dev->of_node, "mdio-bus");301297 if (!mii_np) {···304300 }305301306302 if (!of_device_is_available(mii_np)) {307307- err = 0;303303+ ret = -ENODEV;308304 goto err_put_node;309305 }310306311311- eth->mii_bus = mdiobus_alloc();307307+ eth->mii_bus = devm_mdiobus_alloc(eth->dev);312308 if (!eth->mii_bus) {313313- err = -ENOMEM;309309+ ret = -ENOMEM;314310 goto err_put_node;315311 }316312···321317 eth->mii_bus->parent = eth->dev;322318323319 snprintf(eth->mii_bus->id, MII_BUS_ID_SIZE, "%s", mii_np->name);324324- err = of_mdiobus_register(eth->mii_bus, mii_np);325325- if (err)326326- goto err_free_bus;327327-328328- return 0;329329-330330-err_free_bus:331331- mdiobus_free(eth->mii_bus);320320+ ret = of_mdiobus_register(eth->mii_bus, mii_np);332321333322err_put_node:334323 of_node_put(mii_np);335335- eth->mii_bus = NULL;336336- return err;324324+ return ret;337325}338326339327static void mtk_mdio_cleanup(struct mtk_eth *eth)···334338 return;335339336340 mdiobus_unregister(eth->mii_bus);337337- of_node_put(eth->mii_bus->dev.of_node);338338- mdiobus_free(eth->mii_bus);339341}340342341343static inline void mtk_irq_disable(struct mtk_eth *eth, u32 mask)···582588 dma_addr_t mapped_addr;583589 unsigned int nr_frags;584590 int i, n_desc = 1;585585- u32 txd4 = 0;591591+ u32 txd4 = 0, fport;586592587593 itxd = ring->next_free;588594 if (itxd == ring->last_free)589595 return -ENOMEM;590596591597 /* set the forward port */592592- txd4 |= (mac->id + 1) << TX_DMA_FPORT_SHIFT;598598+ fport = (mac->id + 1) << TX_DMA_FPORT_SHIFT;599599+ txd4 |= fport;593600594601 tx_buf = mtk_desc_to_tx_buf(ring, itxd);595602 memset(tx_buf, 0, sizeof(*tx_buf));···648653 WRITE_ONCE(txd->txd3, (TX_DMA_SWC |649654 TX_DMA_PLEN0(frag_map_size) |650655 last_frag * TX_DMA_LS0));651651- WRITE_ONCE(txd->txd4, 0);656656+ WRITE_ONCE(txd->txd4, fport);652657653658 tx_buf->skb = (struct sk_buff *)MTK_DMA_DUMMY_DESC;654659 tx_buf = mtk_desc_to_tx_buf(ring, txd);···860865 /* receive data */861866 skb = build_skb(data, ring->frag_size);862867 if (unlikely(!skb)) {863863- put_page(virt_to_head_page(new_data));868868+ skb_free_frag(new_data);864869 netdev->stats.rx_dropped++;865870 goto release_desc;866871 }···15011506 struct mtk_eth *eth = mac->hw;1502150715031508 phy_disconnect(mac->phy_dev);15041504- mtk_mdio_cleanup(eth);15051509 mtk_irq_disable(eth, ~0);15061506- free_irq(eth->irq[1], dev);15071507- free_irq(eth->irq[2], dev);15081510}1509151115101512static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)···18051813 if (!eth)18061814 return -ENOMEM;1807181518161816+ eth->dev = &pdev->dev;18081817 eth->base = devm_ioremap_resource(&pdev->dev, res);18091818 if (IS_ERR(eth->base))18101819 return PTR_ERR(eth->base);···18401847 return -ENXIO;18411848 }18421849 }18501850+ for (i = 0; i < ARRAY_SIZE(eth->clks); i++) {18511851+ eth->clks[i] = devm_clk_get(eth->dev,18521852+ mtk_clks_source_name[i]);18531853+ if (IS_ERR(eth->clks[i])) {18541854+ if (PTR_ERR(eth->clks[i]) == -EPROBE_DEFER)18551855+ return -EPROBE_DEFER;18561856+ return -ENODEV;18571857+ }18581858+ }1843185918441844- eth->clk_ethif = devm_clk_get(&pdev->dev, "ethif");18451845- eth->clk_esw = devm_clk_get(&pdev->dev, "esw");18461846- eth->clk_gp1 = devm_clk_get(&pdev->dev, "gp1");18471847- eth->clk_gp2 = devm_clk_get(&pdev->dev, "gp2");18481848- if (IS_ERR(eth->clk_esw) || IS_ERR(eth->clk_gp1) ||18491849- IS_ERR(eth->clk_gp2) || IS_ERR(eth->clk_ethif))18501850- return -ENODEV;18601860+ clk_prepare_enable(eth->clks[MTK_CLK_ETHIF]);18611861+ clk_prepare_enable(eth->clks[MTK_CLK_ESW]);18621862+ clk_prepare_enable(eth->clks[MTK_CLK_GP1]);18631863+ clk_prepare_enable(eth->clks[MTK_CLK_GP2]);1851186418521852- clk_prepare_enable(eth->clk_ethif);18531853- clk_prepare_enable(eth->clk_esw);18541854- clk_prepare_enable(eth->clk_gp1);18551855- clk_prepare_enable(eth->clk_gp2);18561856-18571857- eth->dev = &pdev->dev;18581865 eth->msg_enable = netif_msg_init(mtk_msg_level, MTK_DEFAULT_MSG_ENABLE);18591866 INIT_WORK(ð->pending_work, mtk_pending_work);18601867···18961903static int mtk_remove(struct platform_device *pdev)18971904{18981905 struct mtk_eth *eth = platform_get_drvdata(pdev);19061906+ int i;1899190719001900- clk_disable_unprepare(eth->clk_ethif);19011901- clk_disable_unprepare(eth->clk_esw);19021902- clk_disable_unprepare(eth->clk_gp1);19031903- clk_disable_unprepare(eth->clk_gp2);19081908+ /* stop all devices to make sure that dma is properly shut down */19091909+ for (i = 0; i < MTK_MAC_COUNT; i++) {19101910+ if (!eth->netdev[i])19111911+ continue;19121912+ mtk_stop(eth->netdev[i]);19131913+ }19141914+19151915+ clk_disable_unprepare(eth->clks[MTK_CLK_ETHIF]);19161916+ clk_disable_unprepare(eth->clks[MTK_CLK_ESW]);19171917+ clk_disable_unprepare(eth->clks[MTK_CLK_GP1]);19181918+ clk_disable_unprepare(eth->clks[MTK_CLK_GP2]);1904191919051920 netif_napi_del(ð->tx_napi);19061921 netif_napi_del(ð->rx_napi);19071922 mtk_cleanup(eth);19231923+ mtk_mdio_cleanup(eth);19081924 platform_set_drvdata(pdev, NULL);1909192519101926 return 0;
+14-8
drivers/net/ethernet/mediatek/mtk_eth_soc.h
···290290 MTK_TX_FLAGS_PAGE0 = 0x02,291291};292292293293+/* This enum allows us to identify how the clock is defined on the array of the294294+ * clock in the order295295+ */296296+enum mtk_clks_map {297297+ MTK_CLK_ETHIF,298298+ MTK_CLK_ESW,299299+ MTK_CLK_GP1,300300+ MTK_CLK_GP2,301301+ MTK_CLK_MAX302302+};303303+293304/* struct mtk_tx_buf - This struct holds the pointers to the memory pointed at294305 * by the TX descriptor s295306 * @skb: The SKB pointer of the packet being sent···381370 * @scratch_ring: Newer SoCs need memory for a second HW managed TX ring382371 * @phy_scratch_ring: physical address of scratch_ring383372 * @scratch_head: The scratch memory that scratch_ring points to.384384- * @clk_ethif: The ethif clock385385- * @clk_esw: The switch clock386386- * @clk_gp1: The gmac1 clock387387- * @clk_gp2: The gmac2 clock373373+ * @clks: clock array for all clocks required388374 * @mii_bus: If there is a bus we need to create an instance for it389375 * @pending_work: The workqueue used to reset the dma ring390376 */···408400 struct mtk_tx_dma *scratch_ring;409401 dma_addr_t phy_scratch_ring;410402 void *scratch_head;411411- struct clk *clk_ethif;412412- struct clk *clk_esw;413413- struct clk *clk_gp1;414414- struct clk *clk_gp2;403403+ struct clk *clks[MTK_CLK_MAX];404404+415405 struct mii_bus *mii_bus;416406 struct work_struct pending_work;417407};
···10991099 goto err_out_free_bus_2;11001100 }1101110111021102- if (smsc911x_mii_probe(dev) < 0) {11031103- SMSC_WARN(pdata, probe, "Error registering mii bus");11041104- goto err_out_unregister_bus_3;11051105- }11061106-11071102 return 0;1108110311091109-err_out_unregister_bus_3:11101110- mdiobus_unregister(pdata->mii_bus);11111104err_out_free_bus_2:11121105 mdiobus_free(pdata->mii_bus);11131106err_out_1:···15071514 smsc911x_reg_write(pdata, INT_STS, 0xFFFFFFFF);15081515}1509151615171517+static irqreturn_t smsc911x_irqhandler(int irq, void *dev_id)15181518+{15191519+ struct net_device *dev = dev_id;15201520+ struct smsc911x_data *pdata = netdev_priv(dev);15211521+ u32 intsts = smsc911x_reg_read(pdata, INT_STS);15221522+ u32 inten = smsc911x_reg_read(pdata, INT_EN);15231523+ int serviced = IRQ_NONE;15241524+ u32 temp;15251525+15261526+ if (unlikely(intsts & inten & INT_STS_SW_INT_)) {15271527+ temp = smsc911x_reg_read(pdata, INT_EN);15281528+ temp &= (~INT_EN_SW_INT_EN_);15291529+ smsc911x_reg_write(pdata, INT_EN, temp);15301530+ smsc911x_reg_write(pdata, INT_STS, INT_STS_SW_INT_);15311531+ pdata->software_irq_signal = 1;15321532+ smp_wmb();15331533+ serviced = IRQ_HANDLED;15341534+ }15351535+15361536+ if (unlikely(intsts & inten & INT_STS_RXSTOP_INT_)) {15371537+ /* Called when there is a multicast update scheduled and15381538+ * it is now safe to complete the update */15391539+ SMSC_TRACE(pdata, intr, "RX Stop interrupt");15401540+ smsc911x_reg_write(pdata, INT_STS, INT_STS_RXSTOP_INT_);15411541+ if (pdata->multicast_update_pending)15421542+ smsc911x_rx_multicast_update_workaround(pdata);15431543+ serviced = IRQ_HANDLED;15441544+ }15451545+15461546+ if (intsts & inten & INT_STS_TDFA_) {15471547+ temp = smsc911x_reg_read(pdata, FIFO_INT);15481548+ temp |= FIFO_INT_TX_AVAIL_LEVEL_;15491549+ smsc911x_reg_write(pdata, FIFO_INT, temp);15501550+ smsc911x_reg_write(pdata, INT_STS, INT_STS_TDFA_);15511551+ netif_wake_queue(dev);15521552+ serviced = IRQ_HANDLED;15531553+ }15541554+15551555+ if (unlikely(intsts & inten & INT_STS_RXE_)) {15561556+ SMSC_TRACE(pdata, intr, "RX Error interrupt");15571557+ smsc911x_reg_write(pdata, INT_STS, INT_STS_RXE_);15581558+ serviced = IRQ_HANDLED;15591559+ }15601560+15611561+ if (likely(intsts & inten & INT_STS_RSFL_)) {15621562+ if (likely(napi_schedule_prep(&pdata->napi))) {15631563+ /* Disable Rx interrupts */15641564+ temp = smsc911x_reg_read(pdata, INT_EN);15651565+ temp &= (~INT_EN_RSFL_EN_);15661566+ smsc911x_reg_write(pdata, INT_EN, temp);15671567+ /* Schedule a NAPI poll */15681568+ __napi_schedule(&pdata->napi);15691569+ } else {15701570+ SMSC_WARN(pdata, rx_err, "napi_schedule_prep failed");15711571+ }15721572+ serviced = IRQ_HANDLED;15731573+ }15741574+15751575+ return serviced;15761576+}15771577+15101578static int smsc911x_open(struct net_device *dev)15111579{15121580 struct smsc911x_data *pdata = netdev_priv(dev);15131581 unsigned int timeout;15141582 unsigned int temp;15151583 unsigned int intcfg;15841584+ int retval;15851585+ int irq_flags;1516158615171517- /* if the phy is not yet registered, retry later*/15871587+ /* find and start the given phy */15181588 if (!dev->phydev) {15191519- SMSC_WARN(pdata, hw, "phy_dev is NULL");15201520- return -EAGAIN;15891589+ retval = smsc911x_mii_probe(dev);15901590+ if (retval < 0) {15911591+ SMSC_WARN(pdata, probe, "Error starting phy");15921592+ goto out;15931593+ }15211594 }1522159515231596 /* Reset the LAN911x */15241524- if (smsc911x_soft_reset(pdata)) {15971597+ retval = smsc911x_soft_reset(pdata);15981598+ if (retval) {15251599 SMSC_WARN(pdata, hw, "soft reset failed");15261526- return -EIO;16001600+ goto mii_free_out;15271601 }1528160215291603 smsc911x_reg_write(pdata, HW_CFG, 0x00050000);···16461586 pdata->software_irq_signal = 0;16471587 smp_wmb();1648158815891589+ irq_flags = irq_get_trigger_type(dev->irq);15901590+ retval = request_irq(dev->irq, smsc911x_irqhandler,15911591+ irq_flags | IRQF_SHARED, dev->name, dev);15921592+ if (retval) {15931593+ SMSC_WARN(pdata, probe,15941594+ "Unable to claim requested irq: %d", dev->irq);15951595+ goto mii_free_out;15961596+ }15971597+16491598 temp = smsc911x_reg_read(pdata, INT_EN);16501599 temp |= INT_EN_SW_INT_EN_;16511600 smsc911x_reg_write(pdata, INT_EN, temp);···16691600 if (!pdata->software_irq_signal) {16701601 netdev_warn(dev, "ISR failed signaling test (IRQ %d)\n",16711602 dev->irq);16721672- return -ENODEV;16031603+ retval = -ENODEV;16041604+ goto irq_stop_out;16731605 }16741606 SMSC_TRACE(pdata, ifup, "IRQ handler passed test using IRQ %d",16751607 dev->irq);···1716164617171647 netif_start_queue(dev);17181648 return 0;16491649+16501650+irq_stop_out:16511651+ free_irq(dev->irq, dev);16521652+mii_free_out:16531653+ phy_disconnect(dev->phydev);16541654+ dev->phydev = NULL;16551655+out:16561656+ return retval;17191657}1720165817211659/* Entry point for stopping the interface */···17451667 dev->stats.rx_dropped += smsc911x_reg_read(pdata, RX_DROP);17461668 smsc911x_tx_update_txcounters(dev);1747166916701670+ free_irq(dev->irq, dev);16711671+17481672 /* Bring the PHY down */17491749- if (dev->phydev)16731673+ if (dev->phydev) {17501674 phy_stop(dev->phydev);16751675+ phy_disconnect(dev->phydev);16761676+ dev->phydev = NULL;16771677+ }16781678+ netif_carrier_off(dev);1751167917521680 SMSC_TRACE(pdata, ifdown, "Interface stopped");17531681 return 0;···18931809 }1894181018951811 spin_unlock_irqrestore(&pdata->mac_lock, flags);18961896-}18971897-18981898-static irqreturn_t smsc911x_irqhandler(int irq, void *dev_id)18991899-{19001900- struct net_device *dev = dev_id;19011901- struct smsc911x_data *pdata = netdev_priv(dev);19021902- u32 intsts = smsc911x_reg_read(pdata, INT_STS);19031903- u32 inten = smsc911x_reg_read(pdata, INT_EN);19041904- int serviced = IRQ_NONE;19051905- u32 temp;19061906-19071907- if (unlikely(intsts & inten & INT_STS_SW_INT_)) {19081908- temp = smsc911x_reg_read(pdata, INT_EN);19091909- temp &= (~INT_EN_SW_INT_EN_);19101910- smsc911x_reg_write(pdata, INT_EN, temp);19111911- smsc911x_reg_write(pdata, INT_STS, INT_STS_SW_INT_);19121912- pdata->software_irq_signal = 1;19131913- smp_wmb();19141914- serviced = IRQ_HANDLED;19151915- }19161916-19171917- if (unlikely(intsts & inten & INT_STS_RXSTOP_INT_)) {19181918- /* Called when there is a multicast update scheduled and19191919- * it is now safe to complete the update */19201920- SMSC_TRACE(pdata, intr, "RX Stop interrupt");19211921- smsc911x_reg_write(pdata, INT_STS, INT_STS_RXSTOP_INT_);19221922- if (pdata->multicast_update_pending)19231923- smsc911x_rx_multicast_update_workaround(pdata);19241924- serviced = IRQ_HANDLED;19251925- }19261926-19271927- if (intsts & inten & INT_STS_TDFA_) {19281928- temp = smsc911x_reg_read(pdata, FIFO_INT);19291929- temp |= FIFO_INT_TX_AVAIL_LEVEL_;19301930- smsc911x_reg_write(pdata, FIFO_INT, temp);19311931- smsc911x_reg_write(pdata, INT_STS, INT_STS_TDFA_);19321932- netif_wake_queue(dev);19331933- serviced = IRQ_HANDLED;19341934- }19351935-19361936- if (unlikely(intsts & inten & INT_STS_RXE_)) {19371937- SMSC_TRACE(pdata, intr, "RX Error interrupt");19381938- smsc911x_reg_write(pdata, INT_STS, INT_STS_RXE_);19391939- serviced = IRQ_HANDLED;19401940- }19411941-19421942- if (likely(intsts & inten & INT_STS_RSFL_)) {19431943- if (likely(napi_schedule_prep(&pdata->napi))) {19441944- /* Disable Rx interrupts */19451945- temp = smsc911x_reg_read(pdata, INT_EN);19461946- temp &= (~INT_EN_RSFL_EN_);19471947- smsc911x_reg_write(pdata, INT_EN, temp);19481948- /* Schedule a NAPI poll */19491949- __napi_schedule(&pdata->napi);19501950- } else {19511951- SMSC_WARN(pdata, rx_err, "napi_schedule_prep failed");19521952- }19531953- serviced = IRQ_HANDLED;19541954- }19551955-19561956- return serviced;19571812}1958181319591814#ifdef CONFIG_NET_POLL_CONTROLLER···23142291 pdata = netdev_priv(dev);23152292 BUG_ON(!pdata);23162293 BUG_ON(!pdata->ioaddr);23172317- BUG_ON(!dev->phydev);22942294+ WARN_ON(dev->phydev);2318229523192296 SMSC_TRACE(pdata, ifdown, "Stopping driver");2320229723212321- phy_disconnect(dev->phydev);23222298 mdiobus_unregister(pdata->mii_bus);23232299 mdiobus_free(pdata->mii_bus);2324230023252301 unregister_netdev(dev);23262326- free_irq(dev->irq, dev);23272302 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,23282303 "smsc911x-memory");23292304 if (!res)···24062385 struct smsc911x_data *pdata;24072386 struct smsc911x_platform_config *config = dev_get_platdata(&pdev->dev);24082387 struct resource *res;24092409- unsigned int intcfg = 0;24102410- int res_size, irq, irq_flags;23882388+ int res_size, irq;24112389 int retval;2412239024132391 res = platform_get_resource_byname(pdev, IORESOURCE_MEM,···2445242524462426 pdata = netdev_priv(dev);24472427 dev->irq = irq;24482448- irq_flags = irq_get_trigger_type(irq);24492428 pdata->ioaddr = ioremap_nocache(res->start, res_size);2450242924512430 pdata->dev = dev;···24912472 if (retval < 0)24922473 goto out_disable_resources;2493247424942494- /* configure irq polarity and type before connecting isr */24952495- if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH)24962496- intcfg |= INT_CFG_IRQ_POL_;24972497-24982498- if (pdata->config.irq_type == SMSC911X_IRQ_TYPE_PUSH_PULL)24992499- intcfg |= INT_CFG_IRQ_TYPE_;25002500-25012501- smsc911x_reg_write(pdata, INT_CFG, intcfg);25022502-25032503- /* Ensure interrupts are globally disabled before connecting ISR */25042504- smsc911x_disable_irq_chip(dev);25052505-25062506- retval = request_irq(dev->irq, smsc911x_irqhandler,25072507- irq_flags | IRQF_SHARED, dev->name, dev);25082508- if (retval) {25092509- SMSC_WARN(pdata, probe,25102510- "Unable to claim requested irq: %d", dev->irq);25112511- goto out_disable_resources;25122512- }25132513-25142475 netif_carrier_off(dev);25152515-25162516- retval = register_netdev(dev);25172517- if (retval) {25182518- SMSC_WARN(pdata, probe, "Error %i registering device", retval);25192519- goto out_free_irq;25202520- } else {25212521- SMSC_TRACE(pdata, probe,25222522- "Network interface: \"%s\"", dev->name);25232523- }2524247625252477 retval = smsc911x_mii_init(pdev, dev);25262478 if (retval) {25272479 SMSC_WARN(pdata, probe, "Error %i initialising mii", retval);25282528- goto out_unregister_netdev_5;24802480+ goto out_disable_resources;24812481+ }24822482+24832483+ retval = register_netdev(dev);24842484+ if (retval) {24852485+ SMSC_WARN(pdata, probe, "Error %i registering device", retval);24862486+ goto out_disable_resources;24872487+ } else {24882488+ SMSC_TRACE(pdata, probe,24892489+ "Network interface: \"%s\"", dev->name);25292490 }2530249125312492 spin_lock_irq(&pdata->mac_lock);···2543254425442545 return 0;2545254625462546-out_unregister_netdev_5:25472547- unregister_netdev(dev);25482548-out_free_irq:25492549- free_irq(dev->irq, dev);25502547out_disable_resources:25512548 pm_runtime_put(&pdev->dev);25522549 pm_runtime_disable(&pdev->dev);
+18-20
drivers/net/ethernet/synopsys/dwc_eth_qos.c
···12461246 lp->mii_bus->read = &dwceqos_mdio_read;12471247 lp->mii_bus->write = &dwceqos_mdio_write;12481248 lp->mii_bus->priv = lp;12491249- lp->mii_bus->parent = &lp->ndev->dev;12491249+ lp->mii_bus->parent = &lp->pdev->dev;1250125012511251 of_address_to_resource(lp->pdev->dev.of_node, 0, &res);12521252 snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%.8llx",···2853285328542854 ndev->features = ndev->hw_features;2855285528562856- netif_napi_add(ndev, &lp->napi, dwceqos_rx_poll, NAPI_POLL_WEIGHT);28572857-28582858- ret = register_netdev(ndev);28592859- if (ret) {28602860- dev_err(&pdev->dev, "Cannot register net device, aborting.\n");28612861- goto err_out_clk_dis_aper;28622862- }28632863-28642856 lp->phy_ref_clk = devm_clk_get(&pdev->dev, "phy_ref_clk");28652857 if (IS_ERR(lp->phy_ref_clk)) {28662858 dev_err(&pdev->dev, "phy_ref_clk clock not found.\n");28672859 ret = PTR_ERR(lp->phy_ref_clk);28682868- goto err_out_unregister_netdev;28602860+ goto err_out_clk_dis_aper;28692861 }2870286228712863 ret = clk_prepare_enable(lp->phy_ref_clk);28722864 if (ret) {28732865 dev_err(&pdev->dev, "Unable to enable device clock.\n");28742874- goto err_out_unregister_netdev;28662866+ goto err_out_clk_dis_aper;28752867 }2876286828772869 lp->phy_node = of_parse_phandle(lp->pdev->dev.of_node,···28722880 ret = of_phy_register_fixed_link(lp->pdev->dev.of_node);28732881 if (ret < 0) {28742882 dev_err(&pdev->dev, "invalid fixed-link");28752875- goto err_out_unregister_clk_notifier;28832883+ goto err_out_clk_dis_phy;28762884 }2877288528782886 lp->phy_node = of_node_get(lp->pdev->dev.of_node);···28812889 ret = of_get_phy_mode(lp->pdev->dev.of_node);28822890 if (ret < 0) {28832891 dev_err(&lp->pdev->dev, "error in getting phy i/f\n");28842884- goto err_out_unregister_clk_notifier;28922892+ goto err_out_clk_dis_phy;28852893 }2886289428872895 lp->phy_interface = ret;···28892897 ret = dwceqos_mii_init(lp);28902898 if (ret) {28912899 dev_err(&lp->pdev->dev, "error in dwceqos_mii_init\n");28922892- goto err_out_unregister_clk_notifier;29002900+ goto err_out_clk_dis_phy;28932901 }2894290228952903 ret = dwceqos_mii_probe(ndev);28962904 if (ret != 0) {28972905 netdev_err(ndev, "mii_probe fail.\n");28982906 ret = -ENXIO;28992899- goto err_out_unregister_clk_notifier;29072907+ goto err_out_clk_dis_phy;29002908 }2901290929022910 dwceqos_set_umac_addr(lp, lp->ndev->dev_addr, 0);···29142922 if (ret) {29152923 dev_err(&lp->pdev->dev, "Unable to retrieve DT, error %d\n",29162924 ret);29172917- goto err_out_unregister_clk_notifier;29252925+ goto err_out_clk_dis_phy;29182926 }29192927 dev_info(&lp->pdev->dev, "pdev->id %d, baseaddr 0x%08lx, irq %d\n",29202928 pdev->id, ndev->base_addr, ndev->irq);···29242932 if (ret) {29252933 dev_err(&lp->pdev->dev, "Unable to request IRQ %d, error %d\n",29262934 ndev->irq, ret);29272927- goto err_out_unregister_clk_notifier;29352935+ goto err_out_clk_dis_phy;29282936 }2929293729302938 if (netif_msg_probe(lp))29312939 netdev_dbg(ndev, "net_local@%p\n", lp);2932294029412941+ netif_napi_add(ndev, &lp->napi, dwceqos_rx_poll, NAPI_POLL_WEIGHT);29422942+29432943+ ret = register_netdev(ndev);29442944+ if (ret) {29452945+ dev_err(&pdev->dev, "Cannot register net device, aborting.\n");29462946+ goto err_out_clk_dis_phy;29472947+ }29482948+29332949 return 0;2934295029352935-err_out_unregister_clk_notifier:29512951+err_out_clk_dis_phy:29362952 clk_disable_unprepare(lp->phy_ref_clk);29372937-err_out_unregister_netdev:29382938- unregister_netdev(ndev);29392953err_out_clk_dis_aper:29402954 clk_disable_unprepare(lp->apb_pclk);29412955err_out_free_netdev:
+1
drivers/net/phy/Kconfig
···303303304304config MDIO_XGENE305305 tristate "APM X-Gene SoC MDIO bus controller"306306+ depends on ARCH_XGENE || COMPILE_TEST306307 help307308 This module provides a driver for the MDIO busses found in the308309 APM X-Gene SoC's.
+12-26
drivers/net/vxlan.c
···27822782 struct net_device *lowerdev = NULL;2783278327842784 if (conf->flags & VXLAN_F_GPE) {27852785- if (conf->flags & ~VXLAN_F_ALLOWED_GPE)27862786- return -EINVAL;27872785 /* For now, allow GPE only together with COLLECT_METADATA.27882786 * This can be relaxed later; in such case, the other side27892787 * of the PtP link will have to be provided.27902788 */27912791- if (!(conf->flags & VXLAN_F_COLLECT_METADATA))27892789+ if ((conf->flags & ~VXLAN_F_ALLOWED_GPE) ||27902790+ !(conf->flags & VXLAN_F_COLLECT_METADATA)) {27912791+ pr_info("unsupported combination of extensions\n");27922792 return -EINVAL;27932793+ }2793279427942795 vxlan_raw_setup(dev);27952796 } else {···28432842 dev->mtu = lowerdev->mtu - (use_ipv6 ? VXLAN6_HEADROOM : VXLAN_HEADROOM);2844284328452844 needed_headroom = lowerdev->hard_header_len;28452845+ } else if (vxlan_addr_multicast(&dst->remote_ip)) {28462846+ pr_info("multicast destination requires interface to be specified\n");28472847+ return -EINVAL;28462848 }2847284928482850 if (conf->mtu) {···28782874 tmp->cfg.saddr.sa.sa_family == AF_INET6) == use_ipv6 &&28792875 tmp->cfg.dst_port == vxlan->cfg.dst_port &&28802876 (tmp->flags & VXLAN_F_RCV_FLAGS) ==28812881- (vxlan->flags & VXLAN_F_RCV_FLAGS))28822882- return -EEXIST;28772877+ (vxlan->flags & VXLAN_F_RCV_FLAGS)) {28782878+ pr_info("duplicate VNI %u\n", be32_to_cpu(conf->vni));28792879+ return -EEXIST;28802880+ }28832881 }2884288228852883 dev->ethtool_ops = &vxlan_ethtool_ops;···29152909 struct nlattr *tb[], struct nlattr *data[])29162910{29172911 struct vxlan_config conf;29182918- int err;2919291229202913 memset(&conf, 0, sizeof(conf));29212914···30233018 if (tb[IFLA_MTU])30243019 conf.mtu = nla_get_u32(tb[IFLA_MTU]);3025302030263026- err = vxlan_dev_configure(src_net, dev, &conf);30273027- switch (err) {30283028- case -ENODEV:30293029- pr_info("ifindex %d does not exist\n", conf.remote_ifindex);30303030- break;30313031-30323032- case -EPERM:30333033- pr_info("IPv6 is disabled via sysctl\n");30343034- break;30353035-30363036- case -EEXIST:30373037- pr_info("duplicate VNI %u\n", be32_to_cpu(conf.vni));30383038- break;30393039-30403040- case -EINVAL:30413041- pr_info("unsupported combination of extensions\n");30423042- break;30433043- }30443044-30453045- return err;30213021+ return vxlan_dev_configure(src_net, dev, &conf);30463022}3047302330483024static void vxlan_dellink(struct net_device *dev, struct list_head *head)
···31623162 pci_hard_reset = ath10k_pci_qca988x_chip_reset;31633163 break;31643164 case QCA9887_1_0_DEVICE_ID:31653165- dev_warn(&pdev->dev, "QCA9887 support is still experimental, there are likely bugs. You have been warned.\n");31663165 hw_rev = ATH10K_HW_QCA9887;31673166 pci_ps = false;31683167 pci_soft_reset = ath10k_pci_warm_reset;
···743743 * serious troublesome side effects. The p2p module will clean744744 * up the ifp if needed.745745 */746746- brcmf_p2p_ifp_removed(ifp);746746+ brcmf_p2p_ifp_removed(ifp, rtnl_locked);747747 kfree(ifp);748748 }749749}
···205205206206 do {207207 /* Check if AMSDU can accommodate this MSDU */208208- if (skb_tailroom(skb_aggr) < (skb_src->len + LLC_SNAP_LEN))208208+ if ((skb_aggr->len + skb_src->len + LLC_SNAP_LEN) >209209+ adapter->tx_buf_size)209210 break;210211211212 skb_src = skb_dequeue(&pra_list->skb_head);
+8-1
drivers/nvme/host/pci.c
···16931693 nvme_suspend_queue(dev->queues[i]);1694169416951695 if (csts & NVME_CSTS_CFS || !(csts & NVME_CSTS_RDY)) {16961696- nvme_suspend_queue(dev->queues[0]);16961696+ /* A device might become IO incapable very soon during16971697+ * probe, before the admin queue is configured. Thus,16981698+ * queue_count can be 0 here.16991699+ */17001700+ if (dev->queue_count)17011701+ nvme_suspend_queue(dev->queues[0]);16971702 } else {16981703 nvme_disable_io_queues(dev);16991704 nvme_disable_admin_queue(dev, shutdown);···21162111 { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */21172112 .driver_data = NVME_QUIRK_IDENTIFY_CNS, },21182113 { PCI_DEVICE(0x1c58, 0x0003), /* HGST adapter */21142114+ .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, },21152115+ { PCI_DEVICE(0x1c5f, 0x0540), /* Memblaze Pblaze4 adapter */21192116 .driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, },21202117 { PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },21212118 { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001) },
+71-73
drivers/nvme/host/rdma.c
···82828383enum nvme_rdma_queue_flags {8484 NVME_RDMA_Q_CONNECTED = (1 << 0),8585+ NVME_RDMA_IB_QUEUE_ALLOCATED = (1 << 1),8686+ NVME_RDMA_Q_DELETING = (1 << 2),8587};86888789struct nvme_rdma_queue {···293291 if (IS_ERR(req->mr)) {294292 ret = PTR_ERR(req->mr);295293 req->mr = NULL;294294+ goto out;296295 }297296298297 req->mr->need_inval = false;···483480484481static void nvme_rdma_destroy_queue_ib(struct nvme_rdma_queue *queue)485482{486486- struct nvme_rdma_device *dev = queue->device;487487- struct ib_device *ibdev = dev->dev;483483+ struct nvme_rdma_device *dev;484484+ struct ib_device *ibdev;488485486486+ if (!test_and_clear_bit(NVME_RDMA_IB_QUEUE_ALLOCATED, &queue->flags))487487+ return;488488+489489+ dev = queue->device;490490+ ibdev = dev->dev;489491 rdma_destroy_qp(queue->cm_id);490492 ib_free_cq(queue->ib_cq);491493···541533 ret = -ENOMEM;542534 goto out_destroy_qp;543535 }536536+ set_bit(NVME_RDMA_IB_QUEUE_ALLOCATED, &queue->flags);544537545538 return 0;546539···561552562553 queue = &ctrl->queues[idx];563554 queue->ctrl = ctrl;555555+ queue->flags = 0;564556 init_completion(&queue->cm_done);565557566558 if (idx > 0)···600590 return 0;601591602592out_destroy_cm_id:593593+ nvme_rdma_destroy_queue_ib(queue);603594 rdma_destroy_id(queue->cm_id);604595 return ret;605596}···619608620609static void nvme_rdma_stop_and_free_queue(struct nvme_rdma_queue *queue)621610{622622- if (!test_and_clear_bit(NVME_RDMA_Q_CONNECTED, &queue->flags))611611+ if (test_and_set_bit(NVME_RDMA_Q_DELETING, &queue->flags))623612 return;624613 nvme_rdma_stop_queue(queue);625614 nvme_rdma_free_queue(queue);···663652 return 0;664653665654out_free_queues:666666- for (; i >= 1; i--)655655+ for (i--; i >= 1; i--)667656 nvme_rdma_stop_and_free_queue(&ctrl->queues[i]);668657669658 return ret;···772761{773762 struct nvme_rdma_ctrl *ctrl = container_of(work,774763 struct nvme_rdma_ctrl, err_work);764764+ int i;775765776766 nvme_stop_keep_alive(&ctrl->ctrl);767767+768768+ for (i = 0; i < ctrl->queue_count; i++)769769+ clear_bit(NVME_RDMA_Q_CONNECTED, &ctrl->queues[i].flags);770770+777771 if (ctrl->queue_count > 1)778772 nvme_stop_queues(&ctrl->ctrl);779773 blk_mq_stop_hw_queues(ctrl->ctrl.admin_q);···13211305 return ret;13221306}1323130713241324-/**13251325- * nvme_rdma_device_unplug() - Handle RDMA device unplug13261326- * @queue: Queue that owns the cm_id that caught the event13271327- *13281328- * DEVICE_REMOVAL event notifies us that the RDMA device is about13291329- * to unplug so we should take care of destroying our RDMA resources.13301330- * This event will be generated for each allocated cm_id.13311331- *13321332- * In our case, the RDMA resources are managed per controller and not13331333- * only per queue. So the way we handle this is we trigger an implicit13341334- * controller deletion upon the first DEVICE_REMOVAL event we see, and13351335- * hold the event inflight until the controller deletion is completed.13361336- *13371337- * One exception that we need to handle is the destruction of the cm_id13381338- * that caught the event. Since we hold the callout until the controller13391339- * deletion is completed, we'll deadlock if the controller deletion will13401340- * call rdma_destroy_id on this queue's cm_id. Thus, we claim ownership13411341- * of destroying this queue before-hand, destroy the queue resources,13421342- * then queue the controller deletion which won't destroy this queue and13431343- * we destroy the cm_id implicitely by returning a non-zero rc to the callout.13441344- */13451345-static int nvme_rdma_device_unplug(struct nvme_rdma_queue *queue)13461346-{13471347- struct nvme_rdma_ctrl *ctrl = queue->ctrl;13481348- int ret = 0;13491349-13501350- /* Own the controller deletion */13511351- if (!nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_DELETING))13521352- return 0;13531353-13541354- dev_warn(ctrl->ctrl.device,13551355- "Got rdma device removal event, deleting ctrl\n");13561356-13571357- /* Get rid of reconnect work if its running */13581358- cancel_delayed_work_sync(&ctrl->reconnect_work);13591359-13601360- /* Disable the queue so ctrl delete won't free it */13611361- if (test_and_clear_bit(NVME_RDMA_Q_CONNECTED, &queue->flags)) {13621362- /* Free this queue ourselves */13631363- nvme_rdma_stop_queue(queue);13641364- nvme_rdma_destroy_queue_ib(queue);13651365-13661366- /* Return non-zero so the cm_id will destroy implicitly */13671367- ret = 1;13681368- }13691369-13701370- /* Queue controller deletion */13711371- queue_work(nvme_rdma_wq, &ctrl->delete_work);13721372- flush_work(&ctrl->delete_work);13731373- return ret;13741374-}13751375-13761308static int nvme_rdma_cm_handler(struct rdma_cm_id *cm_id,13771309 struct rdma_cm_event *ev)13781310{···13621398 nvme_rdma_error_recovery(queue->ctrl);13631399 break;13641400 case RDMA_CM_EVENT_DEVICE_REMOVAL:13651365- /* return 1 means impliciy CM ID destroy */13661366- return nvme_rdma_device_unplug(queue);14011401+ /* device removal is handled via the ib_client API */14021402+ break;13671403 default:13681404 dev_err(queue->ctrl->ctrl.device,13691405 "Unexpected RDMA CM event (%d)\n", ev->event);···16641700static int nvme_rdma_del_ctrl(struct nvme_ctrl *nctrl)16651701{16661702 struct nvme_rdma_ctrl *ctrl = to_rdma_ctrl(nctrl);16671667- int ret;17031703+ int ret = 0;1668170417051705+ /*17061706+ * Keep a reference until all work is flushed since17071707+ * __nvme_rdma_del_ctrl can free the ctrl mem17081708+ */17091709+ if (!kref_get_unless_zero(&ctrl->ctrl.kref))17101710+ return -EBUSY;16691711 ret = __nvme_rdma_del_ctrl(ctrl);16701670- if (ret)16711671- return ret;16721672-16731673- flush_work(&ctrl->delete_work);16741674-16751675- return 0;17121712+ if (!ret)17131713+ flush_work(&ctrl->delete_work);17141714+ nvme_put_ctrl(&ctrl->ctrl);17151715+ return ret;16761716}1677171716781718static void nvme_rdma_remove_ctrl_work(struct work_struct *work)···19732005 .create_ctrl = nvme_rdma_create_ctrl,19742006};1975200720082008+static void nvme_rdma_add_one(struct ib_device *ib_device)20092009+{20102010+}20112011+20122012+static void nvme_rdma_remove_one(struct ib_device *ib_device, void *client_data)20132013+{20142014+ struct nvme_rdma_ctrl *ctrl;20152015+20162016+ /* Delete all controllers using this device */20172017+ mutex_lock(&nvme_rdma_ctrl_mutex);20182018+ list_for_each_entry(ctrl, &nvme_rdma_ctrl_list, list) {20192019+ if (ctrl->device->dev != ib_device)20202020+ continue;20212021+ dev_info(ctrl->ctrl.device,20222022+ "Removing ctrl: NQN \"%s\", addr %pISp\n",20232023+ ctrl->ctrl.opts->subsysnqn, &ctrl->addr);20242024+ __nvme_rdma_del_ctrl(ctrl);20252025+ }20262026+ mutex_unlock(&nvme_rdma_ctrl_mutex);20272027+20282028+ flush_workqueue(nvme_rdma_wq);20292029+}20302030+20312031+static struct ib_client nvme_rdma_ib_client = {20322032+ .name = "nvme_rdma",20332033+ .add = nvme_rdma_add_one,20342034+ .remove = nvme_rdma_remove_one20352035+};20362036+19762037static int __init nvme_rdma_init_module(void)19772038{20392039+ int ret;20402040+19782041 nvme_rdma_wq = create_workqueue("nvme_rdma_wq");19792042 if (!nvme_rdma_wq)19802043 return -ENOMEM;20442044+20452045+ ret = ib_register_client(&nvme_rdma_ib_client);20462046+ if (ret) {20472047+ destroy_workqueue(nvme_rdma_wq);20482048+ return ret;20492049+ }1981205019822051 nvmf_register_transport(&nvme_rdma_transport);19832052 return 0;···2022201720232018static void __exit nvme_rdma_cleanup_module(void)20242019{20252025- struct nvme_rdma_ctrl *ctrl;20262026-20272020 nvmf_unregister_transport(&nvme_rdma_transport);20282028-20292029- mutex_lock(&nvme_rdma_ctrl_mutex);20302030- list_for_each_entry(ctrl, &nvme_rdma_ctrl_list, list)20312031- __nvme_rdma_del_ctrl(ctrl);20322032- mutex_unlock(&nvme_rdma_ctrl_mutex);20332033-20212021+ ib_unregister_client(&nvme_rdma_ib_client);20342022 destroy_workqueue(nvme_rdma_wq);20352023}20362024
···134134135135int pcmcia_badge4_init(struct sa1111_dev *dev)136136{137137- int ret = -ENODEV;137137+ printk(KERN_INFO138138+ "%s: badge4_pcmvcc=%d, badge4_pcmvpp=%d, badge4_cfvcc=%d\n",139139+ __func__,140140+ badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc);138141139139- if (machine_is_badge4()) {140140- printk(KERN_INFO141141- "%s: badge4_pcmvcc=%d, badge4_pcmvpp=%d, badge4_cfvcc=%d\n",142142- __func__,143143- badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc);144144-145145- sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops);146146- ret = sa1111_pcmcia_add(dev, &badge4_pcmcia_ops,147147- sa11xx_drv_pcmcia_add_one);148148- }149149-150150- return ret;142142+ sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops);143143+ return sa1111_pcmcia_add(dev, &badge4_pcmcia_ops,144144+ sa11xx_drv_pcmcia_add_one);151145}152146153147static int __init pcmv_setup(char *s)
+17-5
drivers/pcmcia/sa1111_generic.c
···18181919#include <mach/hardware.h>2020#include <asm/hardware/sa1111.h>2121+#include <asm/mach-types.h>2122#include <asm/irq.h>22232324#include "sa1111_generic.h"···204203 sa1111_writel(PCSSR_S0_SLEEP | PCSSR_S1_SLEEP, base + PCSSR);205204 sa1111_writel(PCCR_S0_FLT | PCCR_S1_FLT, base + PCCR);206205206206+ ret = -ENODEV;207207#ifdef CONFIG_SA1100_BADGE4208208- pcmcia_badge4_init(dev);208208+ if (machine_is_badge4())209209+ ret = pcmcia_badge4_init(dev);209210#endif210211#ifdef CONFIG_SA1100_JORNADA720211211- pcmcia_jornada720_init(dev);212212+ if (machine_is_jornada720())213213+ ret = pcmcia_jornada720_init(dev);212214#endif213215#ifdef CONFIG_ARCH_LUBBOCK214214- pcmcia_lubbock_init(dev);216216+ if (machine_is_lubbock())217217+ ret = pcmcia_lubbock_init(dev);215218#endif216219#ifdef CONFIG_ASSABET_NEPONSET217217- pcmcia_neponset_init(dev);220220+ if (machine_is_assabet())221221+ ret = pcmcia_neponset_init(dev);218222#endif219219- return 0;223223+224224+ if (ret) {225225+ release_mem_region(dev->res.start, 512);226226+ sa1111_disable_device(dev);227227+ }228228+229229+ return ret;220230}221231222232static int pcmcia_remove(struct sa1111_dev *dev)
+10-15
drivers/pcmcia/sa1111_jornada720.c
···94949595int pcmcia_jornada720_init(struct sa1111_dev *sadev)9696{9797- int ret = -ENODEV;9797+ unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3;98989999- if (machine_is_jornada720()) {100100- unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3;9999+ /* Fixme: why messing around with SA11x0's GPIO1? */100100+ GRER |= 0x00000002;101101102102- GRER |= 0x00000002;102102+ /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */103103+ sa1111_set_io_dir(sadev, pin, 0, 0);104104+ sa1111_set_io(sadev, pin, 0);105105+ sa1111_set_sleep_io(sadev, pin, 0);103106104104- /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */105105- sa1111_set_io_dir(sadev, pin, 0, 0);106106- sa1111_set_io(sadev, pin, 0);107107- sa1111_set_sleep_io(sadev, pin, 0);108108-109109- sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops);110110- ret = sa1111_pcmcia_add(sadev, &jornada720_pcmcia_ops,111111- sa11xx_drv_pcmcia_add_one);112112- }113113-114114- return ret;107107+ sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops);108108+ return sa1111_pcmcia_add(sadev, &jornada720_pcmcia_ops,109109+ sa11xx_drv_pcmcia_add_one);115110}
+13-19
drivers/pcmcia/sa1111_lubbock.c
···210210211211int pcmcia_lubbock_init(struct sa1111_dev *sadev)212212{213213- int ret = -ENODEV;213213+ /*214214+ * Set GPIO_A<3:0> to be outputs for the MAX1600,215215+ * and switch to standby mode.216216+ */217217+ sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);218218+ sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);219219+ sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);214220215215- if (machine_is_lubbock()) {216216- /*217217- * Set GPIO_A<3:0> to be outputs for the MAX1600,218218- * and switch to standby mode.219219- */220220- sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);221221- sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);222222- sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);221221+ /* Set CF Socket 1 power to standby mode. */222222+ lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);223223224224- /* Set CF Socket 1 power to standby mode. */225225- lubbock_set_misc_wr((1 << 15) | (1 << 14), 0);226226-227227- pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops);228228- pxa2xx_configure_sockets(&sadev->dev);229229- ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops,230230- pxa2xx_drv_pcmcia_add_one);231231- }232232-233233- return ret;224224+ pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops);225225+ pxa2xx_configure_sockets(&sadev->dev, &lubbock_pcmcia_ops);226226+ return sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops,227227+ pxa2xx_drv_pcmcia_add_one);234228}235229236230MODULE_LICENSE("GPL");
+10-16
drivers/pcmcia/sa1111_neponset.c
···110110111111int pcmcia_neponset_init(struct sa1111_dev *sadev)112112{113113- int ret = -ENODEV;114114-115115- if (machine_is_assabet()) {116116- /*117117- * Set GPIO_A<3:0> to be outputs for the MAX1600,118118- * and switch to standby mode.119119- */120120- sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);121121- sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);122122- sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);123123- sa11xx_drv_pcmcia_ops(&neponset_pcmcia_ops);124124- ret = sa1111_pcmcia_add(sadev, &neponset_pcmcia_ops,125125- sa11xx_drv_pcmcia_add_one);126126- }127127-128128- return ret;113113+ /*114114+ * Set GPIO_A<3:0> to be outputs for the MAX1600,115115+ * and switch to standby mode.116116+ */117117+ sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0);118118+ sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);119119+ sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0);120120+ sa11xx_drv_pcmcia_ops(&neponset_pcmcia_ops);121121+ return sa1111_pcmcia_add(sadev, &neponset_pcmcia_ops,122122+ sa11xx_drv_pcmcia_add_one);129123}
···235235 stat |= skt->cs_state.Vcc ? SS_POWERON : 0;236236237237 if (skt->cs_state.flags & SS_IOCARD)238238- stat |= state.bvd1 ? SS_STSCHG : 0;238238+ stat |= state.bvd1 ? 0 : SS_STSCHG;239239 else {240240 if (state.bvd1 == 0)241241 stat |= SS_BATDEAD;
+17-11
drivers/usb/core/config.c
···240240 memcpy(&endpoint->desc, d, n);241241 INIT_LIST_HEAD(&endpoint->urb_list);242242243243- /* Fix up bInterval values outside the legal range. Use 32 ms if no244244- * proper value can be guessed. */243243+ /*244244+ * Fix up bInterval values outside the legal range.245245+ * Use 10 or 8 ms if no proper value can be guessed.246246+ */245247 i = 0; /* i = min, j = max, n = default */246248 j = 255;247249 if (usb_endpoint_xfer_int(d)) {···252250 case USB_SPEED_SUPER_PLUS:253251 case USB_SPEED_SUPER:254252 case USB_SPEED_HIGH:255255- /* Many device manufacturers are using full-speed253253+ /*254254+ * Many device manufacturers are using full-speed256255 * bInterval values in high-speed interrupt endpoint257257- * descriptors. Try to fix those and fall back to a258258- * 32 ms default value otherwise. */256256+ * descriptors. Try to fix those and fall back to an257257+ * 8-ms default value otherwise.258258+ */259259 n = fls(d->bInterval*8);260260 if (n == 0)261261- n = 9; /* 32 ms = 2^(9-1) uframes */261261+ n = 7; /* 8 ms = 2^(7-1) uframes */262262 j = 16;263263264264 /*···275271 }276272 break;277273 default: /* USB_SPEED_FULL or _LOW */278278- /* For low-speed, 10 ms is the official minimum.274274+ /*275275+ * For low-speed, 10 ms is the official minimum.279276 * But some "overclocked" devices might want faster280280- * polling so we'll allow it. */281281- n = 32;277277+ * polling so we'll allow it.278278+ */279279+ n = 10;282280 break;283281 }284282 } else if (usb_endpoint_xfer_isoc(d)) {···288282 j = 16;289283 switch (to_usb_device(ddev)->speed) {290284 case USB_SPEED_HIGH:291291- n = 9; /* 32 ms = 2^(9-1) uframes */285285+ n = 7; /* 8 ms = 2^(7-1) uframes */292286 break;293287 default: /* USB_SPEED_FULL */294294- n = 6; /* 32 ms = 2^(6-1) frames */288288+ n = 4; /* 8 ms = 2^(4-1) frames */295289 break;296290 }297291 }
+1-1
drivers/usb/musb/Kconfig
···8787config USB_MUSB_TUSB60108888 tristate "TUSB6010"8989 depends on HAS_IOMEM9090- depends on ARCH_OMAP2PLUS || COMPILE_TEST9090+ depends on (ARCH_OMAP2PLUS || COMPILE_TEST) && !BLACKFIN9191 depends on NOP_USB_XCEIV = USB_MUSB_HDRC # both built-in or both modules92929393config USB_MUSB_OMAP2PLUS
···184184 unsigned int to_read);185185extern int cifs_read_page_from_socket(struct TCP_Server_Info *server,186186 struct page *page, unsigned int to_read);187187-extern void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,187187+extern int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,188188 struct cifs_sb_info *cifs_sb);189189extern int cifs_match_super(struct super_block *, void *);190190extern void cifs_cleanup_volume_info(struct smb_vol *pvolume_info);
+29-2
fs/cifs/connect.c
···27812781 return 1;27822782}2783278327842784+static int27852785+match_prepath(struct super_block *sb, struct cifs_mnt_data *mnt_data)27862786+{27872787+ struct cifs_sb_info *old = CIFS_SB(sb);27882788+ struct cifs_sb_info *new = mnt_data->cifs_sb;27892789+27902790+ if (old->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH) {27912791+ if (!(new->mnt_cifs_flags & CIFS_MOUNT_USE_PREFIX_PATH))27922792+ return 0;27932793+ /* The prepath should be null terminated strings */27942794+ if (strcmp(new->prepath, old->prepath))27952795+ return 0;27962796+27972797+ return 1;27982798+ }27992799+ return 0;28002800+}28012801+27842802int27852803cifs_match_super(struct super_block *sb, void *data)27862804{···2826280828272809 if (!match_server(tcp_srv, volume_info) ||28282810 !match_session(ses, volume_info) ||28292829- !match_tcon(tcon, volume_info->UNC)) {28112811+ !match_tcon(tcon, volume_info->UNC) ||28122812+ !match_prepath(sb, mnt_data)) {28302813 rc = 0;28312814 goto out;28322815 }···32413222 }32423223}3243322432443244-void cifs_setup_cifs_sb(struct smb_vol *pvolume_info,32253225+int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,32453226 struct cifs_sb_info *cifs_sb)32463227{32473228 INIT_DELAYED_WORK(&cifs_sb->prune_tlinks, cifs_prune_tlinks);···3335331633363317 if ((pvolume_info->cifs_acl) && (pvolume_info->dynperm))33373318 cifs_dbg(VFS, "mount option dynperm ignored if cifsacl mount option supported\n");33193319+33203320+ if (pvolume_info->prepath) {33213321+ cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL);33223322+ if (cifs_sb->prepath == NULL)33233323+ return -ENOMEM;33243324+ }33253325+33263326+ return 0;33383327}3339332833403329static void
+5-1
fs/ioctl.c
···568568 return thaw_super(sb);569569}570570571571-static long ioctl_file_dedupe_range(struct file *file, void __user *arg)571571+static int ioctl_file_dedupe_range(struct file *file, void __user *arg)572572{573573 struct file_dedupe_range __user *argp = arg;574574 struct file_dedupe_range *same = NULL;···582582 }583583584584 size = offsetof(struct file_dedupe_range __user, info[count]);585585+ if (size > PAGE_SIZE) {586586+ ret = -ENOMEM;587587+ goto out;588588+ }585589586590 same = memdup_user(argp, size);587591 if (IS_ERR(same)) {
+4-1
fs/nfs/file.c
···657657 if (result <= 0)658658 goto out;659659660660- written = generic_write_sync(iocb, result);660660+ result = generic_write_sync(iocb, result);661661+ if (result < 0)662662+ goto out;663663+ written = result;661664 iocb->ki_pos += written;662665663666 /* Return error values */
+16-5
fs/nfs/nfs4proc.c
···75707570 status = rpc_call_sync(session->clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT);75717571 trace_nfs4_create_session(clp, status);7572757275737573+ switch (status) {75747574+ case -NFS4ERR_STALE_CLIENTID:75757575+ case -NFS4ERR_DELAY:75767576+ case -ETIMEDOUT:75777577+ case -EACCES:75787578+ case -EAGAIN:75797579+ goto out;75807580+ };75817581+75827582+ clp->cl_seqid++;75737583 if (!status) {75747584 /* Verify the session's negotiated channel_attrs values */75757585 status = nfs4_verify_channel_attrs(&args, &res);75767586 /* Increment the clientid slot sequence id */75777577- if (clp->cl_seqid == res.seqid)75787578- clp->cl_seqid++;75797587 if (status)75807588 goto out;75817589 nfs4_update_session(session, &res);···8198819081998191 dprintk("--> %s\n", __func__);82008192 spin_lock(&lo->plh_inode->i_lock);82018201- pnfs_mark_matching_lsegs_invalid(lo, &freeme, &lrp->args.range,82028202- be32_to_cpu(lrp->args.stateid.seqid));82038203- if (lrp->res.lrs_present && pnfs_layout_is_valid(lo))81938193+ if (lrp->res.lrs_present) {81948194+ pnfs_mark_matching_lsegs_invalid(lo, &freeme,81958195+ &lrp->args.range,81968196+ be32_to_cpu(lrp->args.stateid.seqid));82048197 pnfs_set_layout_stateid(lo, &lrp->res.stateid, true);81988198+ } else81998199+ pnfs_mark_layout_stateid_invalid(lo, &freeme);82058200 pnfs_clear_layoutreturn_waitbit(lo);82068201 spin_unlock(&lo->plh_inode->i_lock);82078202 nfs4_sequence_free_slot(&lrp->res.seq_res);
+24-18
fs/nfs/pnfs.c
···365365 /* Matched by pnfs_get_layout_hdr in pnfs_layout_insert_lseg */366366 atomic_dec(&lo->plh_refcount);367367 if (list_empty(&lo->plh_segs)) {368368- set_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags);368368+ if (atomic_read(&lo->plh_outstanding) == 0)369369+ set_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags);369370 clear_bit(NFS_LAYOUT_BULK_RECALL, &lo->plh_flags);370371 }371372 rpc_wake_up(&NFS_SERVER(inode)->roc_rpcwaitq);···769768 pnfs_destroy_layouts_byclid(clp, false);770769}771770771771+static void772772+pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo)773773+{774774+ lo->plh_return_iomode = 0;775775+ lo->plh_return_seq = 0;776776+ clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags);777777+}778778+772779/* update lo->plh_stateid with new if is more recent */773780void774781pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new,775782 bool update_barrier)776783{777784 u32 oldseq, newseq, new_barrier = 0;778778- bool invalid = !pnfs_layout_is_valid(lo);779785780786 oldseq = be32_to_cpu(lo->plh_stateid.seqid);781787 newseq = be32_to_cpu(new->seqid);782782- if (invalid || pnfs_seqid_is_newer(newseq, oldseq)) {788788+789789+ if (!pnfs_layout_is_valid(lo)) {790790+ nfs4_stateid_copy(&lo->plh_stateid, new);791791+ lo->plh_barrier = newseq;792792+ pnfs_clear_layoutreturn_info(lo);793793+ clear_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags);794794+ return;795795+ }796796+ if (pnfs_seqid_is_newer(newseq, oldseq)) {783797 nfs4_stateid_copy(&lo->plh_stateid, new);784798 /*785799 * Because of wraparound, we want to keep the barrier···806790 new_barrier = be32_to_cpu(new->seqid);807791 else if (new_barrier == 0)808792 return;809809- if (invalid || pnfs_seqid_is_newer(new_barrier, lo->plh_barrier))793793+ if (pnfs_seqid_is_newer(new_barrier, lo->plh_barrier))810794 lo->plh_barrier = new_barrier;811795}812796···902886 rpc_wake_up(&NFS_SERVER(lo->plh_inode)->roc_rpcwaitq);903887}904888905905-static void906906-pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo)907907-{908908- lo->plh_return_iomode = 0;909909- lo->plh_return_seq = 0;910910- clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags);911911-}912912-913889static bool914890pnfs_prepare_layoutreturn(struct pnfs_layout_hdr *lo,915891 nfs4_stateid *stateid,916892 enum pnfs_iomode *iomode)917893{894894+ /* Serialise LAYOUTGET/LAYOUTRETURN */895895+ if (atomic_read(&lo->plh_outstanding) != 0)896896+ return false;918897 if (test_and_set_bit(NFS_LAYOUT_RETURN, &lo->plh_flags))919898 return false;920899 pnfs_get_layout_hdr(lo);···18091798 */18101799 pnfs_mark_layout_stateid_invalid(lo, &free_me);1811180018121812- nfs4_stateid_copy(&lo->plh_stateid, &res->stateid);18131813- lo->plh_barrier = be32_to_cpu(res->stateid.seqid);18011801+ pnfs_set_layout_stateid(lo, &res->stateid, true);18141802 }1815180318161804 pnfs_get_lseg(lseg);18171805 pnfs_layout_insert_lseg(lo, lseg, &free_me);18181818- if (!pnfs_layout_is_valid(lo)) {18191819- pnfs_clear_layoutreturn_info(lo);18201820- clear_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags);18211821- }182218061823180718241808 if (res->return_on_close)
+13-7
include/asm-generic/uaccess.h
···231231 might_fault(); \232232 access_ok(VERIFY_READ, __p, sizeof(*ptr)) ? \233233 __get_user((x), (__typeof__(*(ptr)) *)__p) : \234234- -EFAULT; \234234+ ((x) = (__typeof__(*(ptr)))0,-EFAULT); \235235})236236237237#ifndef __get_user_fn238238static inline int __get_user_fn(size_t size, const void __user *ptr, void *x)239239{240240- size = __copy_from_user(x, ptr, size);241241- return size ? -EFAULT : size;240240+ size_t n = __copy_from_user(x, ptr, size);241241+ if (unlikely(n)) {242242+ memset(x + (size - n), 0, n);243243+ return -EFAULT;244244+ }245245+ return 0;242246}243247244248#define __get_user_fn(sz, u, k) __get_user_fn(sz, u, k)···262258static inline long copy_from_user(void *to,263259 const void __user * from, unsigned long n)264260{261261+ unsigned long res = n;265262 might_fault();266266- if (access_ok(VERIFY_READ, from, n))267267- return __copy_from_user(to, from, n);268268- else269269- return n;263263+ if (likely(access_ok(VERIFY_READ, from, n)))264264+ res = __copy_from_user(to, from, n);265265+ if (unlikely(res))266266+ memset(to + (n - res), 0, res);267267+ return res;270268}271269272270static inline long copy_to_user(void __user *to,
+4-3
include/linux/compiler.h
···527527 * object's lifetime is managed by something other than RCU. That528528 * "something other" might be reference counting or simple immortality.529529 *530530- * The seemingly unused size_t variable is to validate @p is indeed a pointer531531- * type by making sure it can be dereferenced.530530+ * The seemingly unused variable ___typecheck_p validates that @p is531531+ * indeed a pointer type by using a pointer to typeof(*p) as the type.532532+ * Taking a pointer to typeof(*p) again is needed in case p is void *.532533 */533534#define lockless_dereference(p) \534535({ \535536 typeof(p) _________p1 = READ_ONCE(p); \536536- size_t __maybe_unused __size_of_ptr = sizeof(*(p)); \537537+ typeof(*(p)) *___typecheck_p __maybe_unused; \537538 smp_read_barrier_depends(); /* Dependency order vs. p above. */ \538539 (_________p1); \539540})
···118118 u32 imagesize;119119} efi_capsule_header_t;120120121121+struct efi_boot_memmap {122122+ efi_memory_desc_t **map;123123+ unsigned long *map_size;124124+ unsigned long *desc_size;125125+ u32 *desc_ver;126126+ unsigned long *key_ptr;127127+ unsigned long *buff_size;128128+};129129+121130/*122131 * EFI capsule flags123132 */···955946/* Iterate through an efi_memory_map */956947#define for_each_efi_memory_desc_in_map(m, md) \957948 for ((md) = (m)->map; \958958- ((void *)(md) + (m)->desc_size) <= (m)->map_end; \949949+ (md) && ((void *)(md) + (m)->desc_size) <= (m)->map_end; \959950 (md) = (void *)(md) + (m)->desc_size)960951961952/**···13801371 efi_loaded_image_t *image, int *cmd_line_len);1381137213821373efi_status_t efi_get_memory_map(efi_system_table_t *sys_table_arg,13831383- efi_memory_desc_t **map,13841384- unsigned long *map_size,13851385- unsigned long *desc_size,13861386- u32 *desc_ver,13871387- unsigned long *key_ptr);13741374+ struct efi_boot_memmap *map);1388137513891376efi_status_t efi_low_alloc(efi_system_table_t *sys_table_arg,13901377 unsigned long size, unsigned long align,···14621457 arch_efi_call_virt_teardown(); \14631458})1464145914601460+typedef efi_status_t (*efi_exit_boot_map_processing)(14611461+ efi_system_table_t *sys_table_arg,14621462+ struct efi_boot_memmap *map,14631463+ void *priv);14641464+14651465+efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table,14661466+ void *handle,14671467+ struct efi_boot_memmap *map,14681468+ void *priv,14691469+ efi_exit_boot_map_processing priv_func);14651470#endif /* _LINUX_EFI_H */
+10
include/linux/irq.h
···945945static inline void irq_gc_unlock(struct irq_chip_generic *gc) { }946946#endif947947948948+/*949949+ * The irqsave variants are for usage in non interrupt code. Do not use950950+ * them in irq_chip callbacks. Use irq_gc_lock() instead.951951+ */952952+#define irq_gc_lock_irqsave(gc, flags) \953953+ raw_spin_lock_irqsave(&(gc)->lock, flags)954954+955955+#define irq_gc_unlock_irqrestore(gc, flags) \956956+ raw_spin_unlock_irqrestore(&(gc)->lock, flags)957957+948958static inline void irq_reg_writel(struct irq_chip_generic *gc,949959 u32 val, int reg_offset)950960{
···11021102 struct cfg80211_tid_stats pertid[IEEE80211_NUM_TIDS + 1];11031103};1104110411051105+#if IS_ENABLED(CONFIG_CFG80211)11051106/**11061107 * cfg80211_get_station - retrieve information about a given station11071108 * @dev: the device where the station is supposed to be connected to···11151114 */11161115int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr,11171116 struct station_info *sinfo);11171117+#else11181118+static inline int cfg80211_get_station(struct net_device *dev,11191119+ const u8 *mac_addr,11201120+ struct station_info *sinfo)11211121+{11221122+ return -ENOENT;11231123+}11241124+#endif1118112511191126/**11201127 * enum monitor_flags - monitor flags
···24962496 return 0;24972497}2498249824992499-static int perf_event_restart(struct perf_event *event)24992499+static int perf_event_stop(struct perf_event *event, int restart)25002500{25012501 struct stop_event_data sd = {25022502 .event = event,25032503- .restart = 1,25032503+ .restart = restart,25042504 };25052505 int ret = 0;25062506···35493549 .group = group,35503550 .ret = 0,35513551 };35523552- ret = smp_call_function_single(event->oncpu, __perf_event_read, &data, 1);35533553- /* The event must have been read from an online CPU: */35543554- WARN_ON_ONCE(ret);35553555- ret = ret ? : data.ret;35523552+ /*35533553+ * Purposely ignore the smp_call_function_single() return35543554+ * value.35553555+ *35563556+ * If event->oncpu isn't a valid CPU it means the event got35573557+ * scheduled out and that will have updated the event count.35583558+ *35593559+ * Therefore, either way, we'll have an up-to-date event count35603560+ * after this.35613561+ */35623562+ (void)smp_call_function_single(event->oncpu, __perf_event_read, &data, 1);35633563+ ret = data.ret;35563564 } else if (event->state == PERF_EVENT_STATE_INACTIVE) {35573565 struct perf_event_context *ctx = event->ctx;35583566 unsigned long flags;···48454837 spin_unlock_irqrestore(&rb->event_lock, flags);48464838 }4847483948404840+ /*48414841+ * Avoid racing with perf_mmap_close(AUX): stop the event48424842+ * before swizzling the event::rb pointer; if it's getting48434843+ * unmapped, its aux_mmap_count will be 0 and it won't48444844+ * restart. See the comment in __perf_pmu_output_stop().48454845+ *48464846+ * Data will inevitably be lost when set_output is done in48474847+ * mid-air, but then again, whoever does it like this is48484848+ * not in for the data anyway.48494849+ */48504850+ if (has_aux(event))48514851+ perf_event_stop(event, 0);48524852+48484853 rcu_assign_pointer(event->rb, rb);4849485448504855 if (old_rb) {···61336112 raw_spin_unlock_irqrestore(&ifh->lock, flags);6134611361356114 if (restart)61366136- perf_event_restart(event);61156115+ perf_event_stop(event, 1);61376116}6138611761396118void perf_event_exec(void)···6177615661786157 /*61796158 * In case of inheritance, it will be the parent that links to the61806180- * ring-buffer, but it will be the child that's actually using it:61596159+ * ring-buffer, but it will be the child that's actually using it.61606160+ *61616161+ * We are using event::rb to determine if the event should be stopped,61626162+ * however this may race with ring_buffer_attach() (through set_output),61636163+ * which will make us skip the event that actually needs to be stopped.61646164+ * So ring_buffer_attach() has to stop an aux event before re-assigning61656165+ * its rb pointer.61816166 */61826167 if (rcu_dereference(parent->rb) == rb)61836168 ro->err = __perf_event_stop(&sd);···66976670 raw_spin_unlock_irqrestore(&ifh->lock, flags);6698667166996672 if (restart)67006700- perf_event_restart(event);66736673+ perf_event_stop(event, 1);67016674}6702667567036676/*···78867859 mmput(mm);7887786078887861restart:78897889- perf_event_restart(event);78627862+ perf_event_stop(event, 1);78907863}7891786478927865/*
+11-4
kernel/events/ring_buffer.c
···330330 if (!rb)331331 return NULL;332332333333- if (!rb_has_aux(rb) || !atomic_inc_not_zero(&rb->aux_refcount))333333+ if (!rb_has_aux(rb))334334 goto err;335335336336 /*337337- * If rb::aux_mmap_count is zero (and rb_has_aux() above went through),338338- * the aux buffer is in perf_mmap_close(), about to get freed.337337+ * If aux_mmap_count is zero, the aux buffer is in perf_mmap_close(),338338+ * about to get freed, so we leave immediately.339339+ *340340+ * Checking rb::aux_mmap_count and rb::refcount has to be done in341341+ * the same order, see perf_mmap_close. Otherwise we end up freeing342342+ * aux pages in this path, which is a bug, because in_atomic().339343 */340344 if (!atomic_read(&rb->aux_mmap_count))341341- goto err_put;345345+ goto err;346346+347347+ if (!atomic_inc_not_zero(&rb->aux_refcount))348348+ goto err;342349343350 /*344351 * Nesting is not supported for AUX area, make sure nested
+22
kernel/sched/core.c
···20162016 success = 1; /* we're going to change ->state */20172017 cpu = task_cpu(p);2018201820192019+ /*20202020+ * Ensure we load p->on_rq _after_ p->state, otherwise it would20212021+ * be possible to, falsely, observe p->on_rq == 0 and get stuck20222022+ * in smp_cond_load_acquire() below.20232023+ *20242024+ * sched_ttwu_pending() try_to_wake_up()20252025+ * [S] p->on_rq = 1; [L] P->state20262026+ * UNLOCK rq->lock -----.20272027+ * \20282028+ * +--- RMB20292029+ * schedule() /20302030+ * LOCK rq->lock -----'20312031+ * UNLOCK rq->lock20322032+ *20332033+ * [task p]20342034+ * [S] p->state = UNINTERRUPTIBLE [L] p->on_rq20352035+ *20362036+ * Pairs with the UNLOCK+LOCK on rq->lock from the20372037+ * last wakeup of our task and the schedule that got our task20382038+ * current.20392039+ */20402040+ smp_rmb();20192041 if (p->on_rq && ttwu_remote(p, wake_flags))20202042 goto stat;20212043
+2-22
lib/iov_iter.c
···291291}292292293293/*294294- * Fault in the first iovec of the given iov_iter, to a maximum length295295- * of bytes. Returns 0 on success, or non-zero if the memory could not be296296- * accessed (ie. because it is an invalid address).297297- *298298- * writev-intensive code may want this to prefault several iovecs -- that299299- * would be possible (callers must not rely on the fact that _only_ the300300- * first iovec will be faulted with the current implementation).301301- */302302-int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes)303303-{304304- if (!(i->type & (ITER_BVEC|ITER_KVEC))) {305305- char __user *buf = i->iov->iov_base + i->iov_offset;306306- bytes = min(bytes, i->iov->iov_len - i->iov_offset);307307- return fault_in_pages_readable(buf, bytes);308308- }309309- return 0;310310-}311311-EXPORT_SYMBOL(iov_iter_fault_in_readable);312312-313313-/*314294 * Fault in one or more iovecs of the given iov_iter, to a maximum length of315295 * bytes. For each iovec, fault in each page that constitutes the iovec.316296 *317297 * Return 0 on success, or non-zero if the memory could not be accessed (i.e.318298 * because it is an invalid address).319299 */320320-int iov_iter_fault_in_multipages_readable(struct iov_iter *i, size_t bytes)300300+int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes)321301{322302 size_t skip = i->iov_offset;323303 const struct iovec *iov;···314334 }315335 return 0;316336}317317-EXPORT_SYMBOL(iov_iter_fault_in_multipages_readable);337337+EXPORT_SYMBOL(iov_iter_fault_in_readable);318338319339void iov_iter_init(struct iov_iter *i, int direction,320340 const struct iovec *iov, unsigned long nr_segs,
+2-5
net/bridge/br_input.c
···80808181 BR_INPUT_SKB_CB(skb)->proxyarp_replied = false;82828383- if (dev->flags & IFF_NOARP)8383+ if ((dev->flags & IFF_NOARP) ||8484+ !pskb_may_pull(skb, arp_hdr_len(dev)))8485 return;85868686- if (!pskb_may_pull(skb, arp_hdr_len(dev))) {8787- dev->stats.tx_dropped++;8888- return;8989- }9087 parp = arp_hdr(skb);91889289 if (parp->ar_pro != htons(ETH_P_IP) ||
···39753975}3976397639773977/**39783978+ * netdev_is_rx_handler_busy - check if receive handler is registered39793979+ * @dev: device to check39803980+ *39813981+ * Check if a receive handler is already registered for a given device.39823982+ * Return true if there one.39833983+ *39843984+ * The caller must hold the rtnl_mutex.39853985+ */39863986+bool netdev_is_rx_handler_busy(struct net_device *dev)39873987+{39883988+ ASSERT_RTNL();39893989+ return dev && rtnl_dereference(dev->rx_handler);39903990+}39913991+EXPORT_SYMBOL_GPL(netdev_is_rx_handler_busy);39923992+39933993+/**39783994 * netdev_rx_handler_register - register receive handler39793995 * @dev: device to register a handler for39803996 * @rx_handler: receive handler to register
···509509 if (!dev)510510 return -ENODEV;511511 cfg->fc_oif = dev->ifindex;512512+ cfg->fc_table = l3mdev_fib_table(dev);512513 if (colon) {513514 struct in_ifaddr *ifa;514515 struct in_device *in_dev = __in_dev_get_rtnl(dev);···10281027 * First of all, we scan fib_info list searching10291028 * for stray nexthop entries, then ignite fib_flush.10301029 */10311031- if (fib_sync_down_addr(dev_net(dev), ifa->ifa_local))10301030+ if (fib_sync_down_addr(dev, ifa->ifa_local))10321031 fib_flush(dev_net(dev));10331032 }10341033 }
+6-2
net/ipv4/fib_semantics.c
···10571057 fi->fib_priority = cfg->fc_priority;10581058 fi->fib_prefsrc = cfg->fc_prefsrc;10591059 fi->fib_type = cfg->fc_type;10601060+ fi->fib_tb_id = cfg->fc_table;1060106110611062 fi->fib_nhs = nhs;10621063 change_nexthops(fi) {···13381337 * referring to it.13391338 * - device went down -> we must shutdown all nexthops going via it.13401339 */13411341-int fib_sync_down_addr(struct net *net, __be32 local)13401340+int fib_sync_down_addr(struct net_device *dev, __be32 local)13421341{13431342 int ret = 0;13441343 unsigned int hash = fib_laddr_hashfn(local);13451344 struct hlist_head *head = &fib_info_laddrhash[hash];13451345+ struct net *net = dev_net(dev);13461346+ int tb_id = l3mdev_fib_table(dev);13461347 struct fib_info *fi;1347134813481349 if (!fib_info_laddrhash || local == 0)13491350 return 0;1350135113511352 hlist_for_each_entry(fi, head, fib_lhash) {13521352- if (!net_eq(fi->fib_net, net))13531353+ if (!net_eq(fi->fib_net, net) ||13541354+ fi->fib_tb_id != tb_id)13531355 continue;13541356 if (fi->fib_prefsrc == local) {13551357 fi->fib_flags |= RTNH_F_DEAD;
···150150 tp->segs_in = 0;151151 tcp_segs_in(tp, skb);152152 __skb_pull(skb, tcp_hdrlen(skb));153153+ sk_forced_mem_schedule(sk, skb->truesize);153154 skb_set_owner_r(skb, sk);154155155156 TCP_SKB_CB(skb)->seq++;···227226 tcp_fastopen_add_skb(child, skb);228227229228 tcp_rsk(req)->rcv_nxt = tp->rcv_nxt;229229+ tp->rcv_wup = tp->rcv_nxt;230230 /* tcp_conn_request() is sending the SYNACK,231231 * and queues the child into listener accept queue.232232 */
+1-1
net/ipv4/tcp_yeah.c
···7676 if (!tcp_is_cwnd_limited(sk))7777 return;78787979- if (tp->snd_cwnd <= tp->snd_ssthresh)7979+ if (tcp_in_slow_start(tp))8080 tcp_slow_start(tp, acked);81818282 else if (!yeah->doing_reno_now) {
···333333 if (!uc.center_freq1)334334 return;335335336336- /* proceed to downgrade the chandef until usable or the same */336336+ /* proceed to downgrade the chandef until usable or the same as AP BW */337337 while (uc.width > max_width ||338338- !cfg80211_reg_can_beacon_relax(sdata->local->hw.wiphy, &uc,339339- sdata->wdev.iftype))338338+ (uc.width > sta->tdls_chandef.width &&339339+ !cfg80211_reg_can_beacon_relax(sdata->local->hw.wiphy, &uc,340340+ sdata->wdev.iftype)))340341 ieee80211_chandef_downgrade(&uc);341342342343 if (!cfg80211_chandef_identical(&uc, &sta->tdls_chandef)) {
-1
net/netfilter/nf_tables_netdev.c
···3030 if (!iph)3131 return;32323333- iph = ip_hdr(skb);3433 if (iph->ihl < 5 || iph->version != 4)3534 return;3635
···878878 struct sctp_chunk *chunk,879879 u16 chunk_len)880880{881881- size_t psize, pmtu;881881+ size_t psize, pmtu, maxsize;882882 sctp_xmit_t retval = SCTP_XMIT_OK;883883884884 psize = packet->size;···905905 packet->ipfragok = 1;906906 goto out;907907 }908908+909909+ /* Similarly, if this chunk was built before a PMTU910910+ * reduction, we have to fragment it at IP level now. So911911+ * if the packet already contains something, we need to912912+ * flush.913913+ */914914+ maxsize = pmtu - packet->overhead;915915+ if (packet->auth)916916+ maxsize -= WORD_ROUND(packet->auth->skb->len);917917+ if (chunk_len > maxsize)918918+ retval = SCTP_XMIT_PMTU_FULL;908919909920 /* It is also okay to fragment if the chunk we are910921 * adding is a control chunk, but only if current packet
+3-2
net/sunrpc/auth_gss/svcauth_gss.c
···569569 struct rsc *found;570570571571 memset(&rsci, 0, sizeof(rsci));572572- rsci.handle.data = handle->data;573573- rsci.handle.len = handle->len;572572+ if (dup_to_netobj(&rsci.handle, handle->data, handle->len))573573+ return NULL;574574 found = rsc_lookup(cd, &rsci);575575+ rsc_free(&rsci);575576 if (!found)576577 return NULL;577578 if (cache_check(cd, &found->h, NULL))
+32-13
net/sunrpc/xprtrdma/verbs.c
···5151#include <linux/slab.h>5252#include <linux/prefetch.h>5353#include <linux/sunrpc/addr.h>5454+#include <linux/sunrpc/svc_rdma.h>5455#include <asm/bitops.h>5556#include <linux/module.h> /* try_module_get()/module_put() */5657···924923 }925924926925 INIT_LIST_HEAD(&buf->rb_recv_bufs);927927- for (i = 0; i < buf->rb_max_requests; i++) {926926+ for (i = 0; i < buf->rb_max_requests + RPCRDMA_MAX_BC_REQUESTS; i++) {928927 struct rpcrdma_rep *rep;929928930929 rep = rpcrdma_create_rep(r_xprt);···10191018 rep = rpcrdma_buffer_get_rep_locked(buf);10201019 rpcrdma_destroy_rep(ia, rep);10211020 }10211021+ buf->rb_send_count = 0;1022102210231023 spin_lock(&buf->rb_reqslock);10241024 while (!list_empty(&buf->rb_allreqs)) {···10341032 spin_lock(&buf->rb_reqslock);10351033 }10361034 spin_unlock(&buf->rb_reqslock);10351035+ buf->rb_recv_count = 0;1037103610381037 rpcrdma_destroy_mrs(buf);10391038}···10771074 spin_unlock(&buf->rb_mwlock);10781075}1079107610771077+static struct rpcrdma_rep *10781078+rpcrdma_buffer_get_rep(struct rpcrdma_buffer *buffers)10791079+{10801080+ /* If an RPC previously completed without a reply (say, a10811081+ * credential problem or a soft timeout occurs) then hold off10821082+ * on supplying more Receive buffers until the number of new10831083+ * pending RPCs catches up to the number of posted Receives.10841084+ */10851085+ if (unlikely(buffers->rb_send_count < buffers->rb_recv_count))10861086+ return NULL;10871087+10881088+ if (unlikely(list_empty(&buffers->rb_recv_bufs)))10891089+ return NULL;10901090+ buffers->rb_recv_count++;10911091+ return rpcrdma_buffer_get_rep_locked(buffers);10921092+}10931093+10801094/*10811095 * Get a set of request/reply buffers.10961096+ *10971097+ * Reply buffer (if available) is attached to send buffer upon return.10821098 */10831099struct rpcrdma_req *10841100rpcrdma_buffer_get(struct rpcrdma_buffer *buffers)···11071085 spin_lock(&buffers->rb_lock);11081086 if (list_empty(&buffers->rb_send_bufs))11091087 goto out_reqbuf;10881088+ buffers->rb_send_count++;11101089 req = rpcrdma_buffer_get_req_locked(buffers);11111111- if (list_empty(&buffers->rb_recv_bufs))11121112- goto out_repbuf;11131113- req->rl_reply = rpcrdma_buffer_get_rep_locked(buffers);10901090+ req->rl_reply = rpcrdma_buffer_get_rep(buffers);11141091 spin_unlock(&buffers->rb_lock);11151092 return req;1116109311171094out_reqbuf:11181095 spin_unlock(&buffers->rb_lock);11191119- pr_warn("rpcrdma: out of request buffers (%p)\n", buffers);11201120- return NULL;11211121-out_repbuf:11221122- list_add(&req->rl_free, &buffers->rb_send_bufs);11231123- spin_unlock(&buffers->rb_lock);11241124- pr_warn("rpcrdma: out of reply buffers (%p)\n", buffers);10961096+ pr_warn("RPC: %s: out of request buffers\n", __func__);11251097 return NULL;11261098}11271099···11331117 req->rl_reply = NULL;1134111811351119 spin_lock(&buffers->rb_lock);11201120+ buffers->rb_send_count--;11361121 list_add_tail(&req->rl_free, &buffers->rb_send_bufs);11371137- if (rep)11221122+ if (rep) {11231123+ buffers->rb_recv_count--;11381124 list_add_tail(&rep->rr_list, &buffers->rb_recv_bufs);11251125+ }11391126 spin_unlock(&buffers->rb_lock);11401127}11411128···11521133 struct rpcrdma_buffer *buffers = req->rl_buffer;1153113411541135 spin_lock(&buffers->rb_lock);11551155- if (!list_empty(&buffers->rb_recv_bufs))11561156- req->rl_reply = rpcrdma_buffer_get_rep_locked(buffers);11361136+ req->rl_reply = rpcrdma_buffer_get_rep(buffers);11571137 spin_unlock(&buffers->rb_lock);11581138}11591139···11661148 struct rpcrdma_buffer *buffers = &rep->rr_rxprt->rx_buf;1167114911681150 spin_lock(&buffers->rb_lock);11511151+ buffers->rb_recv_count--;11691152 list_add_tail(&rep->rr_list, &buffers->rb_recv_bufs);11701153 spin_unlock(&buffers->rb_lock);11711154}
···207207 family = XFRM_SPI_SKB_CB(skb)->family;208208209209 /* if tunnel is present override skb->mark value with tunnel i_key */210210- if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4) {211211- switch (family) {212212- case AF_INET:210210+ switch (family) {211211+ case AF_INET:212212+ if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4)213213 mark = be32_to_cpu(XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4->parms.i_key);214214- break;215215- case AF_INET6:214214+ break;215215+ case AF_INET6:216216+ if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6)216217 mark = be32_to_cpu(XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6->parms.i_key);217217- break;218218- }218218+ break;219219 }220220221221 /* Allocate new secpath or COW existing one. */
+4
net/xfrm/xfrm_policy.c
···626626627627 /* re-insert all policies by order of creation */628628 list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {629629+ if (xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) {630630+ /* skip socket policies */631631+ continue;632632+ }629633 newpos = NULL;630634 chain = policy_hash_bysel(net, &policy->selector,631635 policy->family,
+4-9
net/xfrm/xfrm_user.c
···896896 struct sock *sk = cb->skb->sk;897897 struct net *net = sock_net(sk);898898899899- xfrm_state_walk_done(walk, net);899899+ if (cb->args[0])900900+ xfrm_state_walk_done(walk, net);900901 return 0;901902}902903···922921 u8 proto = 0;923922 int err;924923925925- cb->args[0] = 1;926926-927924 err = nlmsg_parse(cb->nlh, 0, attrs, XFRMA_MAX,928925 xfrma_policy);929926 if (err < 0)···938939 proto = nla_get_u8(attrs[XFRMA_PROTO]);939940940941 xfrm_state_walk_init(walk, proto, filter);942942+ cb->args[0] = 1;941943 }942944943945 (void) xfrm_state_walk(net, walk, dump_one_state, &info);···20512051 if (up->hard) {20522052 xfrm_policy_delete(xp, p->dir);20532053 xfrm_audit_policy_delete(xp, 1, true);20542054- } else {20552055- // reset the timers here?20562056- WARN(1, "Don't know what to do with soft policy expire\n");20572054 }20582055 km_policy_expired(xp, p->dir, up->hard, nlh->nlmsg_pid);20592056···2114211721152118 err = verify_newpolicy_info(&ua->policy);21162119 if (err)21172117- goto bad_policy;21202120+ goto free_state;2118212121192122 /* build an XP */21202123 xp = xfrm_policy_construct(net, &ua->policy, attrs, &err);···2146214921472150 return 0;2148215121492149-bad_policy:21502150- WARN(1, "BAD policy passed\n");21512152free_state:21522153 kfree(x);21532154nomem:
+3-3
tools/lguest/lguest.c
···32663266 }32673267 }3268326832693269+ /* If we exit via err(), this kills all the threads, restores tty. */32703270+ atexit(cleanup_devices);32713271+32693272 /* We always have a console device, and it's always device 1. */32703273 setup_console();32713274···3371336833723369 /* Ensure that we terminate if a device-servicing child dies. */33733370 signal(SIGCHLD, kill_launcher);33743374-33753375- /* If we exit via err(), this kills all the threads, restores tty. */33763376- atexit(cleanup_devices);3377337133783372 /* If requested, chroot to a directory */33793373 if (chroot_path) {