рдорд┐рдиреЗрд╕реЛрдЯрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреА рдПрдХ рдЯреАрдо рдиреЗ рднреЗрдЬреЗ рдЧрдП рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдорд╛рдлрд╝реА рдХреЗ рдПрдХ рдЦреБрд▓реЗ рдкрддреНрд░ рдХреЗ рдмрд╛рдж, рдорд┐рдиреЗрд╕реЛрдЯрд╛ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣, рдЬрд┐рдирдХреА рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реНрд╡реАрдХреГрддрд┐ рдЧреНрд░реЗрдЧ рдХреНрд░реЛрд╣-рд╣рд╛рд░реНрдЯрдореИрди рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреА рдЧрдИ рдереА, рдиреЗ рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдкреИрдЪ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ред рдЗрди рдкреИрдЪ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд.

рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдкреИрдЪ рдХреЛ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреА рдкрд╣рд▓ рдкрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛; рдПрдХ рднреА рдкреИрдЪ рдХреЛ рдордВрдЬреВрд░реА рдирд╣реАрдВ рджреА рдЧрдИ рдереАред рдпрд╣ рддрдереНрдп рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░реЗрдЧ рдХреНрд░реЛрд╣-рд╣рд╛рд░реНрдЯрдореИрди рдиреЗ рдЗрддрдирд╛ рдХрдареЛрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреИрдЪ рдХреЛ рд░рдЦрд░рдЦрд╛рд╡рдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдореЛрджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрддрд╛ рддреЛ рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реЛрддрд╛ред рдЕрдВрдд рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рджрд╛рд╡рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЙрдирдХрд╛ рдЗрд░рд╛рджрд╛ рдПрдХ рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдерд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреИрдЪ рдХреЛ Git рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡реЗ рдХрд┐рддрдиреА рджреВрд░ рддрдХ рдЧрдП рд╣реЛрдВрдЧреЗред

рдЕрдЧрд╕реНрдд 2020 рдореЗрдВ рдХреБрд▓ рдЕрдЬреНрдЮрд╛рдд рдкрддреЗ рд╕реЗ [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд] ╨╕ [рдИрдореЗрд▓ рд╕рдВрд░рдХреНрд╖рд┐рдд] (рдЬреЗрдореНрд╕ рдмреЙрдиреНрдб рдХрд╛ рдкрддреНрд░) рдкрд╛рдВрдЪ рдкреИрдЪ рднреЗрдЬреЗ рдЧрдП: рджреЛ рд╕рд╣реА (1, 2) рдФрд░ рддреАрди рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ (1, 2, 3), рдЬрд┐рд╕рд╕реЗ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рд╣реБрдИред рдкреНрд░рддреНрдпреЗрдХ рдкреИрдЪ рдореЗрдВ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 1-4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдереАрдВред рдЧрд╝рд▓рдд рдкреИрдЪ рдХреЗ рдкреАрдЫреЗ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╕реЗ рджреЛрд╣рд░реА рдореБрдХреНрдд рднреЗрджреНрдпрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж, рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдЖрдбрд╝ рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд░реНрдиреЗрд▓ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдкреИрдЪ рднреЗрдЬрдиреЗ рдХреЗ рдкрд┐рдЫрд▓реЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред

рдкрд╣рд▓реЗ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдкреИрдЪ рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ kfree() рдкрд░ рдХреЙрд▓ рдЬреЛрдбрд╝рдХрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдореБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдмрдирд╛рдИрдВ (рдЙрдкрдпреЛрдЧ-рдмрд╛рдж-рдореБрдХреНрдд)ред рдЗрд╕ рдкреИрдЪ рдХреЛ рдЕрдиреБрд░рдХреНрд╖рдХ (рдЬрд┐рд░реА рд╕реНрд▓реИрдмреА) рдиреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдФрд░ рдмрддрд╛рдпрд╛ рдХрд┐ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреЗрджреНрдпрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ред > p2 = p1[n] = kmalloc_array(64, sizeof(u16), GFP_KERNEL); > - рдпрджрд┐ (!p2) рд╡рд╛рдкрд╕реА -ENOMEM; > + рдпрджрд┐ (!рдкреА2) { > + рдХреЗрдлреНрд░реА(рдкреА1); > + рд╡рд╛рдкрд╕реА -ENOMEM; > + }

