bug-patch
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-patch] Patch abort while patching the linux kernel


From: Barry Davis
Subject: Re: [bug-patch] Patch abort while patching the linux kernel
Date: Fri, 5 May 2017 10:29:33 +0100

I narrowed the issue down to patching a file that ends without a new line, followed by patching another file.

The following trimmed down linux-4.4.66 patch exhibits this behaviour:

--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -1487,6 +1494,8 @@ int drm_mode_convert_umode(struct drm_display_mode *out,
        if (out->status != MODE_OK)
                goto out;

+       drm_mode_set_crtcinfo(out, CRTC_INTERLACE_HALVE_V);
+
        ret = 0;

 out:
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -339,14 +339,17 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
  * using the PRIME helpers.
  */
 struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
-                                    struct drm_gem_object *obj, int flags)
+                                    struct drm_gem_object *obj,
+                                    int flags)
 {
-       DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
-
-       exp_info.ops = &drm_gem_prime_dmabuf_ops;
-       exp_info.size = obj->size;
-       exp_info.flags = flags;
-       exp_info.priv = obj;
+       struct dma_buf_export_info exp_info = {
+               .exp_name = KBUILD_MODNAME, /* white lie for debug */
+               .owner = dev->driver->fops->owner,
+               .ops = &drm_gem_prime_dmabuf_ops,
+               .size = obj->size,
+               .flags = flags,
+               .priv = obj,
+       };

        if (dev->driver->gem_prime_res_obj)
                exp_info.resv = dev->driver->gem_prime_res_obj(obj);

I've managed to fix the issue with the following patch to patch-2.7.5:
--- patch-2.7.5/src/patch.c     2015-03-07 00:34:20.000000000 +0000
+++ patch-2.7.5/src/patch.c     2017-05-04 16:50:29.356159495 +0100
@@ -50,7 +50,7 @@
 static void init_output (struct outstate *);
 static FILE *open_outfile (char const *);
 static void init_reject (char const *);
-static void reinitialize_almost_everything (void);
+static void reinitialize_almost_everything (struct outstate *);
 static void remove_if_needed (char const *, bool *);
 static void usage (FILE *, int) __attribute__((noreturn));

@@ -190,7 +190,7 @@
        open_patch_file (patchname);
        there_is_another_patch (! (inname || posixly_correct), &file_type)
          || apply_empty_patch;
-       reinitialize_almost_everything(),
+       reinitialize_almost_everything(&outstate),
          skip_reject_file = false,
          apply_empty_patch = false
     ) {                                        /* for each patch in patch file */
@@ -682,7 +682,7 @@
 /* Prepare to find the next patch to do in the patch file. */

 static void
-reinitialize_almost_everything (void)
+reinitialize_almost_everything (struct outstate *outstate)
 {
     re_patch();
     re_input();
@@ -707,6 +707,9 @@

     reverse = reverse_flag_specified;
     skip_rest_of_patch = false;
+
+    outstate->after_newline = true;
+    outstate->zero_output = true;
 }

 static char const shortopts[] = "bB:cd:D:eEfF:g:i:l"

Resetting zero_output might not be necessary, but after_newline needs to be reset when we move on to patching the next file.

Best regards
Barry Davis




On 4 May 2017 at 14:44, Barry Davis <address@hidden> wrote:
I'm applying hundreds of patches in a batch, so am using unusual arguments as I want to be able to generate a reject file whilst dry run patching, and have all the rejects from one patch to go to the same file. This has worked fine for ages until I hit this issue with a specific patch file.

The issue occurs when applying the linux-4.4.66 patch to linux-4.4.
I get the same issue using all versions of patch I've tried including v2.5.4 and the latest v2.7.5.

To help you reproduce:
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/patch-4.4.66.xz
tar xvf opensource/packages/linux-4.4.tar.xz
xzcat patch-4.4.66.xz > patch-4.4.66

address@hidden:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

address@hidden:~$ patch --version
GNU patch 2.7.5

address@hidden:~$ patch -d linux-4.4 -Np1 -i ../patch-4.4.66 -o tmp --reject-file=patch-4.4.66.rej
patching file tmp (read from Documentation/ABI/testing/sysfs-bus-iio-proximity-as3935)
patching file tmp (read from Documentation/ABI/testing/sysfs-bus-usb)
patching file tmp (read from Documentation/Makefile)
<snip>
patching file tmp (read from drivers/gpu/drm/drm_irq.c)
patching file tmp (read from drivers/gpu/drm/drm_modes.c)
patching file tmp (read from drivers/gpu/drm/drm_prime.c)
patch: patch.c:1419: apply_hunk: Assertion `outstate->after_newline' failed.
Aborted (core dumped)
address@hidden:~$




reply via email to

[Prev in Thread] Current Thread [Next in Thread]