рджреВрд╕рд░реЗ рдкреИрдЪ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж-рдореБрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреА рд╢рд░реНрддреЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдереАрдВред рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреИрдЪ рдХреЛ рдЕрдиреБрд░рдХреНрд╖рдХ (рдбреИрди рдХрд╛рд░рдкреЗрдВрдЯрд░) рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ list_add_tail рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдкреИрдЪ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ "chdev" рдкреЙрдЗрдВрдЯрд░ рдХреЛ put_device рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреАрдЪреЗ рдХреЙрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ dev_err(&chdev ->dev..). рд╣рд╛рд▓рд╛рдБрдХрд┐, рднреЗрджреНрдпрддрд╛ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдкреИрдЪ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ (ret dev); dev_err(&chdev->dev, DRV_NAME ": kfifo_alloc рд╡рд┐рдлрд▓\n"); ret = -ENOMEM; рдЧреЛрдЯреЛ err_fifo;

рддреАрд╕рд░реЗ рдкреИрдЪ рдХреЛ рднреА рдПрдХ рдЕрдиреНрдп рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрд░рдХреНрд╖рдХ (рдорд┐рдХреЗрд▓ рд░реЗрдирд▓) рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рднреЗрджреНрдпрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдерд╛ (pdev рдХреЗ рд▓рд┐рдП рдбрдмрд▓ рдХреЙрд▓)ред рдпрджрд┐ (!window->virt) { printk(KERN_ERR MOD_NAME ": ioremap(%08lx, %08lx) рдЕрд╕рдлрд▓\n", window->phys, window->size); + pci_dev_put(pdev); рдмрд╛рд╣рд░ рдЬрд╛рдирд╛ рд╣реИ; } ... рдпрджрд┐ (!рдорд╛рдирдЪрд┐рддреНрд░) { printk(KERN_ERR MOD_NAME ": kmalloc рд╡рд┐рдлрд▓"); + pci_dev_put(pdev); рдмрд╛рд╣рд░ рдЬрд╛рдирд╛ рд╣реИ; } рдореЗрдорд╕реЗрдЯ(рдорд╛рдирдЪрд┐рддреНрд░, 0, рдЖрдХрд╛рд░(*рдорд╛рдирдЪрд┐рддреНрд░)); ... рдпрджрд┐ (mtd_device_register(map->mtd, NULL, 0)) {map_destroy(map->mtd); рдорд╛рдирдЪрд┐рддреНрд░->mtd = рд╢реВрдиреНрдп; + pci_dev_put(pdev); рдмрд╛рд╣рд░ рдЬрд╛рдирд╛ рд╣реИ; }

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ 4 рдореЗрдВ рд╕реЗ 5 рдкреИрдЪ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рд▓реЗрдХрд┐рди рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЦреБрдж рдПрдХ рдЧрд▓рддреА рдХреА рдФрд░ рдПрдХ рдкреИрдЪ рдореЗрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдерд╛, рдЙрдирдХреА рд░рд╛рдп рдореЗрдВ, рдореБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рд╢рд░реНрддреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреНрд░реБрдЯрд┐ = pci_request_mem_regions(pdev, nitrox_driver_name); рдпрджрд┐ (рддреНрд░реБрдЯрд┐) { pci_disable_device(pdev); + dev_err(&pdev->dev, тАЬрдореЗрдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓!\nтАЭ); рдЧрд╝рд▓рддреА рд╕реЗ рд╡рд╛рдкрд╕реА; }

рд╕реНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